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 5b3d169..6c2357c 100644 Binary files a/config/linux/ipu75xa/gcss/IMX471_BBG803N3.IPU75XA.bin and b/config/linux/ipu75xa/gcss/IMX471_BBG803N3.IPU75XA.bin differ diff --git a/config/linux/ipu75xa/libcamhal_configs.json b/config/linux/ipu75xa/libcamhal_configs.json index 42d9c94..2e976a0 100644 --- a/config/linux/ipu75xa/libcamhal_configs.json +++ b/config/linux/ipu75xa/libcamhal_configs.json @@ -25,17 +25,7 @@ "ov13b10-uf-2", "ov08x40-uf-0", "ov08x40-uf-2", - "lt6911gxd-1-0", - "lt6911gxd-2-2", - "imx471-uf-0", - "isx031-1-0", - "isx031-2-0", - "isx031-3-0", - "isx031-4-0", - "isx031-5-2", - "isx031-6-2", - "isx031-7-2", - "isx031-8-2" + "imx471-uf-0", ], "videoStreamNum" : 2 } diff --git a/config/linux/ipu8/gcss/OV13B10_09B13.IPU8.bin b/config/linux/ipu8/gcss/OV13B10_09B13.IPU8.bin new file mode 100644 index 0000000..f37ef96 Binary files /dev/null and b/config/linux/ipu8/gcss/OV13B10_09B13.IPU8.bin differ 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 0000000..e6fbb57 Binary files /dev/null and b/config/linux/ipu8/gcss/OV13B10_09B13_2M.IPU8.bin differ diff --git a/config/linux/ipu8/libcamhal_configs.json b/config/linux/ipu8/libcamhal_configs.json new file mode 100644 index 0000000..8d9076d --- /dev/null +++ b/config/linux/ipu8/libcamhal_configs.json @@ -0,0 +1,29 @@ +// +// 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. +// + +{ + "Common" : { + "version": 1.0, + "platform": "IPU7", + // The value format of availableSensors is "sensor name"-wf/uf-"CSI port ID". + // wf is word facing, and uf is user facing. + "availableSensors": [ + "ov13b10-wf-2", + "ov13b10-uf-0" + ], + "videoStreamNum" : 2 + } +} diff --git a/config/linux/ipu8/ov13b10.aiqb b/config/linux/ipu8/ov13b10.aiqb new file mode 100644 index 0000000..d6fc9d6 Binary files /dev/null and b/config/linux/ipu8/ov13b10.aiqb differ diff --git a/config/linux/ipu8/pipe_scheduler_profiles.json b/config/linux/ipu8/pipe_scheduler_profiles.json new file mode 100644 index 0000000..5ee2676 --- /dev/null +++ b/config/linux/ipu8/pipe_scheduler_profiles.json @@ -0,0 +1,48 @@ +// +// Copyright (C) 2025 Intel Corporation. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +{ + "PipeSchedulerPolicy": { + // Configuration is chosen according to: graphId, usecase, cameraId + "schedulers": [ + { + "id": 1, "graphId": 100002, + "pipe_executors": [ + { + "name": "video_lb", + "nodes": [ + "lbff", + ], + }, + { + "name": "video_po", + "nodes": [ + "post_1", + "post_2", + ], + }, + { + "name": "still_full", + "nodes": [ + "lbff1", + "post_0", + ], + }, + ], + }, + ], + } +} diff --git a/config/linux/ipu8/pnp_profiles.json b/config/linux/ipu8/pnp_profiles.json new file mode 100644 index 0000000..223d952 --- /dev/null +++ b/config/linux/ipu8/pnp_profiles.json @@ -0,0 +1,37 @@ +// +// Copyright (C) 2025 Intel Corporation. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +{ + "PnpDebugConfig": { + "Power": { + "useMockAAL": false, + "useMockHal": false, + "pnpMockFps": 30, + // algos + "bypass3A": false, + "bypassPAL": false, + // disable all face features + "disableFace": false, + "disableFaceAe": false, + "bypassFDAlgo": false, + // IPU PSYS + "bypassCB": false, + "useMockPipes": false, + // IPU ISYS + "bypassISys": false, + } + } +} diff --git a/config/linux/ipu8/sensors/ov13b10-uf.json b/config/linux/ipu8/sensors/ov13b10-uf.json new file mode 100644 index 0000000..9c8ce68 --- /dev/null +++ b/config/linux/ipu8/sensors/ov13b10-uf.json @@ -0,0 +1,288 @@ +// +// Copyright (C) 2025 Intel Corporation +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +{ + "CameraSettings": { + "Sensor": [ + { + "name": "ov13b10-uf", + "description": "ov13b10 as sensor.", + "MediaCtlConfig": [ + { + "id": 0 , + "configMode": "AUTO", + "output": [2104, 1560], + "format": "V4L2_PIX_FMT_SGRBG10", + "formats": [ + { + "name": "ov13b10 $I2CBUS", "pad": 0, "width": 2104, "height": 1560, + "format": "V4L2_MBUS_FMT_SGRBG10_1X10" + }, + { + "name": "Intel IPU7 CSI2 $CSI_PORT", "pad": 0, "width": 2104, "height": 1560, + "format": "V4L2_MBUS_FMT_SGRBG10_1X10" + } + ], + "link": [ + { + "srcName": "ov13b10 $I2CBUS", "srcPad": 0, "sinkName": "Intel IPU7 CSI2 $CSI_PORT", + "sinkPad": 0, "enable": true + }, + { + "srcName": "Intel IPU7 CSI2 $CSI_PORT", "srcPad": 1, + "sinkName": "Intel IPU7 ISYS Capture $CAP_N", "sinkPad": 0, "enable": true + } + ], + "videonode": [ + { + "name": "Intel IPU7 ISYS Capture $CAP_N", "videoNodeType": "VIDEO_GENERIC" + }, + { + "name": "Intel IPU7 CSI2 $CSI_PORT", "videoNodeType": "VIDEO_ISYS_RECEIVER" + }, + { + "name": "ov13b10 $I2CBUS", "videoNodeType": "VIDEO_PIXEL_ARRAY" + } + ] + } + ], + "StaticMetadata": { + "supportedStreamConfig": [ + { + "format": "V4L2_PIX_FMT_NV12", "size": [1920, 1080], "field": 0, "mcId": 0 + }, + { + "format": "V4L2_PIX_FMT_NV12", "size": [1280, 960], "field": 0, "mcId": 0 + }, + { + "format": "V4L2_PIX_FMT_NV12", "size": [1280, 720], "field": 0, "mcId": 0 + }, + { + "format": "V4L2_PIX_FMT_NV12", "size": [640, 480], "field": 0, "mcId": 0 + }, + { + "format": "V4L2_PIX_FMT_NV12", "size": [640, 360], "field": 0, "mcId": 0 + }, + { + "format": "V4L2_PIX_FMT_NV12", "size": [320, 240], "field": 0, "mcId": 0 + }, + { + "format": "V4L2_PIX_FMT_JPEG", "size": [1920, 1080], "field": 0, "mcId": 0 + }, + { + "format": "V4L2_PIX_FMT_JPEG", "size": [1280, 960], "field": 0, "mcId": 0 + }, + { + "format": "V4L2_PIX_FMT_JPEG", "size": [1280, 720], "field": 0, "mcId": 0 + }, + { + "format": "V4L2_PIX_FMT_JPEG", "size": [640, 480], "field": 0, "mcId": 0 + }, + { + "format": "V4L2_PIX_FMT_JPEG", "size": [640, 360], "field": 0, "mcId": 0 + }, + { + "format": "V4L2_PIX_FMT_JPEG", "size": [320, 240], "field": 0, "mcId": 0 + }, + ], + "supportedFeatures": [ + "MANUAL_EXPOSURE", "MANUAL_WHITE_BALANCE", "IMAGE_ENHANCEMENT", + "NOISE_REDUCTION", "PER_FRAME_CONTROL", "SCENE_MODE" ], + "fpsRange": [ 15, 15, 24, 24, 15, 30, 30, 30 ], + "evRange": [ -6, 6 ], + "evStep": [ 1, 3 ], + "supportedAeMode": [ "AUTO", "MANUAL" ], + "supportedVideoStabilizationModes": ["OFF"], + "supportedSceneMode": ["NORMAL"], + "supportedAntibandingMode": [ "AUTO", "50Hz", "60Hz", "OFF" ], + "supportedAwbMode": [ "AUTO", "INCANDESCENT", "FLUORESCENT", "DAYLIGHT", "FULL_OVERCAST", + "PARTLY_OVERCAST", "SUNSET", "VIDEO_CONFERENCE", "MANUAL_CCT_RANGE", "MANUAL_WHITE_POINT", + "MANUAL_GAIN", "MANUAL_COLOR_TRANSFORM" ], + "supportedAfMode": [ "AUTO", "MACRO", "CONTINUOUS_VIDEO", "CONTINUOUS_PICTURE", "OFF" ], + "metadata":{ + "ae.lockAvailable": [1], + "awb.lockAvailable": [1], + // 0: OFF, 1: AUTO, 2: USE_SCENE_MODE, 3: OFF_KEEP_STATE + "control.availableModes" : [ 0, 1 ], + // 0: DISABLE, 1: FACE_PRIORITY + "control.availableSceneModes": [1], + "control.maxRegions" : [ 1, 0, 1 ], + "control.enableZsl": [1], + // 0: OFF, 1: SMPLE, 2: FULL + "statistics.info.availableFaceDetectModes" : [ 0 ], + "statistics.info.maxFaceCount" : [10], + "sensor.orientation" : [0], + // 43*15.9 + "sensor.maxAnalogSensitivity" : [699], + "sensor.info.sensitivityRange" : [46, 1399], + // align with supportedAeExposureTimeRange + "sensor.info.exposureTimeRange": [ 100, 100000 ], + "sensor.info.activeArraySize": [ 0, 0, 1920, 1080 ], + // align with ISYS output (2-lane) + "sensor.info.pixelArraySize": [2104, 1560], + // 4208x1.12um 3120x1.12um + "sensor.info.physicalSize": [ 4.71, 3.49 ], + // 0: off, 1: solid color, 2: color bars + "sensor.availableTestPatternModes": [ 0, 2 ], + // 0:RGGB, 1:GRBG, 2:GBRG, 3:BGGR, 4:RGB + "sensor.info.colorFilterArrangement": [2], + // shading 0:OFF,1:FAST,2:HIGH_QUALITY + "shading.availableModes": [ 0, 1, 2 ], + "lens.facing": [0], + "lens.info.availableApertures": [2.2], + "lens.info.availableFilterDensities": [0.0], + "lens.info.availableFocalLengths": [3.39], + "lens.info.availableOpticalStabilization": [0], + "lens.info.hyperfocalDistance": [1.37], + "lens.info.minimumFocusDistance": [10.0], + "lens.info.shadingMapSize": [ 63, 47 ], + "lens.info.focusDistanceCalibration": [1], + // raw, yuv, jpeg + "request.maxNumOutputStreams": [ 1, 3, 1 ], + // 0: No input, 1: 1 input stream (YUV or RAW), 2: 2 input streams (YUV and RAW) + "request.maxNumInputStreams": [1], + "request.pipelineMaxDepth": [7], + // 0:backward, 1:manual_sensor, 2:manual_pso_processing, 3:raw, 4:zsl, 5:read_sensor_settings, 6:burst_capture, 7: yuv reprocessing + "request.availableCapabilities": [ 0, 1, 2, 5, 6 ], + // input fmt, output fmt number, output fmts; fmt: YCbCr_420_888:0x23 (35), IMPLEMENTATION_DEFINED:0x22 (34), Blob:0x21 (33) + "scaler.availableInputOutputFormatsMap": [ 34, 2, 33, 35 ], + "scaler.availableMaxDigitalZoom": [ 16.0 ], + "sensor.opaqueRawSize": [2104, 1560, 100], + // available stream configurations: format: IMPLEMENTATION_DEFINED(34)|YCbCr_420_888:0x23(35)|BLOB(33), widthxheight, type: output(0)|input(1) + "scaler.availableStreamConfigurations": [ + 33, 1920, 1080, 0, + 33, 1280, 960, 0, + 33, 1280, 720, 0, + 33, 640, 480, 0, + 33, 640, 360, 0, + 33, 320, 240, 0, + 35, 1920, 1080, 0, + 35, 1280, 960, 0, + 35, 1280, 720, 0, + 35, 640, 480, 0, + 35, 640, 360, 0, + 35, 320, 240, 0, + 34, 1920, 1080, 0, + 34, 1280, 960, 0, + 34, 1280, 720, 0, + 34, 640, 480, 0, + 34, 640, 360, 0, + 34, 320, 240, 0, + 34, 2104, 1560, 1, + ], + // minimum frame duration: format: IMPLEMENTATION_DEFINED(34)|YCbCr_420_888:0x23(35)|BLOB(33), widthxheight, duration:(ns) + "scaler.availableMinFrameDurations": [ + 33, 1920, 1080, 33333333, + 33, 1280, 960, 33333333, + 33, 1280, 720, 33333333, + 33, 640, 480, 33333333, + 33, 640, 360, 33333333, + 33, 320, 240, 33333333, + 35, 1920, 1080, 33333333, + 35, 1280, 960, 33333333, + 35, 1280, 720, 33333333, + 35, 640, 480, 33333333, + 35, 640, 360, 33333333, + 35, 320, 240, 33333333, + 34, 1920, 1080, 33333333, + 34, 1280, 960, 33333333, + 34, 1280, 720, 33333333, + 34, 640, 480, 33333333, + 34, 640, 360, 33333333, + 34, 320, 240, 33333333, + ], + // maximum stall duration: format: IMPLEMENTATION_DEFINED(34)|YCbCr_420_888:0x23(35)|BLOB(33), widthxheight, duration:(ns) + "scaler.availableStallDurations": [ + 33, 1920, 1080, 33333333, + 33, 1280, 960, 33333333, + 33, 1280, 720, 33333333, + 33, 640, 480, 33333333, + 33, 640, 360, 33333333, + 33, 320, 240, 33333333, + ], + // 1920*1080*1.5 + "jpeg.maxSize": [3110400], + // INCREASING ORDER + "jpeg.availableThumbnailSizes": [ 0, 0, 320, 180, 320, 240 ], + // 0:off, 1:fast, 2:high_quality, 3:zero_shutter_lag + "edge.availableEdgeModes": [ 0, 1, 2, 3 ], + // 0:off, 1:fast, 2:high_quality + "hotPixel.availableHotPixelModes": [ 1, 2 ], + // 0:off, 1:fast, 2:high_quality, 3:minimal, 4:zero_shutter_lag + "noiseReduction.availableNoiseReductionModes": [ 0, 1, 2, 4 ], + "tonemap.maxCurvePoints": [1024], + // 0:contrast_curve, 1:fast, 2:high_quality, 3:gamma_value, 4:preset_curve + "tonemap.availableToneMapModes": [ 1, 2, 3, 4 ], + // Number of frames + "reprocess.maxCaptureStall": [4], + // 0:limited, 1:full, 2:legacy, 3:level3 + "info.supportedHardwareLevel": [1], + // 0:per-frame, -1:unknown, other positive number:frame count + "sync.maxLatency": [0] + } + }, + "supportedTuningConfig": [ ["NORMAL", "VIDEO", "ov13b10"], ["STILL_CAPTURE", "VIDEO", "ov13b10"]], + // The lard tags configuration. Every tag should be 4-characters. + // TuningMode, cmc tag, aiq tag, isp tag, others tag + "lardTags": [[ "VIDEO", "DFLT", "DFLT", "DFLT", "DFLT" ]], + // ascending order request + "supportedISysSizes": [[2104, 1560]], + "supportedISysFormat": ["V4L2_PIX_FMT_SGRBG10"], + "enableAIQ": true, + "iSysRawFormat": "V4L2_PIX_FMT_SGRBG10", + "maxRawDataNum": 32, + "initialSkipFrame": 0, + "exposureLag": 2, + "gainLag": 2, + "digitalGainLag": 0, + // There are 2 yuv color range mode, like full, reduced. + "yuvColorRangeMode": "full", + "pipeSwitchDelayFrame": 60, + "graphSettingsFile": "OV13B10_09B13_2M.IPU8.bin", + "graphSettingsType": "dispersed", + "enablePSysProcessor": true, + "dvsType": "IMG_TRANS", + "nvmDeviceInfo": [ "NVM", 1680], + "lensName": "dw9714", + "lensHwType": "LENS_VCM_HW", + "testPatternMap": { "Off": 0, "ColorBars": 1 + }, + "enableAiqd": true, + "useCrlModule": false, + "pslOutputMapForRotation": [ + [[1920, 1080], [1920, 1080]], + [[1280, 960], [1280, 960]], + [[1280, 720], [1280, 720]], + [[640, 480], [1280, 960]], + [[640, 360], [1280, 720]], + ], + "maxRequestsInflight": 5, + "faceEngineRunningInterval": 10, + "faceEngineRunningIntervalNoFace": 10, + "faceAeEnabled": false, + "runFaceWithSyncMode": false, + // pvl face detection:0, google facessd:1 + "faceEngineVendor": 1, + "psysBundleWithAic": false, + "skipFrameV4L2Error": true, + "isISYSCompression": false, + "isPSACompression": false, + "unregisterExtDmaBuf": true, + "usingMockPSys": false, + } + ] + } +} diff --git a/config/linux/ipu8/sensors/ov13b10-wf.json b/config/linux/ipu8/sensors/ov13b10-wf.json new file mode 100644 index 0000000..ca1bf39 --- /dev/null +++ b/config/linux/ipu8/sensors/ov13b10-wf.json @@ -0,0 +1,315 @@ +// +// Copyright (C) 2025 Intel Corporation +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +{ + "CameraSettings": { + "Sensor": [ + { + "name": "ov13b10-wf", + "description": "ov13b10 as sensor.", + "MediaCtlConfig": [ + { + "id": 0 , + "configMode": "AUTO", + "output": [4208, 3120], + "format": "V4L2_PIX_FMT_SGRBG10", + "formats": [ + { + "name": "ov13b10 $I2CBUS", "pad": 0, "width": 4208, "height": 3120, + "format": "V4L2_MBUS_FMT_SGRBG10_1X10" + }, + { + "name": "Intel IPU7 CSI2 $CSI_PORT", "pad": 0, "width": 4208, "height": 3120, + "format": "V4L2_MBUS_FMT_SGRBG10_1X10" + } + ], + "link": [ + { + "srcName": "ov13b10 $I2CBUS", "srcPad": 0, "sinkName": "Intel IPU7 CSI2 $CSI_PORT", + "sinkPad": 0, "enable": true + }, + { + "srcName": "Intel IPU7 CSI2 $CSI_PORT", "srcPad": 1, + "sinkName": "Intel IPU7 ISYS Capture $CAP_N", "sinkPad": 0, "enable": true + } + ], + "videonode": [ + { + "name": "Intel IPU7 ISYS Capture $CAP_N", "videoNodeType": "VIDEO_GENERIC" + }, + { + "name": "Intel IPU7 CSI2 $CSI_PORT", "videoNodeType": "VIDEO_ISYS_RECEIVER" + }, + { + "name": "ov13b10 $I2CBUS", "videoNodeType": "VIDEO_PIXEL_ARRAY" + } + ] + } + ], + "StaticMetadata": { + "supportedStreamConfig": [ + { + "format": "V4L2_PIX_FMT_NV12", "size": [4096, 3072], "field": 0, "mcId": 0 + }, + { + "format": "V4L2_PIX_FMT_NV12", "size": [3840, 2160], "field": 0, "mcId": 0 + }, + { + "format": "V4L2_PIX_FMT_NV12", "size": [1920, 1080], "field": 0, "mcId": 0 + }, + { + "format": "V4L2_PIX_FMT_NV12", "size": [1280, 960], "field": 0, "mcId": 0 + }, + { + "format": "V4L2_PIX_FMT_NV12", "size": [1280, 720], "field": 0, "mcId": 0 + }, + { + "format": "V4L2_PIX_FMT_NV12", "size": [640, 480], "field": 0, "mcId": 0 + }, + { + "format": "V4L2_PIX_FMT_NV12", "size": [640, 360], "field": 0, "mcId": 0 + }, + { + "format": "V4L2_PIX_FMT_NV12", "size": [320, 240], "field": 0, "mcId": 0 + }, + { + "format": "V4L2_PIX_FMT_JPEG", "size": [4096, 3072], "field": 0, "mcId": 0 + }, + { + "format": "V4L2_PIX_FMT_JPEG", "size": [3840, 2160], "field": 0, "mcId": 0 + }, + { + "format": "V4L2_PIX_FMT_JPEG", "size": [1920, 1080], "field": 0, "mcId": 0 + }, + { + "format": "V4L2_PIX_FMT_JPEG", "size": [1280, 960], "field": 0, "mcId": 0 + }, + { + "format": "V4L2_PIX_FMT_JPEG", "size": [1280, 720], "field": 0, "mcId": 0 + }, + { + "format": "V4L2_PIX_FMT_JPEG", "size": [640, 480], "field": 0, "mcId": 0 + }, + { + "format": "V4L2_PIX_FMT_JPEG", "size": [640, 360], "field": 0, "mcId": 0 + }, + { + "format": "V4L2_PIX_FMT_JPEG", "size": [320, 240], "field": 0, "mcId": 0 + }, + ], + "supportedFeatures": [ + "MANUAL_EXPOSURE", "MANUAL_WHITE_BALANCE", "IMAGE_ENHANCEMENT", + "NOISE_REDUCTION", "PER_FRAME_CONTROL", "SCENE_MODE" ], + "fpsRange": [ 15, 15, 24, 24, 15, 30, 30, 30 ], + "evRange": [ -6, 6 ], + "evStep": [ 1, 3 ], + "supportedAeMode": [ "AUTO", "MANUAL" ], + "supportedVideoStabilizationModes": ["OFF"], + "supportedSceneMode": ["NORMAL"], + "supportedAntibandingMode": [ "AUTO", "50Hz", "60Hz", "OFF" ], + "supportedAwbMode": [ "AUTO", "INCANDESCENT", "FLUORESCENT", "DAYLIGHT", "FULL_OVERCAST", + "PARTLY_OVERCAST", "SUNSET", "VIDEO_CONFERENCE", "MANUAL_CCT_RANGE", "MANUAL_WHITE_POINT", + "MANUAL_GAIN", "MANUAL_COLOR_TRANSFORM" ], + "supportedAfMode": [ "AUTO", "MACRO", "CONTINUOUS_VIDEO", "CONTINUOUS_PICTURE", "OFF" ], + "metadata":{ + "ae.lockAvailable": [1], + "awb.lockAvailable": [1], + // 0: OFF, 1: AUTO, 2: USE_SCENE_MODE, 3: OFF_KEEP_STATE + "control.availableModes" : [ 0, 1 ], + // 0: DISABLE, 1: FACE_PRIORITY + "control.availableSceneModes": [1], + "control.maxRegions" : [ 1, 0, 1 ], + "control.enableZsl": [1], + // 0: OFF, 1: SMPLE, 2: FULL + "statistics.info.availableFaceDetectModes" : [ 0 ], + "statistics.info.maxFaceCount" : [10], + "sensor.orientation" : [0], + // 43*15.9 + "sensor.maxAnalogSensitivity" : [699], + "sensor.info.sensitivityRange" : [46, 1399], + // align with supportedAeExposureTimeRange + "sensor.info.exposureTimeRange": [ 100, 100000 ], + "sensor.info.activeArraySize": [ 0, 0, 4208, 3120 ], + "sensor.info.pixelArraySize": [4208, 3120], + // 4208x1.12um 3120x1.12um + "sensor.info.physicalSize": [ 4.71, 3.49 ], + // 0: off, 1: solid color, 2: color bars + "sensor.availableTestPatternModes": [ 0, 2 ], + // 0:RGGB, 1:GRBG, 2:GBRG, 3:BGGR, 4:RGB + "sensor.info.colorFilterArrangement": [2], + // shading 0:OFF,1:FAST,2:HIGH_QUALITY + "shading.availableModes": [ 0, 1, 2 ], + "lens.facing": [1], + "lens.info.availableApertures": [2.2], + "lens.info.availableFilterDensities": [0.0], + "lens.info.availableFocalLengths": [3.39], + "lens.info.availableOpticalStabilization": [0], + "lens.info.hyperfocalDistance": [1.37], + "lens.info.minimumFocusDistance": [10.0], + "lens.info.shadingMapSize": [ 63, 47 ], + "lens.info.focusDistanceCalibration": [1], + // raw, yuv, jpeg + "request.maxNumOutputStreams": [ 1, 3, 1 ], + // 0: No input, 1: 1 input stream (YUV or RAW), 2: 2 input streams (YUV and RAW) + "request.maxNumInputStreams": [1], + "request.pipelineMaxDepth": [7], + // 0:backward, 1:manual_sensor, 2:manual_pso_processing, 3:raw, 4:zsl, 5:read_sensor_settings, 6:burst_capture, 7: yuv reprocessing + "request.availableCapabilities": [ 0, 1, 2, 5, 6 ], + // input fmt, output fmt number, output fmts; fmt: YCbCr_420_888:0x23 (35), IMPLEMENTATION_DEFINED:0x22 (34), Blob:0x21 (33) + "scaler.availableInputOutputFormatsMap": [ 34, 2, 33, 35 ], + "scaler.availableMaxDigitalZoom": [ 16.0 ], + "sensor.opaqueRawSize": [4208, 3120, 100], + // available stream configurations: format: IMPLEMENTATION_DEFINED(34)|YCbCr_420_888:0x23(35)|BLOB(33), widthxheight, type: output(0)|input(1) + "scaler.availableStreamConfigurations": [ + 33, 4096, 3072, 0, + 33, 3840, 2160, 0, + 33, 1920, 1080, 0, + 33, 1280, 960, 0, + 33, 1280, 720, 0, + 33, 640, 480, 0, + 33, 640, 360, 0, + 33, 320, 240, 0, + 35, 4096, 3072, 0, + 35, 3840, 2160, 0, + 35, 1920, 1080, 0, + 35, 1280, 960, 0, + 35, 1280, 720, 0, + 35, 640, 480, 0, + 35, 640, 360, 0, + 35, 320, 240, 0, + 34, 4096, 3072, 0, + 34, 3840, 2160, 0, + 34, 1920, 1080, 0, + 34, 1280, 960, 0, + 34, 1280, 720, 0, + 34, 640, 480, 0, + 34, 640, 360, 0, + 34, 320, 240, 0, + 34, 4096, 3072, 1, + ], + // minimum frame duration: format: IMPLEMENTATION_DEFINED(34)|YCbCr_420_888:0x23(35)|BLOB(33), widthxheight, duration:(ns) + "scaler.availableMinFrameDurations": [ + 33, 4096, 3072, 66666666, + 33, 3840, 2160, 66666666, + 33, 1920, 1080, 33333333, + 33, 1280, 960, 33333333, + 33, 1280, 720, 33333333, + 33, 640, 480, 33333333, + 33, 640, 360, 33333333, + 33, 320, 240, 33333333, + 35, 4096, 3072, 66666666, + 35, 3840, 2160, 66666666, + 35, 1920, 1080, 33333333, + 35, 1280, 960, 33333333, + 35, 1280, 720, 33333333, + 35, 640, 480, 33333333, + 35, 640, 360, 33333333, + 35, 320, 240, 33333333, + 34, 4096, 3072, 66666666, + 34, 3840, 2160, 66666666, + 34, 1920, 1080, 33333333, + 34, 1280, 960, 33333333, + 34, 1280, 720, 33333333, + 34, 640, 480, 33333333, + 34, 640, 360, 33333333, + 34, 320, 240, 33333333, + ], + // maximum stall duration: format: IMPLEMENTATION_DEFINED(34)|YCbCr_420_888:0x23(35)|BLOB(33), widthxheight, duration:(ns) + "scaler.availableStallDurations": [ + 33, 4096, 3072, 66666666, + 33, 3840, 2160, 66666666, + 33, 1920, 1080, 33333333, + 33, 1280, 960, 33333333, + 33, 1280, 720, 33333333, + 33, 640, 480, 33333333, + 33, 640, 360, 33333333, + 33, 320, 240, 33333333, + ], + // 4096*3072*1.5 + "jpeg.maxSize": [18874368], + // INCREASING ORDER + "jpeg.availableThumbnailSizes": [ 0, 0, 320, 180, 320, 240 ], + // 0:off, 1:fast, 2:high_quality, 3:zero_shutter_lag + "edge.availableEdgeModes": [ 0, 1, 2, 3 ], + // 0:off, 1:fast, 2:high_quality + "hotPixel.availableHotPixelModes": [ 1, 2 ], + // 0:off, 1:fast, 2:high_quality, 3:minimal, 4:zero_shutter_lag + "noiseReduction.availableNoiseReductionModes": [ 0, 1, 2, 4 ], + "tonemap.maxCurvePoints": [1024], + // 0:contrast_curve, 1:fast, 2:high_quality, 3:gamma_value, 4:preset_curve + "tonemap.availableToneMapModes": [ 1, 2, 3, 4 ], + // Number of frames + "reprocess.maxCaptureStall": [4], + // 0:limited, 1:full, 2:legacy, 3:level3 + "info.supportedHardwareLevel": [1], + // 0:per-frame, -1:unknown, other positive number:frame count + "sync.maxLatency": [0] + } + }, + "supportedTuningConfig": [ ["NORMAL", "VIDEO", "ov13b10"], ["STILL_CAPTURE", "VIDEO", "ov13b10"]], + // The lard tags configuration. Every tag should be 4-characters. + // TuningMode, cmc tag, aiq tag, isp tag, others tag + "lardTags": [[ "VIDEO", "DFLT", "DFLT", "DFLT", "DFLT" ]], + // ascending order request + "supportedISysSizes": [[4208, 3120]], + "supportedISysFormat": ["V4L2_PIX_FMT_SGRBG10"], + "enableAIQ": true, + "iSysRawFormat": "V4L2_PIX_FMT_SGRBG10", + "maxRawDataNum": 32, + "initialSkipFrame": 0, + "exposureLag": 2, + "gainLag": 2, + "digitalGainLag": 0, + // There are 2 yuv color range mode, like full, reduced. + "yuvColorRangeMode": "full", + "pipeSwitchDelayFrame": 60, + "graphSettingsFile": "OV13B10_09B13.IPU8.bin", + "graphSettingsType": "dispersed", + "enablePSysProcessor": true, + "dvsType": "IMG_TRANS", + "nvmDeviceInfo": [ "NVM", 1680], + "lensName": "dw9714", + "lensHwType": "LENS_VCM_HW", + "testPatternMap": { "Off": 0, "ColorBars": 1 + }, + "enableAiqd": true, + "useCrlModule": false, + "pslOutputMapForRotation": [ + [[2560, 1440], [2560, 1440]], + [[1920, 1440], [1920, 1440]], + [[1920, 1080], [1920, 1080]], + [[1280, 960], [1280, 960]], + [[1280, 720], [1280, 720]], + [[640, 480], [1280, 960]], + [[640, 360], [1280, 720]], + ], + "maxRequestsInflight": 5, + "faceEngineRunningInterval": 10, + "faceEngineRunningIntervalNoFace": 10, + "faceAeEnabled": false, + "runFaceWithSyncMode": false, + // pvl face detection:0, google facessd:1 + "faceEngineVendor": 1, + "psysBundleWithAic": false, + "skipFrameV4L2Error": true, + "isISYSCompression": false, + "isPSACompression": false, + "unregisterExtDmaBuf": true, + "usingMockPSys": false, + } + ] + } +} diff --git a/modules/CMakeLists.txt b/modules/CMakeLists.txt index 53aa03a..704296c 100644 --- a/modules/CMakeLists.txt +++ b/modules/CMakeLists.txt @@ -14,8 +14,4 @@ # limitations under the License. # - add_subdirectory(algowrapper) - -if (SUPPORT_LIVE_TUNING) - add_subdirectory(livetune) -endif() #SUPPORT_LIVE_TUNING +add_subdirectory(algowrapper) diff --git a/modules/ipu_desc/ipu75xa/FragmentsConfigurator.cpp b/modules/ipu_desc/ipu75xa/FragmentsConfigurator.cpp index 0c153c9..30abfb8 100644 --- a/modules/ipu_desc/ipu75xa/FragmentsConfigurator.cpp +++ b/modules/ipu_desc/ipu75xa/FragmentsConfigurator.cpp @@ -24,8 +24,10 @@ * this notice or any other notice embedded in Materials by Intel or Intels * suppliers or licensors in any way. */ + #include "FragmentsConfigurator.h" #include +#include Ipu8FragmentsConfigurator::Ipu8FragmentsConfigurator(IStaticGraphConfig* staticGraph, OuterNode* node) : _staticGraph(staticGraph), _node(node) { @@ -509,14 +511,24 @@ StaticGraphStatus Ipu8FragmentsConfigurator::configFragmentsUpscaler(StaticGraph kernelFragments[stripe].upscalerFragDesc.fragmentInputCropRight = pixelsToCrop - kernelFragments[stripe].upscalerFragDesc.fragmentInputCropLeft; } - uint16_t outputStartX = static_cast(kernelFragments[stripe].fragmentStartX > resInfo->input_crop.left ? + uint16_t stripeStart = static_cast(kernelFragments[stripe].fragmentStartX > resInfo->input_crop.left ? kernelFragments[stripe].fragmentStartX - resInfo->input_crop.left : 0); - outputStartX += kernelFragments[stripe].upscalerFragDesc.fragmentInputCropLeft; + stripeStart += kernelFragments[stripe].upscalerFragDesc.fragmentInputCropLeft; + auto scaleFactorFixed = static_cast(static_cast(scaleFactor * static_cast(1 << 16))) / static_cast(1 << 16); - outputStartX = GRA_ROUND_DOWN(static_cast(floor(static_cast(outputStartX) / scaleFactor)), 2); + float widthIn = static_cast(resInfo->input_width - resInfo->input_crop.left - resInfo->input_crop.right); + float horizontalOffset = (static_cast(widthIn) - static_cast(scaleFactorFixed) * (static_cast(resInfo->output_width) - 1.0F)) / 2.0F; - _outputStartX[runKernel->kernel_uuid][stripe] = outputStartX; + auto nScaledPixelsMax = (static_cast(stripeStart) + 1.0f - horizontalOffset) / scaleFactorFixed; + auto nScaledPixels = std::ceil((static_cast(stripeStart) - horizontalOffset) / scaleFactorFixed); + + if (static_cast(nScaledPixels) % 2 != 0) + { + nScaledPixels = 2 * std::floor(nScaledPixelsMax / 2); + } + + _outputStartX[runKernel->kernel_uuid][stripe] = static_cast(nScaledPixels); } return StaticGraphStatus::SG_OK; diff --git a/modules/ipu_desc/ipu75xa/GraphResolutionConfiguratorInclude.h b/modules/ipu_desc/ipu75xa/GraphResolutionConfiguratorInclude.h index 30bb063..1eceba9 100644 --- a/modules/ipu_desc/ipu75xa/GraphResolutionConfiguratorInclude.h +++ b/modules/ipu_desc/ipu75xa/GraphResolutionConfiguratorInclude.h @@ -39,10 +39,6 @@ #include "Ipu8StaticGraphAutogen.h" #include "Ipu8StaticGraphTypesAutogen.h" #include "Ipu8GraphResolutionConfiguratorAutogen.h" -#elif defined(GRC_IPU9) -#include "Ipu9StaticGraphAutogen.h" -#include "Ipu9StaticGraphTypesAutogen.h" -#include "Ipu9GraphResolutionConfiguratorAutogen.h" #else #include "StaticGraphAutogen.h" #include "StaticGraphTypesAutogen.h" diff --git a/modules/ipu_desc/ipu75xa/Ipu75xaGraphResolutionConfiguratorAutogen.cpp b/modules/ipu_desc/ipu75xa/Ipu75xaGraphResolutionConfiguratorAutogen.cpp index ac7e1d8..2a7c0ab 100644 --- a/modules/ipu_desc/ipu75xa/Ipu75xaGraphResolutionConfiguratorAutogen.cpp +++ b/modules/ipu_desc/ipu75xa/Ipu75xaGraphResolutionConfiguratorAutogen.cpp @@ -1,6 +1,6 @@ /* * INTEL CONFIDENTIAL -* Copyright (c) 2025 Intel Corporation +* Copyright (c) 2026 Intel Corporation * All Rights Reserved. * * The source code contained or described herein and all documents related to diff --git a/modules/ipu_desc/ipu75xa/Ipu75xaGraphResolutionConfiguratorAutogen.h b/modules/ipu_desc/ipu75xa/Ipu75xaGraphResolutionConfiguratorAutogen.h index d091130..992678c 100644 --- a/modules/ipu_desc/ipu75xa/Ipu75xaGraphResolutionConfiguratorAutogen.h +++ b/modules/ipu_desc/ipu75xa/Ipu75xaGraphResolutionConfiguratorAutogen.h @@ -1,6 +1,6 @@ /* * INTEL CONFIDENTIAL -* Copyright (c) 2025 Intel Corporation +* Copyright (c) 2026 Intel Corporation * All Rights Reserved. * * The source code contained or described herein and all documents related to diff --git a/modules/ipu_desc/ipu75xa/Ipu75xaStaticGraphAutogen.cpp b/modules/ipu_desc/ipu75xa/Ipu75xaStaticGraphAutogen.cpp index 2195b70..9a9ade3 100644 --- a/modules/ipu_desc/ipu75xa/Ipu75xaStaticGraphAutogen.cpp +++ b/modules/ipu_desc/ipu75xa/Ipu75xaStaticGraphAutogen.cpp @@ -1,6 +1,6 @@ /* * INTEL CONFIDENTIAL -* Copyright (c) 2025 Intel Corporation +* Copyright (c) 2026 Intel Corporation * All Rights Reserved. * * The source code contained or described herein and all documents related to @@ -979,16 +979,16 @@ void SwRemosaicOuterNode::Init(SwRemosaicOuterNodeConfiguration** selectedGraphC { OuterNode::Init(8, NodeTypes::Sw, 1, nodeKernelConfigurationsOptionsCount, selectedGraphConfiguration[0]->tuningMode, selectedGraphConfiguration[0]->streamId, 0); - uint16_t kernelsUuids[1] = {19706 /*sw_scaler*/}; - uint64_t kernelsRcbBitmap = 0x1; // { sw_scaler[0] } - uint64_t kernelsResolutionHistoryGroupBitmap = 0x0; // {{sw_scaler}[0] } - uint8_t systemApisSizes[1] = {5 /*sw_scaler*/}; + uint16_t kernelsUuids[1] = {8198 /*remosaic_1_0*/}; + uint64_t kernelsRcbBitmap = 0x0; // { } + uint64_t kernelsResolutionHistoryGroupBitmap = 0x0; // {{remosaic_1_0}[0] } + uint8_t systemApisSizes[1] = {0 /*remosaic_1_0*/}; for (uint32_t i = 0; i < kernelConfigurationsOptionsCount; ++i) { nodeKernels.kernelList = kernelListOptions[i]; - InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration[i]->resolutionInfos, kernelsResolutionHistoryGroupBitmap, selectedGraphConfiguration[i]->resolutionHistories, selectedGraphConfiguration[i]->bppInfos, systemApisSizes, selectedGraphConfiguration[i]->systemApiConfiguration); + InitRunKernels(kernelsUuids, kernelsRcbBitmap, nullptr, kernelsResolutionHistoryGroupBitmap, selectedGraphConfiguration[i]->resolutionHistories, selectedGraphConfiguration[i]->bppInfos, systemApisSizes, nullptr); } // set default inner Node @@ -21169,6 +21169,343 @@ StaticGraphStatus imageSubGraphTopology100051::configInnerNodes(SubGraphInnerNod return StaticGraphStatus::SG_OK; } +/* + * Graph 100058 + */ +StaticGraph100058::StaticGraph100058(GraphConfiguration100058** selectedGraphConfiguration, uint32_t kernelConfigurationsOptionsCount, ZoomKeyResolutions* zoomKeyResolutions, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100058, selectedSettingsId, zoomKeyResolutions), + + _imageSubGraph(_sinkMappingConfiguration) +{ + // Construct outer nodes + _graphConfigurations = new GraphConfiguration100058[kernelConfigurationsOptionsCount]; + IsysOuterNodeConfiguration** isysOuterNodeConfigurationOptions = new IsysOuterNodeConfiguration*[kernelConfigurationsOptionsCount]; + SwB2bOuterNodeConfiguration** swB2bOuterNodeConfigurationOptions = new SwB2bOuterNodeConfiguration*[kernelConfigurationsOptionsCount]; + LbffBayerOuterNodeConfiguration** lbffBayerOuterNodeConfigurationOptions = new LbffBayerOuterNodeConfiguration*[kernelConfigurationsOptionsCount]; + BbpsWithTnrOuterNodeConfiguration** bbpsWithTnrOuterNodeConfigurationOptions = new BbpsWithTnrOuterNodeConfiguration*[kernelConfigurationsOptionsCount]; + + for (uint32_t i=0; i < kernelConfigurationsOptionsCount; ++i) + { + _graphConfigurations[i] = *selectedGraphConfiguration[i]; + isysOuterNodeConfigurationOptions[i] = &_graphConfigurations[i].isysOuterNodeConfiguration; + swB2bOuterNodeConfigurationOptions[i] = &_graphConfigurations[i].swB2bOuterNodeConfiguration; + lbffBayerOuterNodeConfigurationOptions[i] = &_graphConfigurations[i].lbffBayerOuterNodeConfiguration; + bbpsWithTnrOuterNodeConfigurationOptions[i] = &_graphConfigurations[i].bbpsWithTnrOuterNodeConfiguration; + } + + _isysOuterNode.Init(isysOuterNodeConfigurationOptions, kernelConfigurationsOptionsCount); + _swB2bOuterNode.Init(swB2bOuterNodeConfigurationOptions, kernelConfigurationsOptionsCount); + _lbffBayerOuterNode.Init(lbffBayerOuterNodeConfigurationOptions, kernelConfigurationsOptionsCount); + _bbpsWithTnrOuterNode.Init(bbpsWithTnrOuterNodeConfigurationOptions, kernelConfigurationsOptionsCount); + + delete[] isysOuterNodeConfigurationOptions; + delete[] swB2bOuterNodeConfigurationOptions; + delete[] lbffBayerOuterNodeConfigurationOptions; + delete[] bbpsWithTnrOuterNodeConfigurationOptions; + + // Use default configuration + updateConfiguration(0); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::SwB2b; + link->destNode = &_swB2bOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::SwB2b; + link->srcNode = &_swB2bOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayer; + link->destNode = &_lbffBayerOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayer; + link->destNode = &_lbffBayerOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayer; + link->destNode = &_lbffBayerOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayer; + link->srcNode = &_lbffBayerOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayer; + link->srcNode = &_lbffBayerOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayer; + link->srcNode = &_lbffBayerOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayer; + link->srcNode = &_lbffBayerOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayer; + link->srcNode = &_lbffBayerOuterNode; + link->srcTerminalId = 19; + link->dest = GraphElementType::BbpsWithTnr; + link->destNode = &_bbpsWithTnrOuterNode; + link->destTerminalId = 9; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayer; + link->srcNode = &_lbffBayerOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::BbpsWithTnr; + link->destNode = &_bbpsWithTnrOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::BbpsWithTnr; + link->srcNode = &_bbpsWithTnrOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::BbpsWithTnr; + link->destNode = &_bbpsWithTnrOuterNode; + link->destTerminalId = 10; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[12]; + link->src = GraphElementType::BbpsWithTnr; + link->srcNode = &_bbpsWithTnrOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::BbpsWithTnr; + link->destNode = &_bbpsWithTnrOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[13]; + link->src = GraphElementType::BbpsWithTnr; + link->srcNode = &_bbpsWithTnrOuterNode; + link->srcTerminalId = 8; + link->dest = GraphElementType::BbpsWithTnr; + link->destNode = &_bbpsWithTnrOuterNode; + link->destTerminalId = 11; + link->type = LinkType::Node2Self; + + link = &_graphLinks[14]; + link->src = GraphElementType::BbpsWithTnr; + link->srcNode = &_bbpsWithTnrOuterNode; + link->srcTerminalId = 8; + link->dest = GraphElementType::BbpsWithTnr; + link->destNode = &_bbpsWithTnrOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[15]; + link->src = GraphElementType::BbpsWithTnr; + link->srcNode = &_bbpsWithTnrOuterNode; + link->srcTerminalId = 14; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::BbpsWithTnr; + link->srcNode = &_bbpsWithTnrOuterNode; + link->srcTerminalId = 15; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 17; ++i) + { + // apply link configuration. select configuration with maximal size + uint32_t selectedLinkConfig = 0; + uint32_t maxSize = _graphConfigurations[0].linkConfigurations[i].bufferSize; + for (uint32_t j = 1; j < kernelConfigurationsOptionsCount; j++) + { + if (_graphConfigurations[j].linkConfigurations[i].bufferSize > maxSize) + { + maxSize = _graphConfigurations[j].linkConfigurations[i].bufferSize; + selectedLinkConfig = j; + } + } + _graphLinks[i].linkConfiguration = &_graphConfigurations[selectedLinkConfig].linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.swB2bOuterNode = &_swB2bOuterNode; + _imageSubGraph.lbffBayerOuterNode = &_lbffBayerOuterNode; + _imageSubGraph.bbpsWithTnrOuterNode = &_bbpsWithTnrOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.swB2bOuterNode->contextId = 1; + _imageSubGraph.lbffBayerOuterNode->contextId = 2; + _imageSubGraph.bbpsWithTnrOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} + +StaticGraphStatus StaticGraph100058::updateConfiguration(uint32_t selectedIndex) +{ + StaticGraphStatus res = StaticGraphStatus::SG_OK; + res = _isysOuterNode.UpdateKernelsSelectedConfiguration(selectedIndex); + if (res != StaticGraphStatus::SG_OK) + { + return res; + } + res = _swB2bOuterNode.UpdateKernelsSelectedConfiguration(selectedIndex); + if (res != StaticGraphStatus::SG_OK) + { + return res; + } + res = _lbffBayerOuterNode.UpdateKernelsSelectedConfiguration(selectedIndex); + if (res != StaticGraphStatus::SG_OK) + { + return res; + } + res = _bbpsWithTnrOuterNode.UpdateKernelsSelectedConfiguration(selectedIndex); + if (res != StaticGraphStatus::SG_OK) + { + return res; + } + return StaticGraphStatus::SG_OK; +} + +StaticGraph100058::~StaticGraph100058() +{ + delete[] _graphConfigurations; + delete _zoomKeyResolutions.zoomKeyResolutionOptions; +} + +StaticGraphStatus imageSubGraphTopology100058::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayer initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerInnerOptions |= (noGmv | noBurstCapture | noIr | noPdaf); + // active public options according to sink mapping + + /* + * Setting Node bbpsWithTnr initial inner node configuration + */ + InnerNodeOptionsFlags bbpsWithTnrInnerOptions = imagePublicInnerNodeConfiguration; + // active public options according to sink mapping + if ( + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + true) + { + bbpsWithTnrInnerOptions |= noMp; + } + if ( + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + true) + { + bbpsWithTnrInnerOptions |= noDp; + } + + /* + * Configuring inner nodes according to the selected inner options + */ + lbffBayerInnerOptions |= noLbOutputPs & (-((imagePublicInnerNodeConfiguration & (noMp | noDp)) == (noMp | noDp))); + lbffBayerInnerOptions |= noLbOutputMe & (-((imagePublicInnerNodeConfiguration & (noMp | noDp)) == (noMp | noDp))); + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerOuterNode->setInnerNode(lbffBayerInnerOptions); + bbpsWithTnrOuterNode->setInnerNode(bbpsWithTnrInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[5]->isActive = !(lbffBayerInnerOptions & no3A); // lbff_Bayer:terminal_connect_ae_output -> ae_out + subGraphLinks[6]->isActive = !(lbffBayerInnerOptions & no3A); // lbff_Bayer:terminal_connect_af_std_output -> af_std_out + subGraphLinks[7]->isActive = !(lbffBayerInnerOptions & no3A); // lbff_Bayer:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[8]->isActive = !(lbffBayerInnerOptions & no3A); // lbff_Bayer:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[15]->isActive = !(bbpsWithTnrInnerOptions & noMp); // bbps_WithTnr:bbps_ofs_mp_yuvn_odr -> image_mp + subGraphLinks[16]->isActive = !(bbpsWithTnrInnerOptions & noDp); // bbps_WithTnr:bbps_ofs_dp_yuvn_odr -> image_dp + + /* + * Link enablement by private inner options + */ + subGraphLinks[9]->isActive = !(lbffBayerInnerOptions & noLbOutputPs); // lbff_Bayer:terminal_connect_ps_output -> bbps_WithTnr:bbps_slim_spatial_yuvn_ifd + subGraphLinks[10]->isActive = !(lbffBayerInnerOptions & noLbOutputMe); // lbff_Bayer:terminal_connect_me_output -> bbps_WithTnr:bbps_tnr_bc_yuv4n_ifd + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 17; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[11]->isActive = (bbpsWithTnrInnerOptions & (noMp|noDp)) != (noMp|noDp); // bbps_WithTnr:bbps_tnr_blend_yuvn_odr -> bbps_WithTnr:bbps_slim_tnr_blend_yuvnm1_ifd + subGraphLinks[12]->isActive = (bbpsWithTnrInnerOptions & (noMp|noDp)) != (noMp|noDp); // bbps_WithTnr:bbps_tnr_scale_yuv4n_odr -> bbps_WithTnr:bbps_slim_tnr_bc_yuv4nm1_ifd + subGraphLinks[13]->isActive = (bbpsWithTnrInnerOptions & (noMp|noDp)) != (noMp|noDp); // bbps_WithTnr:bbps_tnr_bc_rs4n_odr -> bbps_WithTnr:bbps_tnr_blend_rs4n_ifd + subGraphLinks[14]->isActive = (bbpsWithTnrInnerOptions & (noMp|noDp)) != (noMp|noDp); // bbps_WithTnr:bbps_tnr_bc_rs4n_odr -> bbps_WithTnr:bbps_slim_tnr_bc_rs4nm1_ifd + + return StaticGraphStatus::SG_OK; +} + /* * Graph 100052 */ diff --git a/modules/ipu_desc/ipu75xa/Ipu75xaStaticGraphAutogen.h b/modules/ipu_desc/ipu75xa/Ipu75xaStaticGraphAutogen.h index c7dc265..fe7598d 100644 --- a/modules/ipu_desc/ipu75xa/Ipu75xaStaticGraphAutogen.h +++ b/modules/ipu_desc/ipu75xa/Ipu75xaStaticGraphAutogen.h @@ -1,6 +1,6 @@ /* * INTEL CONFIDENTIAL -* Copyright (c) 2025 Intel Corporation +* Copyright (c) 2026 Intel Corporation * All Rights Reserved. * * The source code contained or described herein and all documents related to @@ -454,10 +454,8 @@ struct SwRemosaicOuterNodeConfiguration { uint32_t streamId = 0; uint8_t tuningMode = 0; - StaticGraphKernelRes resolutionInfos[1]; StaticGraphKernelRes resolutionHistories[1]; StaticGraphKernelBppConfiguration bppInfos[1]; - uint8_t systemApiConfiguration[5]; }; struct LbffDol2InputsBayerStatOuterNodeConfiguration @@ -795,6 +793,16 @@ struct GraphConfiguration100051 StaticGraphLinkConfiguration linkConfigurations[20]; }; +struct GraphConfiguration100058 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + SwB2bOuterNodeConfiguration swB2bOuterNodeConfiguration; + LbffBayerOuterNodeConfiguration lbffBayerOuterNodeConfiguration; + BbpsWithTnrOuterNodeConfiguration bbpsWithTnrOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[17]; +}; + struct GraphConfiguration100052 { VirtualSinkMapping sinkMappingConfiguration; @@ -2468,7 +2476,7 @@ class StaticGraph100050 : public IStaticGraphConfig StaticGraph100050(GraphConfiguration100050** selectedGraphConfiguration, uint32_t kernelConfigurationsOptionsCount, ZoomKeyResolutions* zoomKeyResolutions, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); ~StaticGraph100050(); StaticGraphStatus updateConfiguration(uint32_t selectedIndex=0); - static const uint32_t hashCode = 3442380973; // autogenerated + static const uint32_t hashCode = 485560935; // autogenerated private: // Configuration @@ -2535,6 +2543,48 @@ class StaticGraph100051 : public IStaticGraphConfig GraphLink _graphLinks[20]; }; +class imageSubGraphTopology100058 : public GraphTopology { + +public: + imageSubGraphTopology100058(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 17, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + SwB2bOuterNode* swB2bOuterNode = nullptr; + LbffBayerOuterNode* lbffBayerOuterNode = nullptr; + BbpsWithTnrOuterNode* bbpsWithTnrOuterNode = nullptr; + GraphLink* subGraphLinks[17]; + +}; + +class StaticGraph100058 : public IStaticGraphConfig +{ +public: + StaticGraph100058(GraphConfiguration100058** selectedGraphConfiguration, uint32_t kernelConfigurationsOptionsCount, ZoomKeyResolutions* zoomKeyResolutions, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100058(); + StaticGraphStatus updateConfiguration(uint32_t selectedIndex=0); + static const uint32_t hashCode = 1198660673; // autogenerated + +private: + // Configuration + GraphConfiguration100058* _graphConfigurations; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + SwB2bOuterNode _swB2bOuterNode; + LbffBayerOuterNode _lbffBayerOuterNode; + BbpsWithTnrOuterNode _bbpsWithTnrOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100058 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[17]; +}; + class imageSubGraphTopology100052 : public GraphTopology { public: diff --git a/modules/ipu_desc/ipu75xa/Ipu75xaStaticGraphBinaryAutogen.h b/modules/ipu_desc/ipu75xa/Ipu75xaStaticGraphBinaryAutogen.h index e580d45..b202fc8 100644 --- a/modules/ipu_desc/ipu75xa/Ipu75xaStaticGraphBinaryAutogen.h +++ b/modules/ipu_desc/ipu75xa/Ipu75xaStaticGraphBinaryAutogen.h @@ -1,6 +1,6 @@ /* * INTEL CONFIDENTIAL -* Copyright (c) 2025 Intel Corporation +* Copyright (c) 2026 Intel Corporation * All Rights Reserved. * * The source code contained or described herein and all documents related to @@ -69,6 +69,7 @@ enum class GraphConfigurationKeyAttributes : uint32_t WFov = 0x00000200, DocScan = 0x00000400, StillsModeCpHdr = 0x00000800, + B2bActive = 0x00001000, }; struct GraphConfigurationKey { diff --git a/modules/ipu_desc/ipu75xa/Ipu75xaStaticGraphDataPreloadAutogen.c b/modules/ipu_desc/ipu75xa/Ipu75xaStaticGraphDataPreloadAutogen.c index e380537..fdb5892 100644 --- a/modules/ipu_desc/ipu75xa/Ipu75xaStaticGraphDataPreloadAutogen.c +++ b/modules/ipu_desc/ipu75xa/Ipu75xaStaticGraphDataPreloadAutogen.c @@ -1,6 +1,6 @@ /* * INTEL CONFIDENTIAL -* Copyright (c) 2025 Intel Corporation +* Copyright (c) 2026 Intel Corporation * All Rights Reserved. * * The source code contained or described herein and all documents related to diff --git a/modules/ipu_desc/ipu75xa/Ipu75xaStaticGraphDataPreloadAutogen.h b/modules/ipu_desc/ipu75xa/Ipu75xaStaticGraphDataPreloadAutogen.h index a1a6da4..98d791c 100644 --- a/modules/ipu_desc/ipu75xa/Ipu75xaStaticGraphDataPreloadAutogen.h +++ b/modules/ipu_desc/ipu75xa/Ipu75xaStaticGraphDataPreloadAutogen.h @@ -1,6 +1,6 @@ /* * INTEL CONFIDENTIAL -* Copyright (c) 2025 Intel Corporation +* Copyright (c) 2026 Intel Corporation * All Rights Reserved. * * The source code contained or described herein and all documents related to @@ -96,7 +96,7 @@ typedef struct DataRange }DataRange; -static int distinctGraphsCount = 37; +static int distinctGraphsCount = 38; static GraphHashCode hashCodeLookup[] = { {0, 0x4229ABEE}, @@ -129,14 +129,15 @@ static GraphHashCode hashCodeLookup[] = { {100041, 0xF421B02D}, {100042, 0x8397E143}, {100044, 0xA6CC44DD}, - {100050, 0xCD2E90AD}, + {100050, 0x1CF11267}, {100051, 0x8AADA153}, {100052, 0x6435159F}, {100053, 0x246C440B}, {100054, 0x675F6431}, {100055, 0x76EBC27D}, {100056, 0x113143AB}, - {100057, 0xF421B02D} + {100057, 0xF421B02D}, + {100058, 0x47721C41} }; static FrameFormatDesc formatsDB[] = { diff --git a/modules/ipu_desc/ipu75xa/Ipu75xaStaticGraphReaderAutogen.cpp b/modules/ipu_desc/ipu75xa/Ipu75xaStaticGraphReaderAutogen.cpp index bfe7c0e..b175435 100644 --- a/modules/ipu_desc/ipu75xa/Ipu75xaStaticGraphReaderAutogen.cpp +++ b/modules/ipu_desc/ipu75xa/Ipu75xaStaticGraphReaderAutogen.cpp @@ -1,6 +1,6 @@ /* * INTEL CONFIDENTIAL -* Copyright (c) 2025 Intel Corporation +* Copyright (c) 2026 Intel Corporation * All Rights Reserved. * * The source code contained or described herein and all documents related to @@ -540,6 +540,17 @@ StaticGraphStatus StaticGraphReader::GetStaticGraphConfig(GraphConfigurationKey& *graph = new StaticGraph100051( reinterpret_cast(selectedConfigurationData), selectedConfigurationsCount, &_zoomKeyResolutions, &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); break; + case 100058: + if (StaticGraph100058::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + delete[] selectedConfigurationData; + delete[] selectedGraphConfigurationHeaders; + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100058( + reinterpret_cast(selectedConfigurationData), selectedConfigurationsCount, &_zoomKeyResolutions, &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; case 100052: if (StaticGraph100052::hashCode != selectedGraphConfigurationHeader->graphHashCode) { diff --git a/modules/ipu_desc/ipu75xa/Ipu75xaStaticGraphReaderAutogen.h b/modules/ipu_desc/ipu75xa/Ipu75xaStaticGraphReaderAutogen.h index 036cc39..a995215 100644 --- a/modules/ipu_desc/ipu75xa/Ipu75xaStaticGraphReaderAutogen.h +++ b/modules/ipu_desc/ipu75xa/Ipu75xaStaticGraphReaderAutogen.h @@ -1,6 +1,6 @@ /* * INTEL CONFIDENTIAL -* Copyright (c) 2025 Intel Corporation +* Copyright (c) 2026 Intel Corporation * All Rights Reserved. * * The source code contained or described herein and all documents related to diff --git a/modules/ipu_desc/ipu75xa/Ipu75xaStaticGraphTypesAutogen.h b/modules/ipu_desc/ipu75xa/Ipu75xaStaticGraphTypesAutogen.h index f538530..d10e832 100644 --- a/modules/ipu_desc/ipu75xa/Ipu75xaStaticGraphTypesAutogen.h +++ b/modules/ipu_desc/ipu75xa/Ipu75xaStaticGraphTypesAutogen.h @@ -1,6 +1,6 @@ /* * INTEL CONFIDENTIAL -* Copyright (c) 2025 Intel Corporation +* Copyright (c) 2026 Intel Corporation * All Rights Reserved. * * The source code contained or described herein and all documents related to diff --git a/modules/ipu_desc/ipu75xa/Ipu75xaTerminalDescriptorAutogen.cpp b/modules/ipu_desc/ipu75xa/Ipu75xaTerminalDescriptorAutogen.cpp index d7786d1..81be764 100644 --- a/modules/ipu_desc/ipu75xa/Ipu75xaTerminalDescriptorAutogen.cpp +++ b/modules/ipu_desc/ipu75xa/Ipu75xaTerminalDescriptorAutogen.cpp @@ -1,6 +1,6 @@ /* * INTEL CONFIDENTIAL -* Copyright (c) 2025 Intel Corporation +* Copyright (c) 2026 Intel Corporation * All Rights Reserved. * * The source code contained or described herein and all documents related to @@ -608,7 +608,7 @@ TerminalDescriptor SW_REMOSAICTerminalDesc[] = PAC_BUFFER_TYPE_NONE, TERMINAL_BUFFER_TYPE_DATA, TERMINAL_DIR_IN, - 19706, // sw_scaler + 8198, // remosaic_1_0 }, { SW_REMOSAIC_TERMINAL_CONNECT_OUTPUT, @@ -617,7 +617,7 @@ TerminalDescriptor SW_REMOSAICTerminalDesc[] = PAC_BUFFER_TYPE_NONE, TERMINAL_BUFFER_TYPE_DATA, TERMINAL_DIR_OUT, - 19706, // sw_scaler + 8198, // remosaic_1_0 }, }; diff --git a/modules/ipu_desc/ipu75xa/Ipu75xaTerminalDescriptorAutogen.h b/modules/ipu_desc/ipu75xa/Ipu75xaTerminalDescriptorAutogen.h index ad9cf96..2f0e951 100644 --- a/modules/ipu_desc/ipu75xa/Ipu75xaTerminalDescriptorAutogen.h +++ b/modules/ipu_desc/ipu75xa/Ipu75xaTerminalDescriptorAutogen.h @@ -1,6 +1,6 @@ /* * INTEL CONFIDENTIAL -* Copyright (c) 2025 Intel Corporation +* Copyright (c) 2026 Intel Corporation * All Rights Reserved. * * The source code contained or described herein and all documents related to diff --git a/modules/ipu_desc/ipu7x/FragmentsConfigurator.cpp b/modules/ipu_desc/ipu7x/FragmentsConfigurator.cpp index 0c153c9..30abfb8 100644 --- a/modules/ipu_desc/ipu7x/FragmentsConfigurator.cpp +++ b/modules/ipu_desc/ipu7x/FragmentsConfigurator.cpp @@ -24,8 +24,10 @@ * this notice or any other notice embedded in Materials by Intel or Intels * suppliers or licensors in any way. */ + #include "FragmentsConfigurator.h" #include +#include Ipu8FragmentsConfigurator::Ipu8FragmentsConfigurator(IStaticGraphConfig* staticGraph, OuterNode* node) : _staticGraph(staticGraph), _node(node) { @@ -509,14 +511,24 @@ StaticGraphStatus Ipu8FragmentsConfigurator::configFragmentsUpscaler(StaticGraph kernelFragments[stripe].upscalerFragDesc.fragmentInputCropRight = pixelsToCrop - kernelFragments[stripe].upscalerFragDesc.fragmentInputCropLeft; } - uint16_t outputStartX = static_cast(kernelFragments[stripe].fragmentStartX > resInfo->input_crop.left ? + uint16_t stripeStart = static_cast(kernelFragments[stripe].fragmentStartX > resInfo->input_crop.left ? kernelFragments[stripe].fragmentStartX - resInfo->input_crop.left : 0); - outputStartX += kernelFragments[stripe].upscalerFragDesc.fragmentInputCropLeft; + stripeStart += kernelFragments[stripe].upscalerFragDesc.fragmentInputCropLeft; + auto scaleFactorFixed = static_cast(static_cast(scaleFactor * static_cast(1 << 16))) / static_cast(1 << 16); - outputStartX = GRA_ROUND_DOWN(static_cast(floor(static_cast(outputStartX) / scaleFactor)), 2); + float widthIn = static_cast(resInfo->input_width - resInfo->input_crop.left - resInfo->input_crop.right); + float horizontalOffset = (static_cast(widthIn) - static_cast(scaleFactorFixed) * (static_cast(resInfo->output_width) - 1.0F)) / 2.0F; - _outputStartX[runKernel->kernel_uuid][stripe] = outputStartX; + auto nScaledPixelsMax = (static_cast(stripeStart) + 1.0f - horizontalOffset) / scaleFactorFixed; + auto nScaledPixels = std::ceil((static_cast(stripeStart) - horizontalOffset) / scaleFactorFixed); + + if (static_cast(nScaledPixels) % 2 != 0) + { + nScaledPixels = 2 * std::floor(nScaledPixelsMax / 2); + } + + _outputStartX[runKernel->kernel_uuid][stripe] = static_cast(nScaledPixels); } return StaticGraphStatus::SG_OK; diff --git a/modules/ipu_desc/ipu7x/GraphResolutionConfiguratorInclude.h b/modules/ipu_desc/ipu7x/GraphResolutionConfiguratorInclude.h index 30bb063..1eceba9 100644 --- a/modules/ipu_desc/ipu7x/GraphResolutionConfiguratorInclude.h +++ b/modules/ipu_desc/ipu7x/GraphResolutionConfiguratorInclude.h @@ -39,10 +39,6 @@ #include "Ipu8StaticGraphAutogen.h" #include "Ipu8StaticGraphTypesAutogen.h" #include "Ipu8GraphResolutionConfiguratorAutogen.h" -#elif defined(GRC_IPU9) -#include "Ipu9StaticGraphAutogen.h" -#include "Ipu9StaticGraphTypesAutogen.h" -#include "Ipu9GraphResolutionConfiguratorAutogen.h" #else #include "StaticGraphAutogen.h" #include "StaticGraphTypesAutogen.h" diff --git a/modules/ipu_desc/ipu7x/Ipu7xGraphResolutionConfiguratorAutogen.cpp b/modules/ipu_desc/ipu7x/Ipu7xGraphResolutionConfiguratorAutogen.cpp index bab73bd..5cb9d50 100644 --- a/modules/ipu_desc/ipu7x/Ipu7xGraphResolutionConfiguratorAutogen.cpp +++ b/modules/ipu_desc/ipu7x/Ipu7xGraphResolutionConfiguratorAutogen.cpp @@ -1,6 +1,6 @@ /* * INTEL CONFIDENTIAL -* Copyright (c) 2025 Intel Corporation +* Copyright (c) 2026 Intel Corporation * All Rights Reserved. * * The source code contained or described herein and all documents related to @@ -66,6 +66,11 @@ uint32_t GraphResolutionConfiguratorHelper::getRunKernelUuidOfOutput(HwSink hwSi case 100005: // Bayer_NoPdaf_WithNntm_WithTnr case 100040: // Bayer_WithPdaf3_WithNntm_WithTnr return 46539; // nntm_1_0 + case 100044: // Bayer_NoPdaf_WithTnr_WithDeskView + case 100046: // Bayer_NoPdaf_WithTnr_WithDeskViewNoBlend + return 39181; // deskview_1_0 + case 100045: // Bayer_NoPdaf_WithNntm_WithTnr_WithRotation + return 36947; // rotator_1_0 case 100031: // Dol2Inputs_NoGmv_NoTnr if (links[16]->isActive) return 37003; // tm_app if (links[20]->isActive) return 46539; // nntm_1_0 @@ -110,6 +115,8 @@ StaticGraphStatus GraphResolutionConfiguratorHelper::getRunKernelUuidForResHisto kernelUuids.push_back(19706); // sw_scaler kernelUuids.push_back(46539); // nntm_1_0 kernelUuids.push_back(37003); // tm_app + kernelUuids.push_back(39181); // deskview_1_0 + kernelUuids.push_back(36947); // rotator_1_0 return StaticGraphStatus::SG_OK; } diff --git a/modules/ipu_desc/ipu7x/Ipu7xGraphResolutionConfiguratorAutogen.h b/modules/ipu_desc/ipu7x/Ipu7xGraphResolutionConfiguratorAutogen.h index f1384ba..7923f2c 100644 --- a/modules/ipu_desc/ipu7x/Ipu7xGraphResolutionConfiguratorAutogen.h +++ b/modules/ipu_desc/ipu7x/Ipu7xGraphResolutionConfiguratorAutogen.h @@ -1,6 +1,6 @@ /* * INTEL CONFIDENTIAL -* Copyright (c) 2025 Intel Corporation +* Copyright (c) 2026 Intel Corporation * All Rights Reserved. * * The source code contained or described herein and all documents related to diff --git a/modules/ipu_desc/ipu7x/Ipu7xStaticGraphAutogen.cpp b/modules/ipu_desc/ipu7x/Ipu7xStaticGraphAutogen.cpp index 0528949..dca6e2d 100644 --- a/modules/ipu_desc/ipu7x/Ipu7xStaticGraphAutogen.cpp +++ b/modules/ipu_desc/ipu7x/Ipu7xStaticGraphAutogen.cpp @@ -1,6 +1,6 @@ /* * INTEL CONFIDENTIAL -* Copyright (c) 2025 Intel Corporation +* Copyright (c) 2026 Intel Corporation * All Rights Reserved. * * The source code contained or described herein and all documents related to @@ -935,6 +935,66 @@ void SwImvOuterNode::Init(SwImvOuterNodeConfiguration** selectedGraphConfigurati setInnerNode(None); } +void SwDeskviewOuterNode::Init(SwDeskviewOuterNodeConfiguration** selectedGraphConfiguration, uint32_t nodeKernelConfigurationsOptionsCount) +{ + OuterNode::Init(11, NodeTypes::Sw, 1, nodeKernelConfigurationsOptionsCount, selectedGraphConfiguration[0]->tuningMode, selectedGraphConfiguration[0]->streamId, 0); + + uint16_t kernelsUuids[1] = {39181 /*deskview_1_0*/}; + uint64_t kernelsRcbBitmap = 0x1; // { deskview_1_0[0] } + uint64_t kernelsResolutionHistoryGroupBitmap = 0x0; // {{deskview_1_0}[0] } + uint8_t systemApisSizes[1] = {0 /*deskview_1_0*/}; + + for (uint32_t i = 0; i < kernelConfigurationsOptionsCount; ++i) + { + nodeKernels.kernelList = kernelListOptions[i]; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration[i]->resolutionInfos, kernelsResolutionHistoryGroupBitmap, selectedGraphConfiguration[i]->resolutionHistories, selectedGraphConfiguration[i]->bppInfos, systemApisSizes, nullptr); + } + + // set default inner Node + setInnerNode(None); +} + +void SwRotationOuterNode::Init(SwRotationOuterNodeConfiguration** selectedGraphConfiguration, uint32_t nodeKernelConfigurationsOptionsCount) +{ + OuterNode::Init(10, NodeTypes::Sw, 1, nodeKernelConfigurationsOptionsCount, selectedGraphConfiguration[0]->tuningMode, selectedGraphConfiguration[0]->streamId, 0); + + uint16_t kernelsUuids[1] = {36947 /*rotator_1_0*/}; + uint64_t kernelsRcbBitmap = 0x1; // { rotator_1_0[0] } + uint64_t kernelsResolutionHistoryGroupBitmap = 0x0; // {{rotator_1_0}[0] } + uint8_t systemApisSizes[1] = {0 /*rotator_1_0*/}; + + for (uint32_t i = 0; i < kernelConfigurationsOptionsCount; ++i) + { + nodeKernels.kernelList = kernelListOptions[i]; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration[i]->resolutionInfos, kernelsResolutionHistoryGroupBitmap, selectedGraphConfiguration[i]->resolutionHistories, selectedGraphConfiguration[i]->bppInfos, systemApisSizes, nullptr); + } + + // set default inner Node + setInnerNode(None); +} + +void SwDeskviewNoblendOuterNode::Init(SwDeskviewNoblendOuterNodeConfiguration** selectedGraphConfiguration, uint32_t nodeKernelConfigurationsOptionsCount) +{ + OuterNode::Init(11, NodeTypes::Sw, 1, nodeKernelConfigurationsOptionsCount, selectedGraphConfiguration[0]->tuningMode, selectedGraphConfiguration[0]->streamId, 0); + + uint16_t kernelsUuids[1] = {39181 /*deskview_1_0*/}; + uint64_t kernelsRcbBitmap = 0x1; // { deskview_1_0[0] } + uint64_t kernelsResolutionHistoryGroupBitmap = 0x0; // {{deskview_1_0}[0] } + uint8_t systemApisSizes[1] = {0 /*deskview_1_0*/}; + + for (uint32_t i = 0; i < kernelConfigurationsOptionsCount; ++i) + { + nodeKernels.kernelList = kernelListOptions[i]; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration[i]->resolutionInfos, kernelsResolutionHistoryGroupBitmap, selectedGraphConfiguration[i]->resolutionHistories, selectedGraphConfiguration[i]->bppInfos, systemApisSizes, nullptr); + } + + // set default inner Node + setInnerNode(None); +} + /* * Inner Nodes Setters */ @@ -8496,6 +8556,27 @@ void SwImvOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) (void)nodeInnerOptions; } +void SwDeskviewOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + + // No inner nodes + (void)nodeInnerOptions; +} + +void SwRotationOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + + // No inner nodes + (void)nodeInnerOptions; +} + +void SwDeskviewNoblendOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + + // No inner nodes + (void)nodeInnerOptions; +} + /* * Graph 100000 */ @@ -18598,3 +18679,1190 @@ StaticGraphStatus imageSubGraphTopology100042::configInnerNodes(SubGraphInnerNod return StaticGraphStatus::SG_OK; } +/* + * Graph 100044 + */ +StaticGraph100044::StaticGraph100044(GraphConfiguration100044** selectedGraphConfiguration, uint32_t kernelConfigurationsOptionsCount, ZoomKeyResolutions* zoomKeyResolutions, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100044, selectedSettingsId, zoomKeyResolutions), + + _imageSubGraph(_sinkMappingConfiguration) +{ + // Construct outer nodes + _graphConfigurations = new GraphConfiguration100044[kernelConfigurationsOptionsCount]; + IsysOuterNodeConfiguration** isysOuterNodeConfigurationOptions = new IsysOuterNodeConfiguration*[kernelConfigurationsOptionsCount]; + LbffBayerOuterNodeConfiguration** lbffBayerOuterNodeConfigurationOptions = new LbffBayerOuterNodeConfiguration*[kernelConfigurationsOptionsCount]; + BbpsWithTnrOuterNodeConfiguration** bbpsWithTnrOuterNodeConfigurationOptions = new BbpsWithTnrOuterNodeConfiguration*[kernelConfigurationsOptionsCount]; + SwDeskviewOuterNodeConfiguration** swDeskviewOuterNodeConfigurationOptions = new SwDeskviewOuterNodeConfiguration*[kernelConfigurationsOptionsCount]; + SwScalerOuterNodeConfiguration** swScalerOuterNodeConfigurationOptions = new SwScalerOuterNodeConfiguration*[kernelConfigurationsOptionsCount]; + + for (uint32_t i=0; i < kernelConfigurationsOptionsCount; ++i) + { + _graphConfigurations[i] = *selectedGraphConfiguration[i]; + isysOuterNodeConfigurationOptions[i] = &_graphConfigurations[i].isysOuterNodeConfiguration; + lbffBayerOuterNodeConfigurationOptions[i] = &_graphConfigurations[i].lbffBayerOuterNodeConfiguration; + bbpsWithTnrOuterNodeConfigurationOptions[i] = &_graphConfigurations[i].bbpsWithTnrOuterNodeConfiguration; + swDeskviewOuterNodeConfigurationOptions[i] = &_graphConfigurations[i].swDeskviewOuterNodeConfiguration; + swScalerOuterNodeConfigurationOptions[i] = &_graphConfigurations[i].swScalerOuterNodeConfiguration; + } + + _isysOuterNode.Init(isysOuterNodeConfigurationOptions, kernelConfigurationsOptionsCount); + _lbffBayerOuterNode.Init(lbffBayerOuterNodeConfigurationOptions, kernelConfigurationsOptionsCount); + _bbpsWithTnrOuterNode.Init(bbpsWithTnrOuterNodeConfigurationOptions, kernelConfigurationsOptionsCount); + _swDeskviewOuterNode.Init(swDeskviewOuterNodeConfigurationOptions, kernelConfigurationsOptionsCount); + _swScalerOuterNode.Init(swScalerOuterNodeConfigurationOptions, kernelConfigurationsOptionsCount); + + delete[] isysOuterNodeConfigurationOptions; + delete[] lbffBayerOuterNodeConfigurationOptions; + delete[] bbpsWithTnrOuterNodeConfigurationOptions; + delete[] swDeskviewOuterNodeConfigurationOptions; + delete[] swScalerOuterNodeConfigurationOptions; + + // Use default configuration + updateConfiguration(0); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayer; + link->destNode = &_lbffBayerOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayer; + link->destNode = &_lbffBayerOuterNode; + link->destTerminalId = 3; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffBayer; + link->srcNode = &_lbffBayerOuterNode; + link->srcTerminalId = 6; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayer; + link->srcNode = &_lbffBayerOuterNode; + link->srcTerminalId = 7; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayer; + link->srcNode = &_lbffBayerOuterNode; + link->srcTerminalId = 8; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayer; + link->srcNode = &_lbffBayerOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayer; + link->srcNode = &_lbffBayerOuterNode; + link->srcTerminalId = 14; + link->dest = GraphElementType::BbpsWithTnr; + link->destNode = &_bbpsWithTnrOuterNode; + link->destTerminalId = 9; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayer; + link->srcNode = &_lbffBayerOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::BbpsWithTnr; + link->destNode = &_bbpsWithTnrOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::BbpsWithTnr; + link->srcNode = &_bbpsWithTnrOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::BbpsWithTnr; + link->destNode = &_bbpsWithTnrOuterNode; + link->destTerminalId = 10; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[10]; + link->src = GraphElementType::BbpsWithTnr; + link->srcNode = &_bbpsWithTnrOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::BbpsWithTnr; + link->destNode = &_bbpsWithTnrOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::BbpsWithTnr; + link->srcNode = &_bbpsWithTnrOuterNode; + link->srcTerminalId = 8; + link->dest = GraphElementType::BbpsWithTnr; + link->destNode = &_bbpsWithTnrOuterNode; + link->destTerminalId = 11; + link->type = LinkType::Node2Self; + + link = &_graphLinks[12]; + link->src = GraphElementType::BbpsWithTnr; + link->srcNode = &_bbpsWithTnrOuterNode; + link->srcTerminalId = 8; + link->dest = GraphElementType::BbpsWithTnr; + link->destNode = &_bbpsWithTnrOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[13]; + link->src = GraphElementType::BbpsWithTnr; + link->srcNode = &_bbpsWithTnrOuterNode; + link->srcTerminalId = 14; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::BbpsWithTnr; + link->srcNode = &_bbpsWithTnrOuterNode; + link->srcTerminalId = 15; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::BbpsWithTnr; + link->srcNode = &_bbpsWithTnrOuterNode; + link->srcTerminalId = 16; + link->dest = GraphElementType::ImagePpp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::BbpsWithTnr; + link->srcNode = &_bbpsWithTnrOuterNode; + link->srcTerminalId = 14; + link->dest = GraphElementType::SwDeskview; + link->destNode = &_swDeskviewOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[17]; + link->src = GraphElementType::BbpsWithTnr; + link->srcNode = &_bbpsWithTnrOuterNode; + link->srcTerminalId = 15; + link->dest = GraphElementType::SwDeskview; + link->destNode = &_swDeskviewOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[18]; + link->src = GraphElementType::SwDeskview; + link->srcNode = &_swDeskviewOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::SwDeskview; + link->srcNode = &_swDeskviewOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[20]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 21; ++i) + { + // apply link configuration. select configuration with maximal size + uint32_t selectedLinkConfig = 0; + uint32_t maxSize = _graphConfigurations[0].linkConfigurations[i].bufferSize; + for (uint32_t j = 1; j < kernelConfigurationsOptionsCount; j++) + { + if (_graphConfigurations[j].linkConfigurations[i].bufferSize > maxSize) + { + maxSize = _graphConfigurations[j].linkConfigurations[i].bufferSize; + selectedLinkConfig = j; + } + } + _graphLinks[i].linkConfiguration = &_graphConfigurations[selectedLinkConfig].linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffBayerOuterNode = &_lbffBayerOuterNode; + _imageSubGraph.bbpsWithTnrOuterNode = &_bbpsWithTnrOuterNode; + _imageSubGraph.swDeskviewOuterNode = &_swDeskviewOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffBayerOuterNode->contextId = 1; + _imageSubGraph.bbpsWithTnrOuterNode->contextId = 2; + _imageSubGraph.swDeskviewOuterNode->contextId = 3; + _imageSubGraph.swScalerOuterNode->contextId = 4; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} + +StaticGraphStatus StaticGraph100044::updateConfiguration(uint32_t selectedIndex) +{ + StaticGraphStatus res = StaticGraphStatus::SG_OK; + res = _isysOuterNode.UpdateKernelsSelectedConfiguration(selectedIndex); + if (res != StaticGraphStatus::SG_OK) + { + return res; + } + res = _lbffBayerOuterNode.UpdateKernelsSelectedConfiguration(selectedIndex); + if (res != StaticGraphStatus::SG_OK) + { + return res; + } + res = _bbpsWithTnrOuterNode.UpdateKernelsSelectedConfiguration(selectedIndex); + if (res != StaticGraphStatus::SG_OK) + { + return res; + } + res = _swDeskviewOuterNode.UpdateKernelsSelectedConfiguration(selectedIndex); + if (res != StaticGraphStatus::SG_OK) + { + return res; + } + res = _swScalerOuterNode.UpdateKernelsSelectedConfiguration(selectedIndex); + if (res != StaticGraphStatus::SG_OK) + { + return res; + } + return StaticGraphStatus::SG_OK; +} + +StaticGraph100044::~StaticGraph100044() +{ + delete[] _graphConfigurations; + delete _zoomKeyResolutions.zoomKeyResolutionOptions; +} + +StaticGraphStatus imageSubGraphTopology100044::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayer initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerInnerOptions |= (noGmv | noBurstCapture | noIr | noPdaf); + // active public options according to sink mapping + + /* + * Setting Node bbpsWithTnr initial inner node configuration + */ + InnerNodeOptionsFlags bbpsWithTnrInnerOptions = imagePublicInnerNodeConfiguration; + // active public options according to sink mapping + if ( + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + true) + { + bbpsWithTnrInnerOptions |= noMp; + } + if ( + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && + true) + { + bbpsWithTnrInnerOptions |= noDp; + } + if ( + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + true) + { + bbpsWithTnrInnerOptions |= noPpp; + } + + /* + * Configuring inner nodes according to the selected inner options + */ + lbffBayerInnerOptions |= noLbOutputPs & (-((imagePublicInnerNodeConfiguration & (noMp | noDp | noPpp)) == (noMp | noDp | noPpp))); + lbffBayerInnerOptions |= noLbOutputMe & (-((imagePublicInnerNodeConfiguration & (noMp | noDp | noPpp)) == (noMp | noDp | noPpp))); + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerOuterNode->setInnerNode(lbffBayerInnerOptions); + bbpsWithTnrOuterNode->setInnerNode(bbpsWithTnrInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = !(lbffBayerInnerOptions & no3A); // lbff_Bayer:terminal_connect_ae_output -> ae_out + subGraphLinks[4]->isActive = !(lbffBayerInnerOptions & no3A); // lbff_Bayer:terminal_connect_af_std_output -> af_std_out + subGraphLinks[5]->isActive = !(lbffBayerInnerOptions & no3A); // lbff_Bayer:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[6]->isActive = !(lbffBayerInnerOptions & no3A); // lbff_Bayer:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[13]->isActive = !(bbpsWithTnrInnerOptions & noMp); // bbps_WithTnr:bbps_ofs_mp_yuvn_odr -> image_mp + subGraphLinks[16]->isActive = !(bbpsWithTnrInnerOptions & noMp); // bbps_WithTnr:bbps_ofs_mp_yuvn_odr -> sw_deskview:terminal_connect_input + subGraphLinks[14]->isActive = !(bbpsWithTnrInnerOptions & noDp); // bbps_WithTnr:bbps_ofs_dp_yuvn_odr -> image_dp + subGraphLinks[17]->isActive = !(bbpsWithTnrInnerOptions & noDp); // bbps_WithTnr:bbps_ofs_dp_yuvn_odr -> sw_deskview:terminal_connect_input + subGraphLinks[15]->isActive = !(bbpsWithTnrInnerOptions & noPpp); // bbps_WithTnr:bbps_ofs_pp_yuvn_odr -> image_ppp + + /* + * Link enablement by private inner options + */ + subGraphLinks[7]->isActive = !(lbffBayerInnerOptions & noLbOutputPs); // lbff_Bayer:terminal_connect_ps_output -> bbps_WithTnr:bbps_slim_spatial_yuvn_ifd + subGraphLinks[8]->isActive = !(lbffBayerInnerOptions & noLbOutputMe); // lbff_Bayer:terminal_connect_me_output -> bbps_WithTnr:bbps_tnr_bc_yuv4n_ifd + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 21; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[9]->isActive = (bbpsWithTnrInnerOptions & (noMp|noDp|noPpp)) != (noMp|noDp|noPpp); // bbps_WithTnr:bbps_tnr_blend_yuvn_odr -> bbps_WithTnr:bbps_slim_tnr_blend_yuvnm1_ifd + subGraphLinks[10]->isActive = (bbpsWithTnrInnerOptions & (noMp|noDp|noPpp)) != (noMp|noDp|noPpp); // bbps_WithTnr:bbps_tnr_scale_yuv4n_odr -> bbps_WithTnr:bbps_slim_tnr_bc_yuv4nm1_ifd + subGraphLinks[11]->isActive = (bbpsWithTnrInnerOptions & (noMp|noDp|noPpp)) != (noMp|noDp|noPpp); // bbps_WithTnr:bbps_tnr_bc_rs4n_odr -> bbps_WithTnr:bbps_tnr_blend_rs4n_ifd + subGraphLinks[12]->isActive = (bbpsWithTnrInnerOptions & (noMp|noDp|noPpp)) != (noMp|noDp|noPpp); // bbps_WithTnr:bbps_tnr_bc_rs4n_odr -> bbps_WithTnr:bbps_slim_tnr_bc_rs4nm1_ifd + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100045 + */ +StaticGraph100045::StaticGraph100045(GraphConfiguration100045** selectedGraphConfiguration, uint32_t kernelConfigurationsOptionsCount, ZoomKeyResolutions* zoomKeyResolutions, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100045, selectedSettingsId, zoomKeyResolutions), + + _imageSubGraph(_sinkMappingConfiguration) +{ + // Construct outer nodes + _graphConfigurations = new GraphConfiguration100045[kernelConfigurationsOptionsCount]; + IsysOuterNodeConfiguration** isysOuterNodeConfigurationOptions = new IsysOuterNodeConfiguration*[kernelConfigurationsOptionsCount]; + LbffBayerOuterNodeConfiguration** lbffBayerOuterNodeConfigurationOptions = new LbffBayerOuterNodeConfiguration*[kernelConfigurationsOptionsCount]; + BbpsWithTnrOuterNodeConfiguration** bbpsWithTnrOuterNodeConfigurationOptions = new BbpsWithTnrOuterNodeConfiguration*[kernelConfigurationsOptionsCount]; + SwNntmOuterNodeConfiguration** swNntmOuterNodeConfigurationOptions = new SwNntmOuterNodeConfiguration*[kernelConfigurationsOptionsCount]; + SwRotationOuterNodeConfiguration** swRotationOuterNodeConfigurationOptions = new SwRotationOuterNodeConfiguration*[kernelConfigurationsOptionsCount]; + SwScalerOuterNodeConfiguration** swScalerOuterNodeConfigurationOptions = new SwScalerOuterNodeConfiguration*[kernelConfigurationsOptionsCount]; + + for (uint32_t i=0; i < kernelConfigurationsOptionsCount; ++i) + { + _graphConfigurations[i] = *selectedGraphConfiguration[i]; + isysOuterNodeConfigurationOptions[i] = &_graphConfigurations[i].isysOuterNodeConfiguration; + lbffBayerOuterNodeConfigurationOptions[i] = &_graphConfigurations[i].lbffBayerOuterNodeConfiguration; + bbpsWithTnrOuterNodeConfigurationOptions[i] = &_graphConfigurations[i].bbpsWithTnrOuterNodeConfiguration; + swNntmOuterNodeConfigurationOptions[i] = &_graphConfigurations[i].swNntmOuterNodeConfiguration; + swRotationOuterNodeConfigurationOptions[i] = &_graphConfigurations[i].swRotationOuterNodeConfiguration; + swScalerOuterNodeConfigurationOptions[i] = &_graphConfigurations[i].swScalerOuterNodeConfiguration; + } + + _isysOuterNode.Init(isysOuterNodeConfigurationOptions, kernelConfigurationsOptionsCount); + _lbffBayerOuterNode.Init(lbffBayerOuterNodeConfigurationOptions, kernelConfigurationsOptionsCount); + _bbpsWithTnrOuterNode.Init(bbpsWithTnrOuterNodeConfigurationOptions, kernelConfigurationsOptionsCount); + _swNntmOuterNode.Init(swNntmOuterNodeConfigurationOptions, kernelConfigurationsOptionsCount); + _swRotationOuterNode.Init(swRotationOuterNodeConfigurationOptions, kernelConfigurationsOptionsCount); + _swScalerOuterNode.Init(swScalerOuterNodeConfigurationOptions, kernelConfigurationsOptionsCount); + + delete[] isysOuterNodeConfigurationOptions; + delete[] lbffBayerOuterNodeConfigurationOptions; + delete[] bbpsWithTnrOuterNodeConfigurationOptions; + delete[] swNntmOuterNodeConfigurationOptions; + delete[] swRotationOuterNodeConfigurationOptions; + delete[] swScalerOuterNodeConfigurationOptions; + + // Use default configuration + updateConfiguration(0); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayer; + link->destNode = &_lbffBayerOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayer; + link->destNode = &_lbffBayerOuterNode; + link->destTerminalId = 3; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffBayer; + link->srcNode = &_lbffBayerOuterNode; + link->srcTerminalId = 6; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayer; + link->srcNode = &_lbffBayerOuterNode; + link->srcTerminalId = 7; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayer; + link->srcNode = &_lbffBayerOuterNode; + link->srcTerminalId = 8; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayer; + link->srcNode = &_lbffBayerOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayer; + link->srcNode = &_lbffBayerOuterNode; + link->srcTerminalId = 14; + link->dest = GraphElementType::BbpsWithTnr; + link->destNode = &_bbpsWithTnrOuterNode; + link->destTerminalId = 9; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayer; + link->srcNode = &_lbffBayerOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::BbpsWithTnr; + link->destNode = &_bbpsWithTnrOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::BbpsWithTnr; + link->srcNode = &_bbpsWithTnrOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::BbpsWithTnr; + link->destNode = &_bbpsWithTnrOuterNode; + link->destTerminalId = 10; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[10]; + link->src = GraphElementType::BbpsWithTnr; + link->srcNode = &_bbpsWithTnrOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::BbpsWithTnr; + link->destNode = &_bbpsWithTnrOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::BbpsWithTnr; + link->srcNode = &_bbpsWithTnrOuterNode; + link->srcTerminalId = 8; + link->dest = GraphElementType::BbpsWithTnr; + link->destNode = &_bbpsWithTnrOuterNode; + link->destTerminalId = 11; + link->type = LinkType::Node2Self; + + link = &_graphLinks[12]; + link->src = GraphElementType::BbpsWithTnr; + link->srcNode = &_bbpsWithTnrOuterNode; + link->srcTerminalId = 8; + link->dest = GraphElementType::BbpsWithTnr; + link->destNode = &_bbpsWithTnrOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[13]; + link->src = GraphElementType::BbpsWithTnr; + link->srcNode = &_bbpsWithTnrOuterNode; + link->srcTerminalId = 14; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::BbpsWithTnr; + link->srcNode = &_bbpsWithTnrOuterNode; + link->srcTerminalId = 15; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::BbpsWithTnr; + link->srcNode = &_bbpsWithTnrOuterNode; + link->srcTerminalId = 16; + link->dest = GraphElementType::ImagePpp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::BbpsWithTnr; + link->srcNode = &_bbpsWithTnrOuterNode; + link->srcTerminalId = 14; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[17]; + link->src = GraphElementType::BbpsWithTnr; + link->srcNode = &_bbpsWithTnrOuterNode; + link->srcTerminalId = 15; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[18]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::SwRotation; + link->destNode = &_swRotationOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[19]; + link->src = GraphElementType::SwRotation; + link->srcNode = &_swRotationOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[20]; + link->src = GraphElementType::SwRotation; + link->srcNode = &_swRotationOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[21]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 22; ++i) + { + // apply link configuration. select configuration with maximal size + uint32_t selectedLinkConfig = 0; + uint32_t maxSize = _graphConfigurations[0].linkConfigurations[i].bufferSize; + for (uint32_t j = 1; j < kernelConfigurationsOptionsCount; j++) + { + if (_graphConfigurations[j].linkConfigurations[i].bufferSize > maxSize) + { + maxSize = _graphConfigurations[j].linkConfigurations[i].bufferSize; + selectedLinkConfig = j; + } + } + _graphLinks[i].linkConfiguration = &_graphConfigurations[selectedLinkConfig].linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffBayerOuterNode = &_lbffBayerOuterNode; + _imageSubGraph.bbpsWithTnrOuterNode = &_bbpsWithTnrOuterNode; + _imageSubGraph.swNntmOuterNode = &_swNntmOuterNode; + _imageSubGraph.swRotationOuterNode = &_swRotationOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffBayerOuterNode->contextId = 1; + _imageSubGraph.bbpsWithTnrOuterNode->contextId = 2; + _imageSubGraph.swNntmOuterNode->contextId = 3; + _imageSubGraph.swRotationOuterNode->contextId = 4; + _imageSubGraph.swScalerOuterNode->contextId = 5; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} + +StaticGraphStatus StaticGraph100045::updateConfiguration(uint32_t selectedIndex) +{ + StaticGraphStatus res = StaticGraphStatus::SG_OK; + res = _isysOuterNode.UpdateKernelsSelectedConfiguration(selectedIndex); + if (res != StaticGraphStatus::SG_OK) + { + return res; + } + res = _lbffBayerOuterNode.UpdateKernelsSelectedConfiguration(selectedIndex); + if (res != StaticGraphStatus::SG_OK) + { + return res; + } + res = _bbpsWithTnrOuterNode.UpdateKernelsSelectedConfiguration(selectedIndex); + if (res != StaticGraphStatus::SG_OK) + { + return res; + } + res = _swNntmOuterNode.UpdateKernelsSelectedConfiguration(selectedIndex); + if (res != StaticGraphStatus::SG_OK) + { + return res; + } + res = _swRotationOuterNode.UpdateKernelsSelectedConfiguration(selectedIndex); + if (res != StaticGraphStatus::SG_OK) + { + return res; + } + res = _swScalerOuterNode.UpdateKernelsSelectedConfiguration(selectedIndex); + if (res != StaticGraphStatus::SG_OK) + { + return res; + } + return StaticGraphStatus::SG_OK; +} + +StaticGraph100045::~StaticGraph100045() +{ + delete[] _graphConfigurations; + delete _zoomKeyResolutions.zoomKeyResolutionOptions; +} + +StaticGraphStatus imageSubGraphTopology100045::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayer initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerInnerOptions |= (noGmv | noBurstCapture | noIr | noPdaf); + // active public options according to sink mapping + + /* + * Setting Node bbpsWithTnr initial inner node configuration + */ + InnerNodeOptionsFlags bbpsWithTnrInnerOptions = imagePublicInnerNodeConfiguration; + // active public options according to sink mapping + if ( + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + true) + { + bbpsWithTnrInnerOptions |= noMp; + } + if ( + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && + true) + { + bbpsWithTnrInnerOptions |= noDp; + } + if ( + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + true) + { + bbpsWithTnrInnerOptions |= noPpp; + } + + /* + * Configuring inner nodes according to the selected inner options + */ + lbffBayerInnerOptions |= noLbOutputPs & (-((imagePublicInnerNodeConfiguration & (noMp | noDp | noPpp)) == (noMp | noDp | noPpp))); + lbffBayerInnerOptions |= noLbOutputMe & (-((imagePublicInnerNodeConfiguration & (noMp | noDp | noPpp)) == (noMp | noDp | noPpp))); + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerOuterNode->setInnerNode(lbffBayerInnerOptions); + bbpsWithTnrOuterNode->setInnerNode(bbpsWithTnrInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = !(lbffBayerInnerOptions & no3A); // lbff_Bayer:terminal_connect_ae_output -> ae_out + subGraphLinks[4]->isActive = !(lbffBayerInnerOptions & no3A); // lbff_Bayer:terminal_connect_af_std_output -> af_std_out + subGraphLinks[5]->isActive = !(lbffBayerInnerOptions & no3A); // lbff_Bayer:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[6]->isActive = !(lbffBayerInnerOptions & no3A); // lbff_Bayer:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[13]->isActive = !(bbpsWithTnrInnerOptions & noMp); // bbps_WithTnr:bbps_ofs_mp_yuvn_odr -> image_mp + subGraphLinks[16]->isActive = !(bbpsWithTnrInnerOptions & noMp); // bbps_WithTnr:bbps_ofs_mp_yuvn_odr -> sw_nntm:terminal_connect_input + subGraphLinks[14]->isActive = !(bbpsWithTnrInnerOptions & noDp); // bbps_WithTnr:bbps_ofs_dp_yuvn_odr -> image_dp + subGraphLinks[17]->isActive = !(bbpsWithTnrInnerOptions & noDp); // bbps_WithTnr:bbps_ofs_dp_yuvn_odr -> sw_nntm:terminal_connect_input + subGraphLinks[15]->isActive = !(bbpsWithTnrInnerOptions & noPpp); // bbps_WithTnr:bbps_ofs_pp_yuvn_odr -> image_ppp + + /* + * Link enablement by private inner options + */ + subGraphLinks[7]->isActive = !(lbffBayerInnerOptions & noLbOutputPs); // lbff_Bayer:terminal_connect_ps_output -> bbps_WithTnr:bbps_slim_spatial_yuvn_ifd + subGraphLinks[8]->isActive = !(lbffBayerInnerOptions & noLbOutputMe); // lbff_Bayer:terminal_connect_me_output -> bbps_WithTnr:bbps_tnr_bc_yuv4n_ifd + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 22; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[9]->isActive = (bbpsWithTnrInnerOptions & (noMp|noDp|noPpp)) != (noMp|noDp|noPpp); // bbps_WithTnr:bbps_tnr_blend_yuvn_odr -> bbps_WithTnr:bbps_slim_tnr_blend_yuvnm1_ifd + subGraphLinks[10]->isActive = (bbpsWithTnrInnerOptions & (noMp|noDp|noPpp)) != (noMp|noDp|noPpp); // bbps_WithTnr:bbps_tnr_scale_yuv4n_odr -> bbps_WithTnr:bbps_slim_tnr_bc_yuv4nm1_ifd + subGraphLinks[11]->isActive = (bbpsWithTnrInnerOptions & (noMp|noDp|noPpp)) != (noMp|noDp|noPpp); // bbps_WithTnr:bbps_tnr_bc_rs4n_odr -> bbps_WithTnr:bbps_tnr_blend_rs4n_ifd + subGraphLinks[12]->isActive = (bbpsWithTnrInnerOptions & (noMp|noDp|noPpp)) != (noMp|noDp|noPpp); // bbps_WithTnr:bbps_tnr_bc_rs4n_odr -> bbps_WithTnr:bbps_slim_tnr_bc_rs4nm1_ifd + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100046 + */ +StaticGraph100046::StaticGraph100046(GraphConfiguration100046** selectedGraphConfiguration, uint32_t kernelConfigurationsOptionsCount, ZoomKeyResolutions* zoomKeyResolutions, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100046, selectedSettingsId, zoomKeyResolutions), + + _imageSubGraph(_sinkMappingConfiguration) +{ + // Construct outer nodes + _graphConfigurations = new GraphConfiguration100046[kernelConfigurationsOptionsCount]; + IsysOuterNodeConfiguration** isysOuterNodeConfigurationOptions = new IsysOuterNodeConfiguration*[kernelConfigurationsOptionsCount]; + LbffBayerOuterNodeConfiguration** lbffBayerOuterNodeConfigurationOptions = new LbffBayerOuterNodeConfiguration*[kernelConfigurationsOptionsCount]; + BbpsWithTnrOuterNodeConfiguration** bbpsWithTnrOuterNodeConfigurationOptions = new BbpsWithTnrOuterNodeConfiguration*[kernelConfigurationsOptionsCount]; + SwDeskviewNoblendOuterNodeConfiguration** swDeskviewNoblendOuterNodeConfigurationOptions = new SwDeskviewNoblendOuterNodeConfiguration*[kernelConfigurationsOptionsCount]; + SwScalerOuterNodeConfiguration** swScalerOuterNodeConfigurationOptions = new SwScalerOuterNodeConfiguration*[kernelConfigurationsOptionsCount]; + + for (uint32_t i=0; i < kernelConfigurationsOptionsCount; ++i) + { + _graphConfigurations[i] = *selectedGraphConfiguration[i]; + isysOuterNodeConfigurationOptions[i] = &_graphConfigurations[i].isysOuterNodeConfiguration; + lbffBayerOuterNodeConfigurationOptions[i] = &_graphConfigurations[i].lbffBayerOuterNodeConfiguration; + bbpsWithTnrOuterNodeConfigurationOptions[i] = &_graphConfigurations[i].bbpsWithTnrOuterNodeConfiguration; + swDeskviewNoblendOuterNodeConfigurationOptions[i] = &_graphConfigurations[i].swDeskviewNoblendOuterNodeConfiguration; + swScalerOuterNodeConfigurationOptions[i] = &_graphConfigurations[i].swScalerOuterNodeConfiguration; + } + + _isysOuterNode.Init(isysOuterNodeConfigurationOptions, kernelConfigurationsOptionsCount); + _lbffBayerOuterNode.Init(lbffBayerOuterNodeConfigurationOptions, kernelConfigurationsOptionsCount); + _bbpsWithTnrOuterNode.Init(bbpsWithTnrOuterNodeConfigurationOptions, kernelConfigurationsOptionsCount); + _swDeskviewNoblendOuterNode.Init(swDeskviewNoblendOuterNodeConfigurationOptions, kernelConfigurationsOptionsCount); + _swScalerOuterNode.Init(swScalerOuterNodeConfigurationOptions, kernelConfigurationsOptionsCount); + + delete[] isysOuterNodeConfigurationOptions; + delete[] lbffBayerOuterNodeConfigurationOptions; + delete[] bbpsWithTnrOuterNodeConfigurationOptions; + delete[] swDeskviewNoblendOuterNodeConfigurationOptions; + delete[] swScalerOuterNodeConfigurationOptions; + + // Use default configuration + updateConfiguration(0); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayer; + link->destNode = &_lbffBayerOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayer; + link->destNode = &_lbffBayerOuterNode; + link->destTerminalId = 3; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffBayer; + link->srcNode = &_lbffBayerOuterNode; + link->srcTerminalId = 6; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayer; + link->srcNode = &_lbffBayerOuterNode; + link->srcTerminalId = 7; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayer; + link->srcNode = &_lbffBayerOuterNode; + link->srcTerminalId = 8; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayer; + link->srcNode = &_lbffBayerOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayer; + link->srcNode = &_lbffBayerOuterNode; + link->srcTerminalId = 14; + link->dest = GraphElementType::BbpsWithTnr; + link->destNode = &_bbpsWithTnrOuterNode; + link->destTerminalId = 9; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayer; + link->srcNode = &_lbffBayerOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::BbpsWithTnr; + link->destNode = &_bbpsWithTnrOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::BbpsWithTnr; + link->srcNode = &_bbpsWithTnrOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::BbpsWithTnr; + link->destNode = &_bbpsWithTnrOuterNode; + link->destTerminalId = 10; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[10]; + link->src = GraphElementType::BbpsWithTnr; + link->srcNode = &_bbpsWithTnrOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::BbpsWithTnr; + link->destNode = &_bbpsWithTnrOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::BbpsWithTnr; + link->srcNode = &_bbpsWithTnrOuterNode; + link->srcTerminalId = 8; + link->dest = GraphElementType::BbpsWithTnr; + link->destNode = &_bbpsWithTnrOuterNode; + link->destTerminalId = 11; + link->type = LinkType::Node2Self; + + link = &_graphLinks[12]; + link->src = GraphElementType::BbpsWithTnr; + link->srcNode = &_bbpsWithTnrOuterNode; + link->srcTerminalId = 8; + link->dest = GraphElementType::BbpsWithTnr; + link->destNode = &_bbpsWithTnrOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[13]; + link->src = GraphElementType::BbpsWithTnr; + link->srcNode = &_bbpsWithTnrOuterNode; + link->srcTerminalId = 14; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::BbpsWithTnr; + link->srcNode = &_bbpsWithTnrOuterNode; + link->srcTerminalId = 15; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::BbpsWithTnr; + link->srcNode = &_bbpsWithTnrOuterNode; + link->srcTerminalId = 16; + link->dest = GraphElementType::ImagePpp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::BbpsWithTnr; + link->srcNode = &_bbpsWithTnrOuterNode; + link->srcTerminalId = 14; + link->dest = GraphElementType::SwDeskviewNoblend; + link->destNode = &_swDeskviewNoblendOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[17]; + link->src = GraphElementType::BbpsWithTnr; + link->srcNode = &_bbpsWithTnrOuterNode; + link->srcTerminalId = 15; + link->dest = GraphElementType::SwDeskviewNoblend; + link->destNode = &_swDeskviewNoblendOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[18]; + link->src = GraphElementType::SwDeskviewNoblend; + link->srcNode = &_swDeskviewNoblendOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::SwDeskviewNoblend; + link->srcNode = &_swDeskviewNoblendOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[20]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 21; ++i) + { + // apply link configuration. select configuration with maximal size + uint32_t selectedLinkConfig = 0; + uint32_t maxSize = _graphConfigurations[0].linkConfigurations[i].bufferSize; + for (uint32_t j = 1; j < kernelConfigurationsOptionsCount; j++) + { + if (_graphConfigurations[j].linkConfigurations[i].bufferSize > maxSize) + { + maxSize = _graphConfigurations[j].linkConfigurations[i].bufferSize; + selectedLinkConfig = j; + } + } + _graphLinks[i].linkConfiguration = &_graphConfigurations[selectedLinkConfig].linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffBayerOuterNode = &_lbffBayerOuterNode; + _imageSubGraph.bbpsWithTnrOuterNode = &_bbpsWithTnrOuterNode; + _imageSubGraph.swDeskviewNoblendOuterNode = &_swDeskviewNoblendOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffBayerOuterNode->contextId = 1; + _imageSubGraph.bbpsWithTnrOuterNode->contextId = 2; + _imageSubGraph.swDeskviewNoblendOuterNode->contextId = 3; + _imageSubGraph.swScalerOuterNode->contextId = 4; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} + +StaticGraphStatus StaticGraph100046::updateConfiguration(uint32_t selectedIndex) +{ + StaticGraphStatus res = StaticGraphStatus::SG_OK; + res = _isysOuterNode.UpdateKernelsSelectedConfiguration(selectedIndex); + if (res != StaticGraphStatus::SG_OK) + { + return res; + } + res = _lbffBayerOuterNode.UpdateKernelsSelectedConfiguration(selectedIndex); + if (res != StaticGraphStatus::SG_OK) + { + return res; + } + res = _bbpsWithTnrOuterNode.UpdateKernelsSelectedConfiguration(selectedIndex); + if (res != StaticGraphStatus::SG_OK) + { + return res; + } + res = _swDeskviewNoblendOuterNode.UpdateKernelsSelectedConfiguration(selectedIndex); + if (res != StaticGraphStatus::SG_OK) + { + return res; + } + res = _swScalerOuterNode.UpdateKernelsSelectedConfiguration(selectedIndex); + if (res != StaticGraphStatus::SG_OK) + { + return res; + } + return StaticGraphStatus::SG_OK; +} + +StaticGraph100046::~StaticGraph100046() +{ + delete[] _graphConfigurations; + delete _zoomKeyResolutions.zoomKeyResolutionOptions; +} + +StaticGraphStatus imageSubGraphTopology100046::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayer initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerInnerOptions |= (noGmv | noBurstCapture | noIr | noPdaf); + // active public options according to sink mapping + + /* + * Setting Node bbpsWithTnr initial inner node configuration + */ + InnerNodeOptionsFlags bbpsWithTnrInnerOptions = imagePublicInnerNodeConfiguration; + // active public options according to sink mapping + if ( + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + true) + { + bbpsWithTnrInnerOptions |= noMp; + } + if ( + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && + true) + { + bbpsWithTnrInnerOptions |= noDp; + } + if ( + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + true) + { + bbpsWithTnrInnerOptions |= noPpp; + } + + /* + * Configuring inner nodes according to the selected inner options + */ + lbffBayerInnerOptions |= noLbOutputPs & (-((imagePublicInnerNodeConfiguration & (noMp | noDp | noPpp)) == (noMp | noDp | noPpp))); + lbffBayerInnerOptions |= noLbOutputMe & (-((imagePublicInnerNodeConfiguration & (noMp | noDp | noPpp)) == (noMp | noDp | noPpp))); + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerOuterNode->setInnerNode(lbffBayerInnerOptions); + bbpsWithTnrOuterNode->setInnerNode(bbpsWithTnrInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = !(lbffBayerInnerOptions & no3A); // lbff_Bayer:terminal_connect_ae_output -> ae_out + subGraphLinks[4]->isActive = !(lbffBayerInnerOptions & no3A); // lbff_Bayer:terminal_connect_af_std_output -> af_std_out + subGraphLinks[5]->isActive = !(lbffBayerInnerOptions & no3A); // lbff_Bayer:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[6]->isActive = !(lbffBayerInnerOptions & no3A); // lbff_Bayer:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[13]->isActive = !(bbpsWithTnrInnerOptions & noMp); // bbps_WithTnr:bbps_ofs_mp_yuvn_odr -> image_mp + subGraphLinks[16]->isActive = !(bbpsWithTnrInnerOptions & noMp); // bbps_WithTnr:bbps_ofs_mp_yuvn_odr -> sw_deskview_noblend:terminal_connect_input + subGraphLinks[14]->isActive = !(bbpsWithTnrInnerOptions & noDp); // bbps_WithTnr:bbps_ofs_dp_yuvn_odr -> image_dp + subGraphLinks[17]->isActive = !(bbpsWithTnrInnerOptions & noDp); // bbps_WithTnr:bbps_ofs_dp_yuvn_odr -> sw_deskview_noblend:terminal_connect_input + subGraphLinks[15]->isActive = !(bbpsWithTnrInnerOptions & noPpp); // bbps_WithTnr:bbps_ofs_pp_yuvn_odr -> image_ppp + + /* + * Link enablement by private inner options + */ + subGraphLinks[7]->isActive = !(lbffBayerInnerOptions & noLbOutputPs); // lbff_Bayer:terminal_connect_ps_output -> bbps_WithTnr:bbps_slim_spatial_yuvn_ifd + subGraphLinks[8]->isActive = !(lbffBayerInnerOptions & noLbOutputMe); // lbff_Bayer:terminal_connect_me_output -> bbps_WithTnr:bbps_tnr_bc_yuv4n_ifd + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 21; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[9]->isActive = (bbpsWithTnrInnerOptions & (noMp|noDp|noPpp)) != (noMp|noDp|noPpp); // bbps_WithTnr:bbps_tnr_blend_yuvn_odr -> bbps_WithTnr:bbps_slim_tnr_blend_yuvnm1_ifd + subGraphLinks[10]->isActive = (bbpsWithTnrInnerOptions & (noMp|noDp|noPpp)) != (noMp|noDp|noPpp); // bbps_WithTnr:bbps_tnr_scale_yuv4n_odr -> bbps_WithTnr:bbps_slim_tnr_bc_yuv4nm1_ifd + subGraphLinks[11]->isActive = (bbpsWithTnrInnerOptions & (noMp|noDp|noPpp)) != (noMp|noDp|noPpp); // bbps_WithTnr:bbps_tnr_bc_rs4n_odr -> bbps_WithTnr:bbps_tnr_blend_rs4n_ifd + subGraphLinks[12]->isActive = (bbpsWithTnrInnerOptions & (noMp|noDp|noPpp)) != (noMp|noDp|noPpp); // bbps_WithTnr:bbps_tnr_bc_rs4n_odr -> bbps_WithTnr:bbps_slim_tnr_bc_rs4nm1_ifd + + return StaticGraphStatus::SG_OK; +} + diff --git a/modules/ipu_desc/ipu7x/Ipu7xStaticGraphAutogen.h b/modules/ipu_desc/ipu7x/Ipu7xStaticGraphAutogen.h index 7e29d8f..15ebffa 100644 --- a/modules/ipu_desc/ipu7x/Ipu7xStaticGraphAutogen.h +++ b/modules/ipu_desc/ipu7x/Ipu7xStaticGraphAutogen.h @@ -1,6 +1,6 @@ /* * INTEL CONFIDENTIAL -* Copyright (c) 2025 Intel Corporation +* Copyright (c) 2026 Intel Corporation * All Rights Reserved. * * The source code contained or described herein and all documents related to @@ -440,6 +440,33 @@ struct SwImvOuterNodeConfiguration uint8_t systemApiConfiguration[5]; }; +struct SwDeskviewOuterNodeConfiguration +{ + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[1]; + StaticGraphKernelRes resolutionHistories[1]; + StaticGraphKernelBppConfiguration bppInfos[1]; +}; + +struct SwRotationOuterNodeConfiguration +{ + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[1]; + StaticGraphKernelRes resolutionHistories[1]; + StaticGraphKernelBppConfiguration bppInfos[1]; +}; + +struct SwDeskviewNoblendOuterNodeConfiguration +{ + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[1]; + StaticGraphKernelRes resolutionHistories[1]; + StaticGraphKernelBppConfiguration bppInfos[1]; +}; + struct GraphConfiguration100000 { VirtualSinkMapping sinkMappingConfiguration; @@ -712,6 +739,40 @@ struct GraphConfiguration100042 SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; StaticGraphLinkConfiguration linkConfigurations[21]; }; + +struct GraphConfiguration100044 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffBayerOuterNodeConfiguration lbffBayerOuterNodeConfiguration; + BbpsWithTnrOuterNodeConfiguration bbpsWithTnrOuterNodeConfiguration; + SwDeskviewOuterNodeConfiguration swDeskviewOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[21]; +}; + +struct GraphConfiguration100045 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffBayerOuterNodeConfiguration lbffBayerOuterNodeConfiguration; + BbpsWithTnrOuterNodeConfiguration bbpsWithTnrOuterNodeConfiguration; + SwNntmOuterNodeConfiguration swNntmOuterNodeConfiguration; + SwRotationOuterNodeConfiguration swRotationOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[22]; +}; + +struct GraphConfiguration100046 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffBayerOuterNodeConfiguration lbffBayerOuterNodeConfiguration; + BbpsWithTnrOuterNodeConfiguration bbpsWithTnrOuterNodeConfiguration; + SwDeskviewNoblendOuterNodeConfiguration swDeskviewNoblendOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[21]; +}; #pragma pack(pop) class IsysOuterNode : public OuterNode @@ -965,6 +1026,33 @@ class SwImvOuterNode : public OuterNode void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class SwDeskviewOuterNode : public OuterNode +{ +public: + SwDeskviewOuterNode(): OuterNode(){} + void Init(SwDeskviewOuterNodeConfiguration** selectedGraphConfigurations, uint32_t kernelConfigurationsOptionsCount); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + +}; +class SwRotationOuterNode : public OuterNode +{ +public: + SwRotationOuterNode(): OuterNode(){} + void Init(SwRotationOuterNodeConfiguration** selectedGraphConfigurations, uint32_t kernelConfigurationsOptionsCount); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + +}; +class SwDeskviewNoblendOuterNode : public OuterNode +{ +public: + SwDeskviewNoblendOuterNode(): OuterNode(){} + void Init(SwDeskviewNoblendOuterNodeConfiguration** selectedGraphConfigurations, uint32_t kernelConfigurationsOptionsCount); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + }; class imageSubGraphTopology100000 : public GraphTopology { @@ -2211,4 +2299,138 @@ class StaticGraph100042 : public IStaticGraphConfig GraphLink _graphLinks[21]; }; +class imageSubGraphTopology100044 : public GraphTopology { + +public: + imageSubGraphTopology100044(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 21, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffBayerOuterNode* lbffBayerOuterNode = nullptr; + BbpsWithTnrOuterNode* bbpsWithTnrOuterNode = nullptr; + SwDeskviewOuterNode* swDeskviewOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[21]; + +}; + +class StaticGraph100044 : public IStaticGraphConfig +{ +public: + StaticGraph100044(GraphConfiguration100044** selectedGraphConfiguration, uint32_t kernelConfigurationsOptionsCount, ZoomKeyResolutions* zoomKeyResolutions, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100044(); + StaticGraphStatus updateConfiguration(uint32_t selectedIndex=0); + static const uint32_t hashCode = 2537139917; // autogenerated + +private: + // Configuration + GraphConfiguration100044* _graphConfigurations; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffBayerOuterNode _lbffBayerOuterNode; + BbpsWithTnrOuterNode _bbpsWithTnrOuterNode; + SwDeskviewOuterNode _swDeskviewOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100044 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[21]; +}; + +class imageSubGraphTopology100045 : public GraphTopology { + +public: + imageSubGraphTopology100045(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 22, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffBayerOuterNode* lbffBayerOuterNode = nullptr; + BbpsWithTnrOuterNode* bbpsWithTnrOuterNode = nullptr; + SwNntmOuterNode* swNntmOuterNode = nullptr; + SwRotationOuterNode* swRotationOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[22]; + +}; + +class StaticGraph100045 : public IStaticGraphConfig +{ +public: + StaticGraph100045(GraphConfiguration100045** selectedGraphConfiguration, uint32_t kernelConfigurationsOptionsCount, ZoomKeyResolutions* zoomKeyResolutions, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100045(); + StaticGraphStatus updateConfiguration(uint32_t selectedIndex=0); + static const uint32_t hashCode = 3023165183; // autogenerated + +private: + // Configuration + GraphConfiguration100045* _graphConfigurations; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffBayerOuterNode _lbffBayerOuterNode; + BbpsWithTnrOuterNode _bbpsWithTnrOuterNode; + SwNntmOuterNode _swNntmOuterNode; + SwRotationOuterNode _swRotationOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100045 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[22]; +}; + +class imageSubGraphTopology100046 : public GraphTopology { + +public: + imageSubGraphTopology100046(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 21, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffBayerOuterNode* lbffBayerOuterNode = nullptr; + BbpsWithTnrOuterNode* bbpsWithTnrOuterNode = nullptr; + SwDeskviewNoblendOuterNode* swDeskviewNoblendOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[21]; + +}; + +class StaticGraph100046 : public IStaticGraphConfig +{ +public: + StaticGraph100046(GraphConfiguration100046** selectedGraphConfiguration, uint32_t kernelConfigurationsOptionsCount, ZoomKeyResolutions* zoomKeyResolutions, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100046(); + StaticGraphStatus updateConfiguration(uint32_t selectedIndex=0); + static const uint32_t hashCode = 2537139917; // autogenerated + +private: + // Configuration + GraphConfiguration100046* _graphConfigurations; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffBayerOuterNode _lbffBayerOuterNode; + BbpsWithTnrOuterNode _bbpsWithTnrOuterNode; + SwDeskviewNoblendOuterNode _swDeskviewNoblendOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100046 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[21]; +}; + #endif \ No newline at end of file diff --git a/modules/ipu_desc/ipu7x/Ipu7xStaticGraphBinaryAutogen.h b/modules/ipu_desc/ipu7x/Ipu7xStaticGraphBinaryAutogen.h index 7bda8e7..bbaca1b 100644 --- a/modules/ipu_desc/ipu7x/Ipu7xStaticGraphBinaryAutogen.h +++ b/modules/ipu_desc/ipu7x/Ipu7xStaticGraphBinaryAutogen.h @@ -1,6 +1,6 @@ /* * INTEL CONFIDENTIAL -* Copyright (c) 2025 Intel Corporation +* Copyright (c) 2026 Intel Corporation * All Rights Reserved. * * The source code contained or described herein and all documents related to diff --git a/modules/ipu_desc/ipu7x/Ipu7xStaticGraphDataPreloadAutogen.c b/modules/ipu_desc/ipu7x/Ipu7xStaticGraphDataPreloadAutogen.c index f54fc69..ade36db 100644 --- a/modules/ipu_desc/ipu7x/Ipu7xStaticGraphDataPreloadAutogen.c +++ b/modules/ipu_desc/ipu7x/Ipu7xStaticGraphDataPreloadAutogen.c @@ -1,6 +1,6 @@ /* * INTEL CONFIDENTIAL -* Copyright (c) 2025 Intel Corporation +* Copyright (c) 2026 Intel Corporation * All Rights Reserved. * * The source code contained or described herein and all documents related to diff --git a/modules/ipu_desc/ipu7x/Ipu7xStaticGraphDataPreloadAutogen.h b/modules/ipu_desc/ipu7x/Ipu7xStaticGraphDataPreloadAutogen.h index 360d764..c157b11 100644 --- a/modules/ipu_desc/ipu7x/Ipu7xStaticGraphDataPreloadAutogen.h +++ b/modules/ipu_desc/ipu7x/Ipu7xStaticGraphDataPreloadAutogen.h @@ -1,6 +1,6 @@ /* * INTEL CONFIDENTIAL -* Copyright (c) 2025 Intel Corporation +* Copyright (c) 2026 Intel Corporation * All Rights Reserved. * * The source code contained or described herein and all documents related to @@ -96,7 +96,7 @@ typedef struct DataRange }DataRange; -static int distinctGraphsCount = 28; +static int distinctGraphsCount = 31; static GraphHashCode hashCodeLookup[] = { {0, 0xB38204DB}, @@ -127,7 +127,10 @@ static GraphHashCode hashCodeLookup[] = { {100039, 0x7B1EE4DB}, {100040, 0xC052F97D}, {100041, 0xF606DE19}, - {100042, 0x6C88AC89} + {100042, 0x6C88AC89}, + {100044, 0x9739AECD}, + {100045, 0xB431D6FF}, + {100046, 0x9739AECD} }; static FrameFormatDesc formatsDB[] = { diff --git a/modules/ipu_desc/ipu7x/Ipu7xStaticGraphReaderAutogen.cpp b/modules/ipu_desc/ipu7x/Ipu7xStaticGraphReaderAutogen.cpp index a7fb20a..c461d65 100644 --- a/modules/ipu_desc/ipu7x/Ipu7xStaticGraphReaderAutogen.cpp +++ b/modules/ipu_desc/ipu7x/Ipu7xStaticGraphReaderAutogen.cpp @@ -1,6 +1,6 @@ /* * INTEL CONFIDENTIAL -* Copyright (c) 2025 Intel Corporation +* Copyright (c) 2026 Intel Corporation * All Rights Reserved. * * The source code contained or described herein and all documents related to @@ -507,6 +507,39 @@ StaticGraphStatus StaticGraphReader::GetStaticGraphConfig(GraphConfigurationKey& *graph = new StaticGraph100042( reinterpret_cast(selectedConfigurationData), selectedConfigurationsCount, &_zoomKeyResolutions, &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); break; + case 100044: + if (StaticGraph100044::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + delete[] selectedConfigurationData; + delete[] selectedGraphConfigurationHeaders; + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100044( + reinterpret_cast(selectedConfigurationData), selectedConfigurationsCount, &_zoomKeyResolutions, &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100045: + if (StaticGraph100045::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + delete[] selectedConfigurationData; + delete[] selectedGraphConfigurationHeaders; + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100045( + reinterpret_cast(selectedConfigurationData), selectedConfigurationsCount, &_zoomKeyResolutions, &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100046: + if (StaticGraph100046::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + delete[] selectedConfigurationData; + delete[] selectedGraphConfigurationHeaders; + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100046( + reinterpret_cast(selectedConfigurationData), selectedConfigurationsCount, &_zoomKeyResolutions, &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; default: delete[] selectedConfigurationData; delete[] selectedGraphConfigurationHeaders; diff --git a/modules/ipu_desc/ipu7x/Ipu7xStaticGraphReaderAutogen.h b/modules/ipu_desc/ipu7x/Ipu7xStaticGraphReaderAutogen.h index 6dbd970..7866e9e 100644 --- a/modules/ipu_desc/ipu7x/Ipu7xStaticGraphReaderAutogen.h +++ b/modules/ipu_desc/ipu7x/Ipu7xStaticGraphReaderAutogen.h @@ -1,6 +1,6 @@ /* * INTEL CONFIDENTIAL -* Copyright (c) 2025 Intel Corporation +* Copyright (c) 2026 Intel Corporation * All Rights Reserved. * * The source code contained or described herein and all documents related to diff --git a/modules/ipu_desc/ipu7x/Ipu7xStaticGraphTypesAutogen.h b/modules/ipu_desc/ipu7x/Ipu7xStaticGraphTypesAutogen.h index 79ef325..e11cb43 100644 --- a/modules/ipu_desc/ipu7x/Ipu7xStaticGraphTypesAutogen.h +++ b/modules/ipu_desc/ipu7x/Ipu7xStaticGraphTypesAutogen.h @@ -1,6 +1,6 @@ /* * INTEL CONFIDENTIAL -* Copyright (c) 2025 Intel Corporation +* Copyright (c) 2026 Intel Corporation * All Rights Reserved. * * The source code contained or described herein and all documents related to @@ -67,6 +67,8 @@ enum class NodeResourceId : uint8_t { SwScaler = 7, SwVai = 8, SwImv = 9, + SwRotation = 10, + SwDeskview = 11, }; enum class StaticGraphStatus : uint8_t @@ -345,6 +347,9 @@ enum class GraphElementType : uint8_t { LbffIrWithGmvIrStream, SwVai, SwImv, + SwDeskview, + SwRotation, + SwDeskviewNoblend, }; enum class LinkType : uint8_t { diff --git a/modules/ipu_desc/ipu7x/Ipu7xTerminalDescriptorAutogen.cpp b/modules/ipu_desc/ipu7x/Ipu7xTerminalDescriptorAutogen.cpp index 031d92e..e82e851 100644 --- a/modules/ipu_desc/ipu7x/Ipu7xTerminalDescriptorAutogen.cpp +++ b/modules/ipu_desc/ipu7x/Ipu7xTerminalDescriptorAutogen.cpp @@ -1,6 +1,6 @@ /* * INTEL CONFIDENTIAL -* Copyright (c) 2025 Intel Corporation +* Copyright (c) 2026 Intel Corporation * All Rights Reserved. * * The source code contained or described herein and all documents related to @@ -625,6 +625,68 @@ TerminalDescriptor SW_IMVTerminalDesc[] = }, }; +TerminalDescriptor SW_ROTATIONTerminalDesc[] = +{ + { + SW_ROTATION_TERMINAL_CONNECT_INPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_INPUT", + PAC_BUFFER_TYPE_NONE, + TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_IN, + 36947, // rotator_1_0 + }, + { + SW_ROTATION_TERMINAL_CONNECT_OUTPUT_1, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_OUTPUT_1", + PAC_BUFFER_TYPE_NONE, + TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_OUT, + 0, // + }, + { + SW_ROTATION_TERMINAL_CONNECT_OUTPUT_2, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_OUTPUT_2", + PAC_BUFFER_TYPE_NONE, + TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_OUT, + 0, // + }, +}; + +TerminalDescriptor SW_DESKVIEWTerminalDesc[] = +{ + { + SW_DESKVIEW_TERMINAL_CONNECT_INPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_INPUT", + PAC_BUFFER_TYPE_NONE, + TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_IN, + 39181, // deskview_1_0 + }, + { + SW_DESKVIEW_TERMINAL_CONNECT_OUTPUT_1, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_OUTPUT_1", + PAC_BUFFER_TYPE_NONE, + TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_OUT, + 0, // + }, + { + SW_DESKVIEW_TERMINAL_CONNECT_OUTPUT_2, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_OUTPUT_2", + PAC_BUFFER_TYPE_NONE, + TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_OUT, + 0, // + }, +}; + int CountOfSW_ISYSTerminalDesc = sizeof(SW_ISYSTerminalDesc) / sizeof(SW_ISYSTerminalDesc[0]); int CountOfLBFFTerminalDesc = sizeof(LBFFTerminalDesc) / sizeof(LBFFTerminalDesc[0]); int CountOfBBPSTerminalDesc = sizeof(BBPSTerminalDesc) / sizeof(BBPSTerminalDesc[0]); @@ -635,3 +697,5 @@ int CountOfSW_NNTMTerminalDesc = sizeof(SW_NNTMTerminalDesc) / sizeof(SW_NNTMTer int CountOfSW_SCALERTerminalDesc = sizeof(SW_SCALERTerminalDesc) / sizeof(SW_SCALERTerminalDesc[0]); int CountOfSW_VAITerminalDesc = sizeof(SW_VAITerminalDesc) / sizeof(SW_VAITerminalDesc[0]); int CountOfSW_IMVTerminalDesc = sizeof(SW_IMVTerminalDesc) / sizeof(SW_IMVTerminalDesc[0]); +int CountOfSW_ROTATIONTerminalDesc = sizeof(SW_ROTATIONTerminalDesc) / sizeof(SW_ROTATIONTerminalDesc[0]); +int CountOfSW_DESKVIEWTerminalDesc = sizeof(SW_DESKVIEWTerminalDesc) / sizeof(SW_DESKVIEWTerminalDesc[0]); diff --git a/modules/ipu_desc/ipu7x/Ipu7xTerminalDescriptorAutogen.h b/modules/ipu_desc/ipu7x/Ipu7xTerminalDescriptorAutogen.h index 45fa3ef..c26e481 100644 --- a/modules/ipu_desc/ipu7x/Ipu7xTerminalDescriptorAutogen.h +++ b/modules/ipu_desc/ipu7x/Ipu7xTerminalDescriptorAutogen.h @@ -1,6 +1,6 @@ /* * INTEL CONFIDENTIAL -* Copyright (c) 2025 Intel Corporation +* Copyright (c) 2026 Intel Corporation * All Rights Reserved. * * The source code contained or described herein and all documents related to @@ -176,6 +176,20 @@ enum SW_IMVTerminalID SW_IMV_TERMINAL_CONNECT_OUTPUT_2, }; +enum SW_ROTATIONTerminalID +{ + SW_ROTATION_TERMINAL_CONNECT_INPUT, + SW_ROTATION_TERMINAL_CONNECT_OUTPUT_1, + SW_ROTATION_TERMINAL_CONNECT_OUTPUT_2, +}; + +enum SW_DESKVIEWTerminalID +{ + SW_DESKVIEW_TERMINAL_CONNECT_INPUT, + SW_DESKVIEW_TERMINAL_CONNECT_OUTPUT_1, + SW_DESKVIEW_TERMINAL_CONNECT_OUTPUT_2, +}; + extern TerminalDescriptor SW_ISYSTerminalDesc[]; extern TerminalDescriptor LBFFTerminalDesc[]; extern TerminalDescriptor BBPSTerminalDesc[]; @@ -186,6 +200,8 @@ extern TerminalDescriptor SW_NNTMTerminalDesc[]; extern TerminalDescriptor SW_SCALERTerminalDesc[]; extern TerminalDescriptor SW_VAITerminalDesc[]; extern TerminalDescriptor SW_IMVTerminalDesc[]; +extern TerminalDescriptor SW_ROTATIONTerminalDesc[]; +extern TerminalDescriptor SW_DESKVIEWTerminalDesc[]; extern int CountOfSW_ISYSTerminalDesc; extern int CountOfLBFFTerminalDesc; @@ -197,3 +213,5 @@ extern int CountOfSW_NNTMTerminalDesc; extern int CountOfSW_SCALERTerminalDesc; extern int CountOfSW_VAITerminalDesc; extern int CountOfSW_IMVTerminalDesc; +extern int CountOfSW_ROTATIONTerminalDesc; +extern int CountOfSW_DESKVIEWTerminalDesc; diff --git a/modules/ipu_desc/ipu8/CBLayoutUtils.cpp b/modules/ipu_desc/ipu8/CBLayoutUtils.cpp new file mode 100644 index 0000000..8336457 --- /dev/null +++ b/modules/ipu_desc/ipu8/CBLayoutUtils.cpp @@ -0,0 +1,204 @@ +/* + * Copyright (C) 2025 Intel Corporation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define LOG_TAG CBLayoutUtils + +#include "CBLayoutUtils.h" + +#include +#include + +#include "lbff_ids_array.h" +#include "ipu_manifest_db_ipu8_psys_cb_lbff_dev_ids.h" +#include "ipu_manifest_db_ipu8_psys_cb_lbff_descriptors.h" + +namespace icamera { +namespace CBLayoutUtils { + +static const std::set> s3AStatsTerminalSet = { + std::make_pair(NODE_RESOURCE_ID_LBFF, LBFF_TERMINAL_CONNECT_AE_OUTPUT), + std::make_pair(NODE_RESOURCE_ID_LBFF, LBFF_TERMINAL_CONNECT_AF_STD_OUTPUT), + std::make_pair(NODE_RESOURCE_ID_LBFF, LBFF_TERMINAL_CONNECT_AWB_STD_OUTPUT), + std::make_pair(NODE_RESOURCE_ID_LBFF, LBFF_TERMINAL_CONNECT_AWB_SAT_OUTPUT), + std::make_pair(NODE_RESOURCE_ID_LBFF, LBFF_TERMINAL_CONNECT_PDAF_OUTPUT), + std::make_pair(NODE_RESOURCE_ID_LBFF, LBFF_TERMINAL_CONNECT_AWB_SVE_OUTPUT), +}; + +static const std::set> sMetaDataTerminalSet = { + std::make_pair(NODE_RESOURCE_ID_LBFF, LBFF_TERMINAL_CONNECT_LSC_INPUT), + std::make_pair(NODE_RESOURCE_ID_LBFF, LBFF_TERMINAL_CONNECT_AE_OUTPUT), + std::make_pair(NODE_RESOURCE_ID_LBFF, LBFF_TERMINAL_CONNECT_AF_STD_OUTPUT), + std::make_pair(NODE_RESOURCE_ID_LBFF, LBFF_TERMINAL_CONNECT_AWB_STD_OUTPUT), + std::make_pair(NODE_RESOURCE_ID_LBFF, LBFF_TERMINAL_CONNECT_AWB_SAT_OUTPUT), + std::make_pair(NODE_RESOURCE_ID_LBFF, LBFF_TERMINAL_CONNECT_PDAF_OUTPUT), + std::make_pair(NODE_RESOURCE_ID_LBFF, LBFF_TERMINAL_CONNECT_AWB_SVE_OUTPUT), +}; + +// See ia_statistics_buffer_type in imaging-control/include/ia_types.h +#define NUM_STATISTICS_BUFFER_TYPES 8 + +static const int32_t kStatsBufToTermIds[NUM_STATISTICS_BUFFER_TYPES] = +{ + LBFF_TERMINAL_CONNECT_AWB_STD_OUTPUT, // rgbs_std + LBFF_TERMINAL_CONNECT_AWB_SVE_OUTPUT, // rgbs_sve + LBFF_TERMINAL_CONNECT_AWB_SAT_OUTPUT, // rgbs_sat + LBFF_TERMINAL_CONNECT_AE_OUTPUT, // ae_histogram + LBFF_TERMINAL_CONNECT_AF_STD_OUTPUT, // af_std + -1, // af_sve (not supported) + LBFF_TERMINAL_CONNECT_PDAF_OUTPUT, // pdaf_out + LBFF_TERMINAL_CONNECT_GMV_MATCH_OUTPUT // gmv_match_out +}; + +bool isMetaDataTerminal(uint8_t resourceId, uint8_t terminalId) { + if (sMetaDataTerminalSet.find(std::make_pair(resourceId, terminalId)) != + sMetaDataTerminalSet.end()) { + return true; + } + + return false; +} + +bool is3AStatsTerminal(uint8_t resourceId, uint8_t terminalId) { + if (s3AStatsTerminalSet.find(std::make_pair(resourceId, terminalId)) != + s3AStatsTerminalSet.end()) { + return true; + } + + return false; +} + +bool isFrameTerminal(uint8_t resourceId, uint8_t terminalId) { + const TerminalDescriptor* table = nullptr; + uint32_t count = 0; + getCbTerminalDescriptors(resourceId, table, count); + if (!table) return false; + for (uint32_t i = 0; i < count; i++) { + if (terminalId == table[i].TerminalId) { + return table[i].TerminalBufferType == TERMINAL_BUFFER_TYPE_DATA; + } + } + + return false; +} + +int32_t getKernelForDataTerminal(uint8_t resourceId, uint8_t terminalId) { + const TerminalDescriptor* table = nullptr; + uint32_t count = 0; + getCbTerminalDescriptors(resourceId, table, count); + if (!table) return 0; + for (uint32_t i = 0; i < count; i++) { + if (terminalId == table[i].TerminalId) { + return table[i].TerminalLinkedKernel; + } + } + return 0; +} + +status_t getCbTerminalDescriptors(uint8_t resourceId, + const TerminalDescriptor *&descriptors, uint32_t &count) { + status_t ret = OK; + + switch (resourceId) { + case NODE_RESOURCE_ID_LBFF: + descriptors = LBFFTerminalDesc; + count = CountOfLBFFTerminalDesc; + break; + default: + ret = INVALID_OPERATION; + descriptors = nullptr; + count = 0; + break; + } + + return ret; +} + +const TerminalDescriptor *getTerminalDescriptor(uint8_t resourceId, uint8_t terminalId) { + status_t ret = OK; + + const TerminalDescriptor *descriptors = nullptr; + const TerminalDescriptor *descriptor = nullptr; + uint32_t count = 0; + + ret = getCbTerminalDescriptors(resourceId, descriptors, count); + if (ret != OK) return nullptr; + + if (terminalId < count) { + descriptor = &descriptors[terminalId]; + } + + return descriptor; +} + +PacBufferType getTerminalPacBufferType(uint8_t resourceId, uint8_t terminalId) { + const TerminalDescriptor *descriptor = getTerminalDescriptor(resourceId, terminalId); + if (descriptor) { + return descriptor->PacBufferType; + } + + return PAC_BUFFER_TYPE_NONE; +} + +static const payload_descriptor_t *sLBCBPayloadDescriptors[] = { + &lbff_0_descriptors, // TERMINAL_LOAD_ALGO_CACHED + &lbff_1_descriptors, // TERMINAL_LOAD_ALGO_FRAG_SEQ + &lbff_2_descriptors, // TERMINAL_LOAD_SYSTEM + &lbff_3_descriptors, // DOL, TNR and CAS +}; + +status_t getCbPayloadDescriptor(uint8_t resourceId, + const payload_descriptor_t ***cbPayloadDescriptor, + uint32_t &count) { + status_t ret = OK; + + switch (resourceId) { + case NODE_RESOURCE_ID_LBFF: + *cbPayloadDescriptor = sLBCBPayloadDescriptors; + count = sizeof(sLBCBPayloadDescriptors) / sizeof(sLBCBPayloadDescriptors[0]); + break; + default: + *cbPayloadDescriptor = nullptr; + count = 0; + ret = INVALID_OPERATION; + break; + } + + return ret; +} + +int cbDeviceId2Uuid(uint8_t resourceId, uint32_t deviceId) { + int uuid = -1; + switch (resourceId) { + case NODE_RESOURCE_ID_LBFF: + uuid = lbff_id_to_uuid_tag[deviceId]; + break; + default: + break; + } + + return uuid; +} + +const int32_t* getStatsBufToTermIds() { + return kStatsBufToTermIds; +} + +uint32_t getIspIfdKernelId() { + return ia_pal_uuid_isp_ifd_pipe_1_4; +} + +} // namespace CBLayoutUtils +} // namespace icamera diff --git a/modules/ipu_desc/ipu8/CBLayoutUtils.h b/modules/ipu_desc/ipu8/CBLayoutUtils.h new file mode 100644 index 0000000..72e1557 --- /dev/null +++ b/modules/ipu_desc/ipu8/CBLayoutUtils.h @@ -0,0 +1,61 @@ +/* + * Copyright (C) 2025 Intel Corporation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#pragma once + +#include + +#include "iutils/Errors.h" +#include "cb_payload_descriptor.h" +#if defined(GRC_IPU7X) +#include "Ipu7xTerminalDescriptorAutogen.h" +#elif defined(GRC_IPU75XA) +#include "Ipu75xaTerminalDescriptorAutogen.h" +#elif defined(GRC_IPU8) +#include "Ipu8TerminalDescriptorAutogen.h" +#else +#include "TerminalDescriptorAutogen.h" +#endif + +namespace icamera { + +typedef enum _NodeResourceIdType +{ + NODE_RESOURCE_ID_LBFF = 0, + NODE_RESOURCE_ID_ISYS = 1 +} NodeResourceIdType; + +namespace CBLayoutUtils { + +status_t getCbTerminalDescriptors(uint8_t resourceId, + const TerminalDescriptor *&descriptors, uint32_t &count); +const TerminalDescriptor *getTerminalDescriptor(uint8_t resourceId, uint8_t terminalId); +PacBufferType getTerminalPacBufferType(uint8_t resourceId, uint8_t terminalId); +bool isMetaDataTerminal(uint8_t resourceId, uint8_t terminalId); +bool is3AStatsTerminal(uint8_t resourceId, uint8_t terminalId); +bool isFrameTerminal(uint8_t resourceId, uint8_t terminalId); +int32_t getKernelForDataTerminal(uint8_t resourceId, uint8_t terminalId); + +status_t getCbPayloadDescriptor(uint8_t resourceId, + const payload_descriptor_t ***cbPayloadDescriptor, + uint32_t &count); +int cbDeviceId2Uuid(uint8_t resourceId, uint32_t deviceId); + +const int32_t* getStatsBufToTermIds(); + +uint32_t getIspIfdKernelId(); +} // namespace CBLayoutUtils +} // namespace icamera diff --git a/modules/ipu_desc/ipu8/FragmentsConfigurator.cpp b/modules/ipu_desc/ipu8/FragmentsConfigurator.cpp new file mode 100644 index 0000000..30abfb8 --- /dev/null +++ b/modules/ipu_desc/ipu8/FragmentsConfigurator.cpp @@ -0,0 +1,969 @@ +/* +* INTEL CONFIDENTIAL +* Copyright (c) 2022 Intel Corporation +* All Rights Reserved. +* +* The source code contained or described herein and all documents related to +* the source code ("Material") are owned by Intel Corporation or its +* suppliers or licensors. Title to the Material remains with Intel +* Corporation or its suppliers and licensors. The Material may contain trade +* secrets and proprietary and confidential information of Intel Corporation +* and its suppliers and licensors, and is protected by worldwide copyright +* and trade secret laws and treaty provisions. No part of the Material may be +* used, copied, reproduced, modified, published, uploaded, posted, +* transmitted, distributed, or disclosed in any way without Intel's prior +* express written permission. +* +* No license under any patent, copyright, trade secret or other intellectual +* property right is granted to or conferred upon you by disclosure or +* delivery of the Materials, either expressly, by implication, inducement, +* estoppel or otherwise. Any license under such intellectual property rights +* must be express and approved by Intel in writing. +* +* Unless otherwise agreed by Intel in writing, you may not remove or alter +* this notice or any other notice embedded in Materials by Intel or Intels +* suppliers or licensors in any way. +*/ + +#include "FragmentsConfigurator.h" +#include +#include + +Ipu8FragmentsConfigurator::Ipu8FragmentsConfigurator(IStaticGraphConfig* staticGraph, OuterNode* node) : _staticGraph(staticGraph), _node(node) +{ +} + +StaticGraphStatus Ipu8FragmentsConfigurator::configureFragments(std::vector& smurfKernels) +{ + if (_staticGraph == nullptr || _node == nullptr) + { + return StaticGraphStatus::SG_ERROR; + } + + // Reset status + for (int32_t stripe = 0; stripe < _node->numberOfFragments; stripe++) + { + _node->fragmentVanishStatus[stripe] = VanishOption::Full; + } + + StaticGraphStatus res = StaticGraphStatus::SG_OK; + + const uint16_t* kenelConfigOrder = _node->getRunKernelConfigOrder(); + + for (uint16_t i = 0; i < _node->nodeKernels.kernelCount; i++) + { + uint16_t j = kenelConfigOrder[i]; + StaticGraphRunKernel* runKernel = &_node->nodeKernels.kernelList[j].run_kernel; + StaticGraphFragmentDesc* kernelFragments = _node->nodeKernels.kernelList[j].fragment_descs; + // Take previous kernel as reference, unless we will change it below. + StaticGraphFragmentDesc* prevKernelFragments = j == 0 ? nullptr : _node->nodeKernels.kernelList[j - 1].fragment_descs; + uint32_t prevKernelUuid = j == 0 ? 0 : _node->nodeKernels.kernelList[j - 1].run_kernel.kernel_uuid; + + uint32_t referenceKernel = GraphResolutionConfiguratorHelper::getReferenceKernel(runKernel->kernel_uuid); + if (referenceKernel != 0) + { + // Special reference kernel + for (uint32_t k = 0; k < _node->nodeKernels.kernelCount; k++) + { + if (_node->nodeKernels.kernelList[k].run_kernel.kernel_uuid == referenceKernel) + { + prevKernelFragments = _node->nodeKernels.kernelList[k].fragment_descs; + prevKernelUuid = referenceKernel; + break; + } + } + } + + // Find the handling function for this kernel + GraphResolutionConfiguratorKernelRole kernelRole = GraphResolutionConfiguratorHelper::getKernelRole(runKernel->kernel_uuid); + + switch (kernelRole) + { + case GraphResolutionConfiguratorKernelRole::DownScaler: + { + res = configFragmentsDownscaler(runKernel, kernelFragments, prevKernelUuid, prevKernelFragments); + break; + } + + case GraphResolutionConfiguratorKernelRole::EspaCropper: + { + res = configFragmentsCropper(runKernel, kernelFragments, prevKernelUuid, prevKernelFragments); + break; + } + + case GraphResolutionConfiguratorKernelRole::UpScaler: + { + res = configFragmentsUpscaler(runKernel, kernelFragments, prevKernelUuid, prevKernelFragments); + break; + } + + case GraphResolutionConfiguratorKernelRole::Output: + { + res = configFragmentsOutput(runKernel, kernelFragments, prevKernelUuid, prevKernelFragments, false); + break; + } + + case GraphResolutionConfiguratorKernelRole::TnrOutput: + { + res = configFragmentsOutput(runKernel, kernelFragments, prevKernelUuid, prevKernelFragments, true); + break; + } + + case GraphResolutionConfiguratorKernelRole::TnrScaler: + { + res = configFragmentsTnrScaler(runKernel, kernelFragments, prevKernelUuid, prevKernelFragments); + break; + } + + case GraphResolutionConfiguratorKernelRole::TnrFeederFull: + case GraphResolutionConfiguratorKernelRole::TnrFeederSmall: + { + res = configFragmentsTnrFeeder(runKernel, kernelFragments, kernelRole); + break; + } + + case GraphResolutionConfiguratorKernelRole::Smurf: + { + res = configFragmentsSmurf(runKernel, kernelFragments, prevKernelFragments, smurfKernels); + break; + } + + case GraphResolutionConfiguratorKernelRole::SmurfFeeder: + { + res = configFragmentsSmurfFeeder(runKernel, kernelFragments); + break; + } + + case GraphResolutionConfiguratorKernelRole::NonRcb: + { + // Before zoom kernels - take prev kernel fragments as-is + res = copyFragments(runKernel, prevKernelFragments, prevKernelUuid, kernelFragments); + } + + default: + { + // No action for other kernels + break; + } + } + + if (res != StaticGraphStatus::SG_OK) + { + return res; + } + } + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus Ipu8FragmentsConfigurator::configFragmentsDownscaler(StaticGraphRunKernel* runKernel, StaticGraphFragmentDesc* kernelFragments, + uint32_t prevKernelUuid, StaticGraphFragmentDesc* prevKernelFragments) +{ + if (kernelFragments == nullptr || prevKernelFragments == nullptr) + { + return StaticGraphStatus::SG_ERROR; + } + + copyFragments(runKernel, prevKernelFragments, prevKernelUuid, kernelFragments); + + auto resInfo = runKernel->resolution_info; + + auto scaleFactorW = static_cast(resInfo->output_width) / (resInfo->input_width - resInfo->input_crop.left - resInfo->input_crop.right); + auto scaleFactorH = static_cast(resInfo->output_height) / (resInfo->input_height - resInfo->input_crop.top - resInfo->input_crop.bottom); + auto scaleFactor = std::max(scaleFactorW, scaleFactorH); + + for (int32_t stripe = 0; stripe < _node->numberOfFragments; stripe++) + { + int rightCrop = stripe == static_cast(_node->numberOfFragments - 1) ? resInfo->input_crop.right : 0; + + double value = (static_cast(kernelFragments[stripe].fragmentInputWidth - rightCrop) * scaleFactor) / 4; + kernelFragments[stripe].fragmentOutputWidth = static_cast(floor(value)) * 4; + + // Start of output is rounded up since this is what b2i_ds does (Creates pixels starting from the pixel after) + value = (scaleFactor * kernelFragments[stripe].fragmentStartX) / 2; + _outputStartX[runKernel->kernel_uuid][stripe] = static_cast(ceil(value)) * 2; + + // Check if pixels are missing in the last stripe + if (stripe == _node->numberOfFragments - 1) + { + if (_outputStartX[runKernel->kernel_uuid][stripe] + kernelFragments[stripe].fragmentOutputWidth < resInfo->output_width) + { + if (validateDownscalerOutputWidth(&(kernelFragments[stripe]), 4, stripe, scaleFactor, runKernel)) + { + kernelFragments[stripe].fragmentOutputWidth += 4; + } + } + } + } + + return StaticGraphStatus::SG_OK; +} + +bool Ipu8FragmentsConfigurator::validateDownscalerOutputWidth(StaticGraphFragmentDesc* stripe, uint16_t addition, int32_t stripeIndex, double scaleFactor, StaticGraphRunKernel* runKernel) +{ + const double ratio_prec = 1U << GraphResolutionConfigurator::SCALE_PREC; + + int scaling_ratio = (int)ceil((1 / scaleFactor) * (double)(1U << GraphResolutionConfigurator::SCALE_PREC)); + const double scaling_ratio_f = static_cast(scaling_ratio) / ratio_prec; + + int32_t offset_common = ((scaling_ratio - (static_cast(1U) << GraphResolutionConfigurator::SCALE_PREC)) >> 1); + + uint32_t orig_horizontal_offset; + if (stripeIndex == 0) + { + orig_horizontal_offset = (runKernel->resolution_info->input_crop.left << GraphResolutionConfigurator::SCALE_PREC) + offset_common; + } + else + { + orig_horizontal_offset = offset_common; + } + const uint16_t fragment_start_x = stripe->fragmentStartX; + const double calc = ceil((static_cast(fragment_start_x) / scaling_ratio_f / 2.0)) * 2.0; //2 * ceil(x/2) means round up to a closest even number + double horizontal_offset = (static_cast(orig_horizontal_offset) / ratio_prec) + static_cast(scaling_ratio_f * calc - static_cast(fragment_start_x)); + + const int32_t fragment_input_width = stripe->fragmentInputWidth; + const int32_t fragment_output_width = stripe->fragmentOutputWidth + addition; + + int32_t horizontal_offset_fxp = static_cast(floor(horizontal_offset * ratio_prec)); + + //1 + int32_t horizontal_offset_min = 0; + int32_t horizontal_offset_max = ((5 * scaling_ratio) - (1U << GraphResolutionConfigurator::SCALE_PREC)) / 2; + + //2 + horizontal_offset_min = std::max((58982 * fragment_input_width) - (fragment_output_width * scaling_ratio), horizontal_offset_min); + horizontal_offset_max = std::min((72089 * fragment_input_width) - (fragment_output_width * scaling_ratio), horizontal_offset_max); + + //3 + horizontal_offset_max = std::min(fragment_input_width * (1 << GraphResolutionConfigurator::SCALE_PREC) + scaling_ratio * (1 + 1 / 128) - fragment_output_width * scaling_ratio, horizontal_offset_max); + + return (horizontal_offset_fxp >= horizontal_offset_min && horizontal_offset_fxp <= horizontal_offset_max); +} + +void Ipu8FragmentsConfigurator::vanishStripe(uint8_t stripe, uint32_t runKerenlUuid, StaticGraphFragmentDesc* kernelFragments, VanishOption vanishOption) +{ + _node->fragmentVanishStatus[stripe] = vanishOption; + kernelFragments[stripe] = {}; + _outputStartX[runKerenlUuid][stripe] = 0; +} + +StaticGraphStatus Ipu8FragmentsConfigurator::configFragmentsCropper(StaticGraphRunKernel* runKernel, StaticGraphFragmentDesc* kernelFragments, + uint32_t prevKernelUuid, StaticGraphFragmentDesc* prevKernelFragments) +{ + if (kernelFragments == nullptr || prevKernelFragments == nullptr) + { + return StaticGraphStatus::SG_ERROR; + } + + // prev kernel is the downscaler + copyFragments(runKernel, prevKernelFragments, prevKernelUuid, kernelFragments); + + // No cropping in DS, cropping is done by ESPA cropper + + int32_t leftPixel = runKernel->resolution_info->input_crop.left; + int32_t rightPixel = static_cast(runKernel->resolution_info->input_width - runKernel->resolution_info->input_crop.right); + + int32_t leftNonVanishedStripe = 0; + int32_t rightNonVanishedStripe = _node->numberOfFragments - 1; + + std::vector xOffset(_node->numberOfFragments, 0); + + for (int8_t stripe = 0; stripe < _node->numberOfFragments; stripe++) + { + if (leftPixel + MIN_STRIPE_WIDTH_BEFORE_TNR >= kernelFragments[stripe].fragmentStartX + kernelFragments[stripe].fragmentInputWidth) + { + // This stripe is cropped out, vanish it! + // Note that we set output width to 0 for ESPA cropper and forward. But Stripe vanishes much eairlier in pipe, and these infos are not updated. + vanishStripe(stripe, runKernel->kernel_uuid, kernelFragments, VanishOption::AfterStats); + continue; + } + + // Not vanished + leftNonVanishedStripe = stripe; + break; + } + + for (uint8_t stripe = _node->numberOfFragments - 1; stripe >= 0; stripe--) + { + if (rightPixel <= kernelFragments[stripe].fragmentStartX + MIN_STRIPE_WIDTH_BEFORE_TNR) + { + // This stripe is cropped out, vanish it! + // Note that we set output width to 0 for ESPA cropper and forward. But Stripe vanishes much eairlier in pipe, and these infos are not updated. + vanishStripe(stripe, runKernel->kernel_uuid, kernelFragments, VanishOption::AfterStats); + continue; + } + + // Not vanished + rightNonVanishedStripe = stripe; + break; + } + + for (int32_t stripe = leftNonVanishedStripe; stripe <= rightNonVanishedStripe; stripe++) + { + int32_t leftCrop = runKernel->resolution_info->input_crop.left > kernelFragments[stripe].fragmentStartX ? + runKernel->resolution_info->input_crop.left - kernelFragments[stripe].fragmentStartX : 0; + int32_t rightCrop = runKernel->resolution_info->input_crop.right > (runKernel->resolution_info->input_width - kernelFragments[stripe].fragmentStartX - kernelFragments[stripe].fragmentInputWidth) ? + runKernel->resolution_info->input_crop.right - (runKernel->resolution_info->input_width - kernelFragments[stripe].fragmentStartX - kernelFragments[stripe].fragmentInputWidth) : 0; + + // Save for sys api + xOffset[stripe] = static_cast(leftCrop); + + // ESPA crop is after the down scaling and it must output resolution that divides by 8 for tnr scalers. + int32_t stripeZoomCrop = leftCrop + rightCrop; + + int outputWidth = (int)kernelFragments[stripe].fragmentOutputWidth - stripeZoomCrop; + if (outputWidth < 0) + { + return StaticGraphStatus::SG_ERROR; + } + + kernelFragments[stripe].fragmentOutputWidth = static_cast(outputWidth); + + // For start point, we need to remove the left cropping only for stripes 1 and on + uint16_t outputStartX = static_cast(kernelFragments[stripe].fragmentStartX > runKernel->resolution_info->input_crop.left) ? + static_cast(kernelFragments[stripe].fragmentStartX - runKernel->resolution_info->input_crop.left) : 0; + + _outputStartX[runKernel->kernel_uuid][stripe] = outputStartX; + + if (kernelFragments[stripe].fragmentOutputWidth % 8 != 0) + { + uint16_t pixelsToCrop = kernelFragments[stripe].fragmentOutputWidth % 8; + + // Additional crop on the right, affects only output width + kernelFragments[stripe].fragmentOutputWidth -= pixelsToCrop; + + if (stripe == rightNonVanishedStripe) + { + // Last stripe - crop from left + _outputStartX[runKernel->kernel_uuid][stripe] += pixelsToCrop; + xOffset[stripe] += pixelsToCrop; + } + } + } + + // Update system API offsets + +#ifdef STATIC_GRAPH_USE_IA_LEGACY_TYPES + if (runKernel->system_api.size != ((GRA_ROUND_UP(sizeof(SystemApiRecordHeader), 4)) + (sizeof(StaticGraphKernelSystemApiIoBuffer1_4)))) + { + // TODO log error + return StaticGraphStatus::SG_ERROR; + } +#endif + + auto systemApiHeader = static_cast(runKernel->system_api.data); + if (systemApiHeader->systemApiUuid != GraphResolutionConfiguratorHelper::getRunKernelIoBufferSystemApiUuid()) + { + // TODO log error + return StaticGraphStatus::SG_ERROR; + } + + StaticGraphKernelSystemApiIoBuffer1_4* systemApi = reinterpret_cast + (static_cast(runKernel->system_api.data) + GRA_ROUND_UP(sizeof(SystemApiRecordHeader), 4)); + + for (uint8_t stripe = 0; stripe < _node->numberOfFragments; stripe++) + { + systemApi->x_output_offset_per_stripe[stripe] = xOffset[stripe]; + } + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus Ipu8FragmentsConfigurator::configFragmentsUpscaler(StaticGraphRunKernel* runKernel, StaticGraphFragmentDesc* kernelFragments, + uint32_t prevKernelUuid, StaticGraphFragmentDesc* prevKernelFragments) +{ + if (kernelFragments == nullptr) + { + return StaticGraphStatus::SG_ERROR; + } + + copyFragments(runKernel, prevKernelFragments, prevKernelUuid, kernelFragments); + + if (runKernel->resolution_info->input_width == runKernel->resolution_info->output_width && + runKernel->resolution_info->input_height == runKernel->resolution_info->output_height && + runKernel->resolution_info->input_crop.left == 0 && + runKernel->resolution_info->input_crop.right == 0 && + runKernel->resolution_info->input_crop.top == 0 && + runKernel->resolution_info->input_crop.bottom == 0) + { + // Upscaler bypassed + return StaticGraphStatus::SG_OK; + } + + _outputStartX[runKernel->kernel_uuid] = std::vector(_node->numberOfFragments, 0); + + auto resInfo = runKernel->resolution_info; + + auto scaleFactorW = static_cast(resInfo->input_width - resInfo->input_crop.left - resInfo->input_crop.right) / resInfo->output_width; + auto scaleFactorH = static_cast(resInfo->input_height - resInfo->input_crop.top - resInfo->input_crop.bottom) / resInfo->output_height; + auto scaleFactor = std::max(scaleFactorW, scaleFactorH); + + int32_t croppedInputWidth = resInfo->input_width - resInfo->input_crop.left - resInfo->input_crop.right; + int32_t outputWidth = resInfo->output_width; + + // We would like to keep upscalerWidthGranularity as large as possible in order to minimize the number of pixels that cannot be used for upscaling + // (upscalerWidthGranularity is divided to stripes, so the larger it is the more accurately we can divide) + // Find the largest granularity that divides both + uint32_t upscalerWidthGranularity = calculateGcd(static_cast(croppedInputWidth), static_cast(outputWidth)); + uint16_t inputUnits = static_cast(croppedInputWidth / upscalerWidthGranularity); + + int32_t leftPixel = runKernel->resolution_info->input_crop.left; + int32_t rightPixel = static_cast(runKernel->resolution_info->input_width - runKernel->resolution_info->input_crop.right); + + uint8_t leftNonVanishedStripe = 0; + uint8_t rightNonVanishedStripe = _node->numberOfFragments - 1; + + for (int8_t stripe = 0; stripe < _node->numberOfFragments; stripe++) + { + if (_node->fragmentVanishStatus[stripe] != VanishOption::Full) + { + continue; + } + + if (leftPixel + MIN_STRIPE_WIDTH_AFTER_TNR >= kernelFragments[stripe].fragmentStartX + kernelFragments[stripe].fragmentInputWidth) + { + // This stripe is cropped out, vanish it! + vanishStripe(stripe, runKernel->kernel_uuid, kernelFragments, VanishOption::AfterTnr); + continue; + } + + // Not vanished + leftNonVanishedStripe = stripe; + break; + } + + for (uint8_t stripe = _node->numberOfFragments - 1; stripe >= 0; stripe--) + { + if (_node->fragmentVanishStatus[stripe] != VanishOption::Full) + { + continue; + } + + if (rightPixel <= kernelFragments[stripe].fragmentStartX + MIN_STRIPE_WIDTH_AFTER_TNR) + { + // This stripe is cropped out, vanish it! + vanishStripe(stripe, runKernel->kernel_uuid, kernelFragments, VanishOption::AfterTnr); + continue; + } + // Not vanished + rightNonVanishedStripe = stripe; + break; + } + + for (uint8_t stripe = leftNonVanishedStripe; stripe <= rightNonVanishedStripe; stripe++) + { + int32_t leftCrop = resInfo->input_crop.left > kernelFragments[stripe].fragmentStartX ? + resInfo->input_crop.left - kernelFragments[stripe].fragmentStartX : 0; + int32_t rightCrop = resInfo->input_crop.right > (resInfo->input_width - kernelFragments[stripe].fragmentStartX - kernelFragments[stripe].fragmentInputWidth) ? + resInfo->input_crop.right - (resInfo->input_width - kernelFragments[stripe].fragmentStartX - kernelFragments[stripe].fragmentInputWidth) : 0; + + int32_t stripeZoomCrop = leftCrop + rightCrop; + + // Calculate the step, proportional to the part of input to upscaler that this stripe is working on + uint16_t inputWidthAfterZoomCrop = static_cast(kernelFragments[stripe].fragmentInputWidth - stripeZoomCrop); + + uint16_t pixelsToCrop = 0; + uint16_t maxInputWidth = static_cast(UPSCALER_MAX_OUTPUT_WIDTH * scaleFactor); + if (inputWidthAfterZoomCrop > maxInputWidth) + { + pixelsToCrop = inputWidthAfterZoomCrop - maxInputWidth; + inputWidthAfterZoomCrop = maxInputWidth; + } + + uint16_t stripeStepW = GRA_ROUND_DOWN(static_cast(static_cast(inputWidthAfterZoomCrop) / (resInfo->input_width - resInfo->input_crop.left - resInfo->input_crop.right) * upscalerWidthGranularity), 2); + uint16_t inputWidthAfterTotalCrop = stripeStepW * inputUnits; + + if (inputWidthAfterTotalCrop < 16) + { + // Too little left after cropping, vanish this stripe + vanishStripe(stripe, runKernel->kernel_uuid, kernelFragments, VanishOption::AfterTnr); + continue; + } + + pixelsToCrop += (inputWidthAfterZoomCrop - inputWidthAfterTotalCrop); + + kernelFragments[stripe].fragmentOutputWidth = static_cast(GRA_ROUND(static_cast(inputWidthAfterTotalCrop) / scaleFactor)); + + // Validate output width + if (static_cast(inputWidthAfterTotalCrop) / kernelFragments[stripe].fragmentOutputWidth != + static_cast(resInfo->input_height - resInfo->input_crop.top - resInfo->input_crop.bottom) / resInfo->output_height) + { + // Output width is not valid, return error + return StaticGraphStatus::SG_ERROR; + } + + if (stripe == leftNonVanishedStripe && stripe != rightNonVanishedStripe) + { + // Crop on the right + kernelFragments[stripe].upscalerFragDesc.fragmentInputCropLeft = 0; + kernelFragments[stripe].upscalerFragDesc.fragmentInputCropRight = pixelsToCrop; + } + else if (stripe == rightNonVanishedStripe && stripe != leftNonVanishedStripe) + { + // Crop on the left + kernelFragments[stripe].upscalerFragDesc.fragmentInputCropLeft = pixelsToCrop; + kernelFragments[stripe].upscalerFragDesc.fragmentInputCropRight = 0; + } + else + { + // Crop both sides + kernelFragments[stripe].upscalerFragDesc.fragmentInputCropLeft = GRA_ROUND_DOWN(static_cast(pixelsToCrop / 2), 2); + kernelFragments[stripe].upscalerFragDesc.fragmentInputCropRight = pixelsToCrop - kernelFragments[stripe].upscalerFragDesc.fragmentInputCropLeft; + } + + uint16_t stripeStart = static_cast(kernelFragments[stripe].fragmentStartX > resInfo->input_crop.left ? + kernelFragments[stripe].fragmentStartX - resInfo->input_crop.left : 0); + + stripeStart += kernelFragments[stripe].upscalerFragDesc.fragmentInputCropLeft; + auto scaleFactorFixed = static_cast(static_cast(scaleFactor * static_cast(1 << 16))) / static_cast(1 << 16); + + float widthIn = static_cast(resInfo->input_width - resInfo->input_crop.left - resInfo->input_crop.right); + float horizontalOffset = (static_cast(widthIn) - static_cast(scaleFactorFixed) * (static_cast(resInfo->output_width) - 1.0F)) / 2.0F; + + auto nScaledPixelsMax = (static_cast(stripeStart) + 1.0f - horizontalOffset) / scaleFactorFixed; + auto nScaledPixels = std::ceil((static_cast(stripeStart) - horizontalOffset) / scaleFactorFixed); + + if (static_cast(nScaledPixels) % 2 != 0) + { + nScaledPixels = 2 * std::floor(nScaledPixelsMax / 2); + } + + _outputStartX[runKernel->kernel_uuid][stripe] = static_cast(nScaledPixels); + } + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus Ipu8FragmentsConfigurator::configFragmentsOutput(StaticGraphRunKernel* runKernel, StaticGraphFragmentDesc* kernelFragments, + uint32_t prevKernelUuid, StaticGraphFragmentDesc* prevKernelFragments, bool isTnr) +{ + if (kernelFragments == nullptr || prevKernelFragments == nullptr) + { + return StaticGraphStatus::SG_ERROR; + } + + copyFragments(runKernel, prevKernelFragments, prevKernelUuid, kernelFragments); + + int16_t leftNonVanishedStripe = 0; + int16_t rightNonVanishedStripe = _node->numberOfFragments - 1; + + for (int16_t stripe = 0; stripe < _node->numberOfFragments; stripe++) + { + if ((_node->fragmentVanishStatus[stripe] == VanishOption::Full) || + (isTnr && _node->fragmentVanishStatus[stripe] == VanishOption::AfterTnr)) + { + // Not vanished + leftNonVanishedStripe = stripe; + break; + } + } + + for (int16_t stripe = _node->numberOfFragments - 1; stripe >= 0; stripe--) + { + if ((_node->fragmentVanishStatus[stripe] == VanishOption::Full) || + (isTnr && _node->fragmentVanishStatus[stripe] == VanishOption::AfterTnr)) + { + // Not vanished + rightNonVanishedStripe = stripe; + break; + } + } + + // Remove overlaps between stripes + FormatType bufferFormat = GraphResolutionConfiguratorHelper::getFormatForDrainer(runKernel->kernel_uuid); + std::vector newOutputStartX = std::vector(_node->numberOfFragments, 0); + + for (int16_t stripe = leftNonVanishedStripe; stripe <= rightNonVanishedStripe; stripe++) + { + if (stripe == leftNonVanishedStripe) // first stripe + { + newOutputStartX[stripe] = 0; + } + else //middle or last stripe + { + newOutputStartX[stripe] = + (_outputStartX[runKernel->kernel_uuid][stripe] + _outputStartX[runKernel->kernel_uuid][stripe-1] + kernelFragments[stripe-1].fragmentOutputWidth) / 4 * 2; + + // Align to format restrictions if TNR drainer & data is 10-bit packed + newOutputStartX[stripe] = alignToFormatRestrictions(newOutputStartX[stripe], bufferFormat); + } + } + + _outputStartX[runKernel->kernel_uuid] = newOutputStartX; + + // Data Width is calculated according to data starts + for (int16_t stripe = leftNonVanishedStripe; stripe <= rightNonVanishedStripe; stripe++) + { + if (stripe == rightNonVanishedStripe) // last stripe + { + kernelFragments[stripe].fragmentOutputWidth = static_cast(runKernel->resolution_info->output_width - _outputStartX[runKernel->kernel_uuid][stripe]); + } + else // first or middle stripe + { + if (_outputStartX[runKernel->kernel_uuid][stripe + 1] <= _outputStartX[runKernel->kernel_uuid][stripe]) + { + return StaticGraphStatus::SG_ERROR; + } + + kernelFragments[stripe].fragmentOutputWidth = static_cast(_outputStartX[runKernel->kernel_uuid][stripe+1] - _outputStartX[runKernel->kernel_uuid][stripe]); + } + } + + // Update system API offsets +#ifdef STATIC_GRAPH_USE_IA_LEGACY_TYPES + if (runKernel->system_api.size != ((GRA_ROUND_UP(sizeof(SystemApiRecordHeader), 4)) + (sizeof(StaticGraphKernelSystemApiIoBuffer1_4)))) + { + // TODO log error + return StaticGraphStatus::SG_ERROR; + } +#endif + + auto systemApiHeader = static_cast(runKernel->system_api.data); + if (systemApiHeader->systemApiUuid != GraphResolutionConfiguratorHelper::getRunKernelIoBufferSystemApiUuid()) + { + // TODO log error + return StaticGraphStatus::SG_ERROR; + } + + StaticGraphKernelSystemApiIoBuffer1_4* systemApi = reinterpret_cast + (static_cast(runKernel->system_api.data) + GRA_ROUND_UP(sizeof(SystemApiRecordHeader), 4)); + + for (int16_t stripe = 0; stripe < _node->numberOfFragments; stripe++) + { + systemApi->x_output_offset_per_stripe[stripe] = 0; + + for (uint8_t plane = 0; plane < 3; plane++) + { + systemApi->plane_start_address_per_stripe[stripe * 3 + plane] = 0; + } + } + + for (int16_t stripe = leftNonVanishedStripe; stripe <= rightNonVanishedStripe; stripe++) + { + uint32_t sumOfPrevWidths = 0; + + for (int16_t s = leftNonVanishedStripe; s < stripe; s++) + { + sumOfPrevWidths += kernelFragments[s].fragmentOutputWidth; + } + + // OutputOffsetPerStripe: Sum(prev output widths) + input_crop.left - stripe.startX + systemApi->x_output_offset_per_stripe[stripe] = + sumOfPrevWidths + runKernel->resolution_info->input_crop.left - kernelFragments[stripe].fragmentStartX; + + // PlaneOffsetStartAddressPerStripe: Sum(prev output widths) * DataSize + for (uint8_t plane = 0; plane < 2; plane++) + { + systemApi->plane_start_address_per_stripe[stripe * 3 + plane] = getPlaneStartAddress(sumOfPrevWidths, bufferFormat, plane); + } + } + + return StaticGraphStatus::SG_OK; +} + +uint32_t Ipu8FragmentsConfigurator::getPlaneStartAddress(uint32_t sumOfPrevWidths, FormatType formatType, uint8_t plane) +{ + // Calculate according to format BPP. + uint32_t bitsPerElement = 8; + uint32_t elementsPerCacheLine = 64; + uint8_t numberOfPlanes = 3; + + if (formatType == FormatType::YUV420_8_SP_P) + { + // 8-bit packed (OFS output) + bitsPerElement = 8; + elementsPerCacheLine = 64; + numberOfPlanes = 2; + } + else if (formatType == FormatType::YUV420_10_SP_P) + { + // 10-bit packed (TNR ref) + bitsPerElement = 10; + elementsPerCacheLine = 50; + numberOfPlanes = 2; + } + else if (formatType == FormatType::META_8) + { + // 8-bit meta data (TNR recursice similarity) + bitsPerElement = 8; + elementsPerCacheLine = 64; + numberOfPlanes = 1; + } + else + { + // Format not supported + // Log error + return 0; + } + + if (plane >= numberOfPlanes) + { + // Plane does not exist + return 0; + } + + // Offset is calculated by taking whole cache lines and then adding the remaining pixles and translate to bytes. + uint32_t wholeCacheLines = sumOfPrevWidths / elementsPerCacheLine; + uint32_t remainingPixels = sumOfPrevWidths % elementsPerCacheLine; + + if ((remainingPixels * bitsPerElement) % 8 != 0) + { + // Log error + return 0; + } + + return wholeCacheLines * 64 + (remainingPixels * bitsPerElement) / 8; +} + +uint16_t Ipu8FragmentsConfigurator::alignToFormatRestrictions(uint16_t size, FormatType bufferFormat) +{ + if (bufferFormat != FormatType::YUV420_10_SP_P) + { + return size; + } + + uint16_t elementsPerCacheLine = 50; + + uint16_t remainingPixels = size % elementsPerCacheLine; + uint16_t pixelsToRemove = remainingPixels % 4; + + return size - pixelsToRemove; +} + +StaticGraphStatus Ipu8FragmentsConfigurator::configFragmentsTnrScaler(StaticGraphRunKernel* runKernel, StaticGraphFragmentDesc* kernelFragments, + uint32_t prevKernelUuid, StaticGraphFragmentDesc* prevKernelFragments) +{ + if (kernelFragments == nullptr || prevKernelFragments == nullptr) + { + return StaticGraphStatus::SG_ERROR; + } + + copyFragments(runKernel, prevKernelFragments, prevKernelUuid, kernelFragments); + + auto resInfo = runKernel->resolution_info; + + auto scaleFactor = static_cast(resInfo->output_width) / (resInfo->input_width); + + for (int32_t stripe = 0; stripe < _node->numberOfFragments; stripe++) + { + if (_node->fragmentVanishStatus[stripe] == VanishOption::AfterStats) + { + continue; + } + + kernelFragments[stripe].fragmentOutputWidth = static_cast(kernelFragments[stripe].fragmentInputWidth * scaleFactor); + + // Start of output is rounded up since this is what b2i_ds does (Creates pixels starting from the pixel after) + _outputStartX[runKernel->kernel_uuid][stripe] = static_cast(ceil(scaleFactor * kernelFragments[stripe].fragmentStartX / 2)) * 2; + } + + // Save stripes for feeder configuration + _tnrScalerFragments = kernelFragments; + _tnrScalerRunKernel = runKernel; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus Ipu8FragmentsConfigurator::configFragmentsTnrFeeder(StaticGraphRunKernel* runKernel, StaticGraphFragmentDesc* kernelFragments, GraphResolutionConfiguratorKernelRole kernelRole) +{ + if (kernelFragments == nullptr || _tnrScalerFragments == nullptr || _tnrScalerRunKernel == nullptr) + { + return StaticGraphStatus::SG_ERROR; + } + _outputStartX[runKernel->kernel_uuid] = std::vector(_node->numberOfFragments, 0); + + for (uint8_t stripe = 0; stripe < _node->numberOfFragments; stripe++) + { + if (_node->fragmentVanishStatus[stripe] == VanishOption::AfterStats) + { + vanishStripe(stripe, runKernel->kernel_uuid, kernelFragments, VanishOption::AfterStats); + continue; + } + + if (kernelRole == GraphResolutionConfiguratorKernelRole::TnrFeederFull) + { + // TNR Full resolution + kernelFragments[stripe].fragmentInputWidth = static_cast(_tnrScalerRunKernel->resolution_info->input_width); + kernelFragments[stripe].fragmentOutputWidth = _tnrScalerFragments[stripe].fragmentInputWidth; + kernelFragments[stripe].fragmentStartX = _tnrScalerFragments[stripe].fragmentStartX; + _outputStartX[runKernel->kernel_uuid][stripe] = _tnrScalerFragments[stripe].fragmentStartX; + } + else // GraphResolutionConfiguratorKernelRole::TnrFeederSmall + { + // TNR Small resolution + kernelFragments[stripe].fragmentInputWidth = static_cast(_tnrScalerRunKernel->resolution_info->output_width); + kernelFragments[stripe].fragmentOutputWidth = _tnrScalerFragments[stripe].fragmentOutputWidth; + kernelFragments[stripe].fragmentStartX = _outputStartX[_tnrScalerRunKernel->kernel_uuid][stripe]; + _outputStartX[runKernel->kernel_uuid][stripe] = _outputStartX[_tnrScalerRunKernel->kernel_uuid][stripe]; + } + } + + // Update system API offsets + +#ifdef STATIC_GRAPH_USE_IA_LEGACY_TYPES + if (runKernel->system_api.size != ((GRA_ROUND_UP(sizeof(SystemApiRecordHeader), 4)) + (sizeof(StaticGraphKernelSystemApiIoBuffer1_4)))) + { + // TODO log error + return StaticGraphStatus::SG_ERROR; + } +#endif + + auto systemApiHeader = static_cast(runKernel->system_api.data); + if (systemApiHeader->systemApiUuid != GraphResolutionConfiguratorHelper::getRunKernelIoBufferSystemApiUuid()) + { + // TODO log error + return StaticGraphStatus::SG_ERROR; + } + + StaticGraphKernelSystemApiIoBuffer1_4* systemApi = reinterpret_cast + (static_cast(runKernel->system_api.data) + GRA_ROUND_UP(sizeof(SystemApiRecordHeader), 4)); + + for (uint8_t stripe = 0; stripe < _node->numberOfFragments; stripe++) + { + systemApi->x_output_offset_per_stripe[stripe] = _outputStartX[runKernel->kernel_uuid][stripe]; + } + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus Ipu8FragmentsConfigurator::configFragmentsSmurf(StaticGraphRunKernel* runKernel, StaticGraphFragmentDesc* kernelFragments, + StaticGraphFragmentDesc* prevKernelFragments, std::vector& smurfKernels) +{ + if (kernelFragments == nullptr || prevKernelFragments == nullptr) + { + return StaticGraphStatus::SG_ERROR; + } + + auto resInfo = runKernel->resolution_info; + if (resInfo->input_width == 0 || resInfo->input_height == 0 || + resInfo->output_width == 0 || resInfo->output_height == 0) + { + // Smurf not in use + return StaticGraphStatus::SG_OK; + } + + _outputStartX[runKernel->kernel_uuid] = std::vector(_node->numberOfFragments, 0); + + // Find the device that is fed by this smurf (the second in the pair) + StaticGraphRunKernel* deviceRunKernel = nullptr; + for (auto& smurfInfo : smurfKernels) + { + if (smurfInfo->_smurfRunKernel->kernel_uuid == runKernel->kernel_uuid) + { + deviceRunKernel = smurfInfo->_deviceRunKernel; + break; + } + } + + if (deviceRunKernel == nullptr) + { + // Smurf does not have a device? + return StaticGraphStatus::SG_ERROR; + } + + // Find the index of the device in the node kernels + StaticGraphFragmentDesc* deviceFragments = nullptr; + for (uint32_t j = 0; j < _node->nodeKernels.kernelCount; j++) + { + if (_node->nodeKernels.kernelList[j].run_kernel.kernel_uuid == deviceRunKernel->kernel_uuid) + { + + deviceFragments = _node->nodeKernels.kernelList[j].fragment_descs; + break; + } + } + + if (deviceFragments == nullptr) + { + // Smurf does not have a device? + return StaticGraphStatus::SG_ERROR; + } + + double newScaleFactorH = (double)(resInfo->output_width + resInfo->output_crop.left + resInfo->output_crop.right) / (resInfo->input_width - resInfo->input_crop.left - resInfo->input_crop.right); + double newScaleFactorV = (double)(resInfo->output_height + resInfo->output_crop.top + resInfo->output_crop.bottom) / (resInfo->input_height - resInfo->input_crop.top - resInfo->input_crop.bottom); + double newScaleFactor = std::max(newScaleFactorH, newScaleFactorV); + + for (int8_t stripe = 0; stripe < _node->GetNumberOfFragments(); stripe++) + { + // If device is vanished, vanish the smurf too + if (deviceFragments[stripe].fragmentOutputWidth == 0 && + deviceFragments[stripe].fragmentInputWidth == 0) + { + vanishStripe(stripe, runKernel->kernel_uuid, kernelFragments, _node->fragmentVanishStatus[stripe]); + continue; + } + + // Smurf output is the same as the device input + kernelFragments[stripe].fragmentOutputWidth = deviceFragments[stripe].fragmentInputWidth; + + // Get the start X that will we actually have (since feeder can only crop even numbers) prevKernelFragments is the feeder + uint32_t requiredOutputStartX = deviceFragments[stripe].fragmentStartX + resInfo->output_crop.left; + uint32_t actualOutputStartX = static_cast(ceil(newScaleFactor * prevKernelFragments[stripe].fragmentStartX / 2)) * 2; + + if (actualOutputStartX > (uint32_t)resInfo->output_crop.left && (requiredOutputStartX > actualOutputStartX)) + { + // This is actually output crop (PAL knows :) + kernelFragments[stripe].upscalerFragDesc.fragmentInputCropLeft = static_cast(requiredOutputStartX - actualOutputStartX); + } + } + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus Ipu8FragmentsConfigurator::configFragmentsSmurfFeeder(StaticGraphRunKernel* runKernel, StaticGraphFragmentDesc* kernelFragments) +{ + if (runKernel == nullptr || kernelFragments == nullptr) + { + return StaticGraphStatus::SG_ERROR; + } + + _outputStartX[runKernel->kernel_uuid] = std::vector(_node->numberOfFragments, 0); + + for (uint8_t stripe = 0; stripe < _node->numberOfFragments; stripe++) + { + _outputStartX[runKernel->kernel_uuid][stripe] = kernelFragments[stripe].fragmentStartX; + } + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus Ipu8FragmentsConfigurator::copyFragments(StaticGraphRunKernel* runKernel, StaticGraphFragmentDesc* prevKernelFragments, uint32_t prevKernelUuid, StaticGraphFragmentDesc* kernelFragments) +{ + if (prevKernelFragments == nullptr || kernelFragments == nullptr) + { + return StaticGraphStatus::SG_ERROR; + } + + _outputStartX[runKernel->kernel_uuid] = std::vector(_node->numberOfFragments, 0); + + if (_outputStartX.find(prevKernelUuid) == _outputStartX.end()) + { + // This is the main DS, we start from it, no need to copy + return StaticGraphStatus::SG_OK; + } + + for (uint32_t i = 0; i < _node->numberOfFragments; i++) + { + kernelFragments[i].fragmentInputWidth = prevKernelFragments[i].fragmentOutputWidth; + kernelFragments[i].fragmentOutputWidth = prevKernelFragments[i].fragmentOutputWidth; + kernelFragments[i].fragmentStartX = _outputStartX[prevKernelUuid][i]; + kernelFragments[i].upscalerFragDesc.fragmentInputCropLeft = 0; + kernelFragments[i].upscalerFragDesc.fragmentInputCropRight = 0; + + _outputStartX[runKernel->kernel_uuid][i] = kernelFragments[i].fragmentStartX; + } + + return StaticGraphStatus::SG_OK; +} + +// Find the greatest common divisor, curtesy of CoPilot +uint32_t Ipu8FragmentsConfigurator::calculateGcd(uint32_t a, uint32_t b) +{ + while (b != 0) + { + uint32_t t = b; + b = a % b; + a = t; + } + return a; +} \ No newline at end of file diff --git a/modules/ipu_desc/ipu8/FragmentsConfigurator.h b/modules/ipu_desc/ipu8/FragmentsConfigurator.h new file mode 100644 index 0000000..f3b81b9 --- /dev/null +++ b/modules/ipu_desc/ipu8/FragmentsConfigurator.h @@ -0,0 +1,69 @@ +/* +* INTEL CONFIDENTIAL +* Copyright (c) 2022 Intel Corporation +* All Rights Reserved. +* +* The source code contained or described herein and all documents related to +* the source code ("Material") are owned by Intel Corporation or its +* suppliers or licensors. Title to the Material remains with Intel +* Corporation or its suppliers and licensors. The Material may contain trade +* secrets and proprietary and confidential information of Intel Corporation +* and its suppliers and licensors, and is protected by worldwide copyright +* and trade secret laws and treaty provisions. No part of the Material may be +* used, copied, reproduced, modified, published, uploaded, posted, +* transmitted, distributed, or disclosed in any way without Intel's prior +* express written permission. +* +* No license under any patent, copyright, trade secret or other intellectual +* property right is granted to or conferred upon you by disclosure or +* delivery of the Materials, either expressly, by implication, inducement, +* estoppel or otherwise. Any license under such intellectual property rights +* must be express and approved by Intel in writing. +* +* Unless otherwise agreed by Intel in writing, you may not remove or alter +* this notice or any other notice embedded in Materials by Intel or Intels +* suppliers or licensors in any way. +*/ +#pragma once +#include "GraphResolutionConfiguratorInclude.h" +#include + +class Ipu8FragmentsConfigurator +{ +public: + static const int32_t MIN_STRIPE_WIDTH_BEFORE_TNR = 128; + static const int32_t MIN_STRIPE_WIDTH_AFTER_TNR = 64; + static const int32_t UPSCALER_MAX_OUTPUT_WIDTH = 4672; + Ipu8FragmentsConfigurator(IStaticGraphConfig* staticGraph, OuterNode* node); + + StaticGraphStatus configureFragments(std::vector& smurfKernels); + +private: + // Stripe Actions - each filter will perform one action according to its role + StaticGraphStatus configFragmentsDownscaler(StaticGraphRunKernel* runKernel, StaticGraphFragmentDesc* kernelFragments, uint32_t prevKernelUuid, StaticGraphFragmentDesc* prevKernelFragments); + StaticGraphStatus configFragmentsCropper(StaticGraphRunKernel* runKernel, StaticGraphFragmentDesc* kernelFragments, uint32_t prevKernelUuid, StaticGraphFragmentDesc* prevKernelFragments); + StaticGraphStatus configFragmentsUpscaler(StaticGraphRunKernel* runKernel, StaticGraphFragmentDesc* kernelFragments, uint32_t prevKernelUuid, StaticGraphFragmentDesc* prevKernelFragments); + StaticGraphStatus configFragmentsOutput(StaticGraphRunKernel* runKernel, StaticGraphFragmentDesc* kernelFragments, uint32_t prevKernelUuid, StaticGraphFragmentDesc* prevKernelFragments, bool isTnr); + StaticGraphStatus configFragmentsTnrScaler(StaticGraphRunKernel* runKernel, StaticGraphFragmentDesc* kernelFragments, uint32_t prevKernelUuid, StaticGraphFragmentDesc* prevKernelFragments); + StaticGraphStatus configFragmentsTnrFeeder(StaticGraphRunKernel* runKernel, StaticGraphFragmentDesc* kernelFragments, GraphResolutionConfiguratorKernelRole kernelRole); + StaticGraphStatus configFragmentsSmurf(StaticGraphRunKernel* runKernel, StaticGraphFragmentDesc* kernelFragments, StaticGraphFragmentDesc* prevKernelFragments, + std::vector& smurfKernels); + StaticGraphStatus configFragmentsSmurfFeeder(StaticGraphRunKernel* runKernel, StaticGraphFragmentDesc* kernelFragments); + + StaticGraphStatus copyFragments(StaticGraphRunKernel* runKernel, StaticGraphFragmentDesc* prevKernelFragments, uint32_t prevKernelUuid, StaticGraphFragmentDesc* kernelFragments); + void vanishStripe(uint8_t stripe, uint32_t runKerenlUuid, StaticGraphFragmentDesc* kernelFragments, VanishOption vanishOption); + uint32_t getPlaneStartAddress(uint32_t sumOfPrevWidths, FormatType formatType, uint8_t plane); + uint16_t alignToFormatRestrictions(uint16_t size, FormatType bufferFormat); + bool validateDownscalerOutputWidth(StaticGraphFragmentDesc* stripe, uint16_t addition, int32_t stripeIndex, double scaleFactor, StaticGraphRunKernel* runKernel); + uint32_t calculateGcd(uint32_t a, uint32_t b); + + OuterNode* _node = nullptr; + IStaticGraphConfig* _staticGraph = nullptr; + + // Fragments binaries do not contain output start x, so we keep them here + std::map> _outputStartX; + + // Save TNR resolutions for feeder configurations + StaticGraphFragmentDesc* _tnrScalerFragments = nullptr; + StaticGraphRunKernel* _tnrScalerRunKernel = nullptr; +}; diff --git a/modules/ipu_desc/ipu8/GraphResolutionConfigurator.cpp b/modules/ipu_desc/ipu8/GraphResolutionConfigurator.cpp new file mode 100644 index 0000000..b8f5f89 --- /dev/null +++ b/modules/ipu_desc/ipu8/GraphResolutionConfigurator.cpp @@ -0,0 +1,2018 @@ +/* +* INTEL CONFIDENTIAL +* Copyright (c) 2022 Intel Corporation +* All Rights Reserved. +* +* The source code contained or described herein and all documents related to +* the source code ("Material") are owned by Intel Corporation or its +* suppliers or licensors. Title to the Material remains with Intel +* Corporation or its suppliers and licensors. The Material may contain trade +* secrets and proprietary and confidential information of Intel Corporation +* and its suppliers and licensors, and is protected by worldwide copyright +* and trade secret laws and treaty provisions. No part of the Material may be +* used, copied, reproduced, modified, published, uploaded, posted, +* transmitted, distributed, or disclosed in any way without Intel's prior +* express written permission. +* +* No license under any patent, copyright, trade secret or other intellectual +* property right is granted to or conferred upon you by disclosure or +* delivery of the Materials, either expressly, by implication, inducement, +* estoppel or otherwise. Any license under such intellectual property rights +* must be express and approved by Intel in writing. +* +* Unless otherwise agreed by Intel in writing, you may not remove or alter +* this notice or any other notice embedded in Materials by Intel or Intels +* suppliers or licensors in any way. +*/ + +#include "GraphResolutionConfiguratorInclude.h" +#include "GraphResolutionConfigurator.h" +#include +#include + +#if SUPPORT_FRAGMENTS == 1 +#include "FragmentsConfigurator.h" +#endif + +#define GRA_CONVERT_TO_RADIANS(degreeAngle) ((double)((degreeAngle)*M_PI/180.0)) +/* + * External Interfaces + */ + + GraphResolutionConfigurator::GraphResolutionConfigurator(IStaticGraphConfig* staticGraph) +{ + _staticGraph = staticGraph; + + if (_staticGraph == nullptr) + { + return; + } + + if (initRunKernelCoord(GraphResolutionConfiguratorKernelRole::DownScaler, _downscalerRunKernelCoord) != StaticGraphStatus::SG_OK || + initRunKernelCoord(GraphResolutionConfiguratorKernelRole::UpScaler, _upscalerRunKernelCoord) != StaticGraphStatus::SG_OK || + initRunKernelCoord(GraphResolutionConfiguratorKernelRole::EspaCropper, _cropperRunKernelCoord) != StaticGraphStatus::SG_OK || + initOutputRunKernelCoord(_outputRunKernelCoord) != StaticGraphStatus::SG_OK || + initKernelCoordsForUpdate() != StaticGraphStatus::SG_OK) + { + _staticGraph = nullptr; + return; + } + + auto outputRunKernel = getRunKernel(_outputRunKernelCoord); + auto cropperRunKernel = getRunKernel(_cropperRunKernelCoord); + + _originalCropOfFinalCropper = cropperRunKernel->resolution_info->input_crop; + + // Calculate total scaling between sensor and output + // We want to calculate the scaling ratio without taking any cropping into consideration + _widthIn2OutScale = static_cast(outputRunKernel->resolution_history->input_width - + outputRunKernel->resolution_history->input_crop.left - + outputRunKernel->resolution_history->input_crop.right) / outputRunKernel->resolution_history->output_width; + + _heightIn2OutScale = static_cast(outputRunKernel->resolution_history->input_height - + outputRunKernel->resolution_history->input_crop.top - + outputRunKernel->resolution_history->input_crop.bottom) / outputRunKernel->resolution_history->output_height; + + _originalCropInputToScaler = cropperRunKernel->resolution_history->input_crop; + + _originalCropScalerToOutput.left = outputRunKernel->resolution_history->input_crop.left - _originalCropInputToScaler.left; + _originalCropScalerToOutput.right = outputRunKernel->resolution_history->input_crop.right - _originalCropInputToScaler.right; + _originalCropScalerToOutput.top = outputRunKernel->resolution_history->input_crop.top - _originalCropInputToScaler.top; + _originalCropScalerToOutput.bottom = outputRunKernel->resolution_history->input_crop.bottom - _originalCropInputToScaler.bottom; + + // Now take into account the scaling performed by this output + // (Output kernel may perform scaling and cropping when graph contains post processing) + if (outputRunKernel->resolution_info != nullptr) + { + // First add the crop, translated to sensor units, w/out this kernel's scaling since input crop is done before scaling. + _originalCropScalerToOutput.left += static_cast(outputRunKernel->resolution_info->input_crop.left * _widthIn2OutScale); + _originalCropScalerToOutput.right += static_cast(outputRunKernel->resolution_info->input_crop.right * _widthIn2OutScale); + _originalCropScalerToOutput.top += static_cast(outputRunKernel->resolution_info->input_crop.top * _heightIn2OutScale); + _originalCropScalerToOutput.bottom += static_cast(outputRunKernel->resolution_info->input_crop.bottom * _heightIn2OutScale); + + _widthIn2OutScale *= static_cast(outputRunKernel->resolution_info->input_width - + outputRunKernel->resolution_info->input_crop.left - + outputRunKernel->resolution_info->input_crop.right) / outputRunKernel->resolution_info->output_width; + + _heightIn2OutScale *= static_cast(outputRunKernel->resolution_info->input_height - + outputRunKernel->resolution_info->input_crop.top - + outputRunKernel->resolution_info->input_crop.bottom) / outputRunKernel->resolution_info->output_height; + } + + // Remove sensor binning from In2Out total ratios and saved cropping values + SensorMode* sensorMode = nullptr; + _staticGraph->getSensorMode(&sensorMode); + if (sensorMode == nullptr) + { + _staticGraph = nullptr; + return; + } + + if (sensorMode->horizontalScalingDenominator) { + _sensorHorizontalScaling = static_cast(sensorMode->horizontalScalingNumerator) / sensorMode->horizontalScalingDenominator; + } + if (sensorMode->verticalScalingDenominator) { + _sensorVerticalScaling = static_cast(sensorMode->verticalScalingNumerator) / sensorMode->verticalScalingDenominator; + } + + _widthIn2OutScale = _widthIn2OutScale * _sensorHorizontalScaling; + _heightIn2OutScale = _heightIn2OutScale * _sensorVerticalScaling; + + _sensorHorizontalCropLeft = sensorMode->horizontalCropOffset; + _sensorHorizontalCropRight = outputRunKernel->resolution_history->input_width - + sensorMode->horizontalCropOffset - sensorMode->croppedImageWidth; + _sensorVerticalCropTop = sensorMode->verticalCropOffset; + _sensorVerticalCropBottom = outputRunKernel->resolution_history->input_height - + sensorMode->verticalCropOffset - sensorMode->croppedImageHeight; + + // Input crop to scaler includes sensor, so we need to remove it + _originalCropInputToScaler.left = static_cast((_originalCropInputToScaler.left - static_cast(_sensorHorizontalCropLeft)) * _sensorHorizontalScaling); + _originalCropInputToScaler.right = static_cast((_originalCropInputToScaler.right - static_cast(_sensorHorizontalCropRight)) * _sensorHorizontalScaling); + _originalCropInputToScaler.top = static_cast((_originalCropInputToScaler.top - static_cast(_sensorVerticalCropTop)) * _sensorVerticalScaling); + _originalCropInputToScaler.bottom = static_cast((_originalCropInputToScaler.bottom - static_cast(_sensorVerticalCropBottom)) * _sensorVerticalScaling); + + _originalCropScalerToOutput.left = static_cast(_originalCropScalerToOutput.left * _sensorHorizontalScaling); + _originalCropScalerToOutput.right = static_cast(_originalCropScalerToOutput.right * _sensorHorizontalScaling); + _originalCropScalerToOutput.top = static_cast(_originalCropScalerToOutput.top * _sensorVerticalScaling); + _originalCropScalerToOutput.bottom = static_cast(_originalCropScalerToOutput.bottom * _sensorVerticalScaling); + + _originalCropScalerToOutput.left -= cropperRunKernel->resolution_info->input_crop.left; + _originalCropScalerToOutput.right -= cropperRunKernel->resolution_info->input_crop.right; + _originalCropScalerToOutput.top -= cropperRunKernel->resolution_info->input_crop.top; + _originalCropScalerToOutput.bottom -= cropperRunKernel->resolution_info->input_crop.bottom; + } + +/* + * External Interfaces + */ + +#if SUPPORT_KEY_RESOLUTIONS == 1 + +StaticGraphStatus GraphResolutionConfigurator::getZoomKeyResolutionIndex(ZoomKeyResolutions* zoomKeyResolutions, SensorRoi sensorRoi, uint32_t& selectedIndex) +{ + uint32_t width = sensorRoi.width; + uint32_t height = sensorRoi.height; + + // SelectedIndex 0 means use full sensor + // SelectedIndex n+1 means use key resolution #n + selectedIndex = zoomKeyResolutions->numberOfZoomKeyOptions; + if (width > 0 && height > 0) + { + for (uint32_t i = 0; i < zoomKeyResolutions->numberOfZoomKeyOptions; ++i) + { + if (width > zoomKeyResolutions->zoomKeyResolutionOptions[i].width || height > zoomKeyResolutions->zoomKeyResolutionOptions[i].height) + { + // This key resolution is too small, so use previous one (selected index i means use previous key resolution, not this one) + selectedIndex = i; + break; + } + } + } + + return StaticGraphStatus::SG_OK; +} + +// This function receives a static graph and updates kernels resolution info and resolution history to +// perform the required crop and scaling for the give roi +// Expected changes in graph: +// Down scaler resolution info - crop & scale +// Up scaler resolution info - crop & scale +// +// Up scaler resolution history +// All kerenls after upscaler - resolution history +// +// When using key resolutions: +// If previous ROI is supplied, the function will also return indication if key resolution has changed. +// A change of key resolution indicates that resolutions of entire pipe had changed until after the up scaler +StaticGraphStatus GraphResolutionConfigurator::updateStaticGraphConfig(const RegionOfInterest& roi, const RegionOfInterest& prevRoi, + bool isCenteredZoom, bool prevIsCenteredZoom, bool& isKeyResolutionChanged) +{ + if (_staticGraph == nullptr) + { + return StaticGraphStatus::SG_ERROR; + } + + // + // Step #1 Update according to this ROI's key resolution + // + // Get ROI in sensor dimensions + + // If zoom is centered, calculate the pan & tilt + RegionOfInterest userRoi = roi; + RegionOfInterest prevUserRoi = prevRoi; + + if (isCenteredZoom == true) + { + userRoi.panFactor = (1 - userRoi.zoomFactor) / 2; + userRoi.tiltFactor = (1 - userRoi.zoomFactor) / 2; + } + + if (prevIsCenteredZoom == true) + { + prevUserRoi.panFactor = (1 - prevUserRoi.zoomFactor) / 2; + prevUserRoi.tiltFactor = (1 - prevUserRoi.zoomFactor) / 2; + } + + SensorRoi sensorRoi; + if (getSensorRoi(userRoi, sensorRoi) != StaticGraphStatus::SG_OK) + { + return StaticGraphStatus::SG_ERROR; + } + if (roi.fromInput == false) + { + // Key resolution index + uint32_t keyResIndex = 0; + if (isCenteredZoom == true) + { + ZoomKeyResolutions* zoomKeyResolutions = nullptr; + if (_staticGraph->getZoomKeyResolutions(&zoomKeyResolutions) != StaticGraphStatus::SG_OK) + { + return StaticGraphStatus::SG_ERROR; + } + + // Get key resolution for this ROI + // Special case for factor 1, this means there is no zoom, so we select index 0 + if (userRoi.zoomFactor == 1.0) + { + keyResIndex = 0; + } + else if (getZoomKeyResolutionIndex(zoomKeyResolutions, sensorRoi, keyResIndex) != StaticGraphStatus::SG_OK) + { + return StaticGraphStatus::SG_ERROR; + } + + // Update the static configuration according to the key resolution index + // Copy the original kernels configuration a _kernels + if (_staticGraph->updateConfiguration(keyResIndex) != StaticGraphStatus::SG_OK) + { + return StaticGraphStatus::SG_ERROR; + } + } + else + { + if (_staticGraph->updateConfiguration() != StaticGraphStatus::SG_OK) + { + return StaticGraphStatus::SG_ERROR; + } + } + + // Get key resolution for previous ROI + uint32_t prevKeyResIndex = 0; + + if (prevIsCenteredZoom == true) + { + ZoomKeyResolutions* zoomKeyResolutions = nullptr; + if (_staticGraph->getZoomKeyResolutions(&zoomKeyResolutions) != StaticGraphStatus::SG_OK) + { + return StaticGraphStatus::SG_ERROR; + } + + SensorRoi prevSensorRoi; + if (getSensorRoi(prevUserRoi, prevSensorRoi) != StaticGraphStatus::SG_OK) + { + return StaticGraphStatus::SG_ERROR; + } + + // Special case for factor 1, this means there is no zoom, so we select index 0 + if (prevUserRoi.zoomFactor == 1.0) + { + prevKeyResIndex = 0; + } + else if (getZoomKeyResolutionIndex(zoomKeyResolutions, prevSensorRoi, prevKeyResIndex) != StaticGraphStatus::SG_OK) + { + return StaticGraphStatus::SG_ERROR; + } + } + // Update whether if key resolution has changed + isKeyResolutionChanged = (keyResIndex == prevKeyResIndex) ? false : true; + } + + // + // Step #2 Dynamic update according to this ROI + // + return updateRunKernelOfScalers(roi.fromInput,sensorRoi); +} + +#endif +// This function translates ROI from factors (as given by user) to sensor resolution (as required by resolution Configurator) +// There are 2 modes of work - +// if userRoi.fromInput is true it means zoomFactor panFactor and tiltFactor are relative to sensor FOV +// if userRoi.fromInput is false it means zoomFactor panFactor and tiltFactor are relative to preview pin output FOV +StaticGraphStatus GraphResolutionConfigurator::getSensorRoi(const RegionOfInterest& userRoi, SensorRoi& sensorRoi) +{ + if (_staticGraph == nullptr) + { + return StaticGraphStatus::SG_ERROR; + } + + if (userRoi.fromInput == true) + { + if (userRoi.zoomFactor == 1 && userRoi.panFactor == 0) + { + auto cropRunKernel = getRunKernel(_cropperRunKernelCoord); + sensorRoi.width = cropRunKernel->resolution_info->output_width; + sensorRoi.height = cropRunKernel->resolution_info->output_height; + sensorRoi.cropLeft = cropRunKernel->resolution_info->input_crop.left; + sensorRoi.cropRight = cropRunKernel->resolution_info->input_crop.right; + sensorRoi.cropTop = GRA_ROUND_DOWN(std::min(cropRunKernel->resolution_history->input_height- cropRunKernel->resolution_info->output_height, std::max(0, static_cast(static_cast(cropRunKernel->resolution_history->input_height * userRoi.tiltFactor)))), 2); + sensorRoi.cropBottom = cropRunKernel->resolution_info->input_height - cropRunKernel->resolution_info->output_height - sensorRoi.cropTop; + // Not supported + return StaticGraphStatus::SG_OK; + } + else + { + return StaticGraphStatus::SG_ERROR; + } + } + auto outputRunKernel = getRunKernel(_outputRunKernelCoord); + // Calculate ROI on output, using original output since user ROI is relative to full output ROI (not after some zoom was performed) + StaticGraphKernelRes* outputRunKernelResolution = outputRunKernel->resolution_info; + if (outputRunKernelResolution == nullptr) + { + // Pipe output is not RCB (post processing kernel) + outputRunKernelResolution = outputRunKernel->resolution_history; + } + + uint32_t outputLeft = static_cast(outputRunKernelResolution->output_width * userRoi.panFactor); + uint32_t outputRight = static_cast(outputRunKernelResolution->output_width * (1 - userRoi.panFactor - userRoi.zoomFactor)); + uint32_t outputTop = static_cast(outputRunKernelResolution->output_height * userRoi.tiltFactor); + uint32_t outputBottom = static_cast(outputRunKernelResolution->output_height * (1 - userRoi.tiltFactor - userRoi.zoomFactor)); + + uint32_t outputWidth = outputRunKernelResolution->output_width - outputLeft - outputRight; + uint32_t outputHeight = outputRunKernelResolution->output_height - outputTop - outputBottom; + + // Total input to pipe (after sensor cropping and scaling) + int32_t inputWidth = static_cast((outputRunKernel->resolution_history->input_width - _sensorHorizontalCropLeft -_sensorHorizontalCropRight) * _sensorHorizontalScaling); + int32_t inputHeight = static_cast((outputRunKernel->resolution_history->input_height - _sensorVerticalCropTop - _sensorVerticalCropBottom) * _sensorVerticalScaling); + + // Translate to ROI on input + // We round down to make sure crops are not less than original crop + // We add to sensor ROI the cropping done after scalers since it will be cropped in zoom configurations as well. + // Since these cropping were added, We need to make sure crop right and bottom are not negative + sensorRoi.width = GRA_ROUND_DOWN(static_cast(outputWidth * _widthIn2OutScale + _originalCropScalerToOutput.left + _originalCropScalerToOutput.right), 2); + sensorRoi.height = GRA_ROUND_DOWN(static_cast(outputHeight * _heightIn2OutScale + _originalCropScalerToOutput.top + _originalCropScalerToOutput.bottom), 2); + sensorRoi.cropLeft = GRA_ROUND_UP(static_cast((outputLeft * _widthIn2OutScale) + _originalCropInputToScaler.left), 2); + sensorRoi.cropRight = (inputWidth - static_cast(sensorRoi.width) - static_cast(sensorRoi.cropLeft)) > 0 ? static_cast(inputWidth - sensorRoi.width - sensorRoi.cropLeft) : 0; + sensorRoi.cropTop = GRA_ROUND_UP(static_cast((outputTop * _heightIn2OutScale) + _originalCropInputToScaler.top), 2); + sensorRoi.cropBottom = (inputHeight - static_cast(sensorRoi.height) - static_cast(sensorRoi.cropTop)) > 0 ? static_cast(inputHeight - sensorRoi.height - sensorRoi.cropTop) : 0; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus GraphResolutionConfigurator::updateRunKernelOfScalers(bool fromInput, SensorRoi& roi) +{ + StaticGraphStatus ret = StaticGraphStatus::SG_OK; + auto downscalerRunKernel = getRunKernel(_downscalerRunKernelCoord); + auto upscalerRunKernel = getRunKernel(_upscalerRunKernelCoord); + auto cropperRunKernel = getRunKernel(_cropperRunKernelCoord); + + if (fromInput) + { + cropperRunKernel->resolution_info->input_crop.top = roi.cropTop; + cropperRunKernel->resolution_info->input_crop.bottom = roi.cropBottom; + + // Update resolution history for relevant kernels + for (auto& runKernelForUpdate : _kernelsForUpdate) + { + // We update all histories according to upscaler... ignoring any cropping from now on, even if we configured ESPA cropper. + StaticGraphRunKernel* runKernelPtr = getRunKernel(runKernelForUpdate); + if (updateRunKernelResolutionHistory(runKernelPtr, cropperRunKernel, false) != StaticGraphStatus::SG_OK) + { + ret = StaticGraphStatus::SG_ERROR; + } + } + } + else + { + + uint32_t inputWidth = downscalerRunKernel->resolution_info->input_width; + uint32_t inputHeight = downscalerRunKernel->resolution_info->input_height; + + uint32_t outputWidth = cropperRunKernel->resolution_info->output_width; + uint32_t outputHeight = cropperRunKernel->resolution_info->output_height; + + StaticGraphKernelResCrop downscalerCropHistory; + downscalerCropHistory.left = static_cast((downscalerRunKernel->resolution_history->input_crop.left - static_cast(_sensorHorizontalCropLeft)) * _sensorHorizontalScaling); + downscalerCropHistory.right = static_cast((downscalerRunKernel->resolution_history->input_crop.right - static_cast(_sensorHorizontalCropRight)) * _sensorHorizontalScaling); + downscalerCropHistory.top = static_cast((downscalerRunKernel->resolution_history->input_crop.top - static_cast(_sensorVerticalCropTop)) * _sensorVerticalScaling); + downscalerCropHistory.bottom = static_cast((downscalerRunKernel->resolution_history->input_crop.bottom - static_cast(_sensorVerticalCropBottom)) * _sensorVerticalScaling); + if (roi.width == outputWidth || roi.height == outputHeight) + { + updateRunKernelPassThrough(downscalerRunKernel, inputWidth, inputHeight); + updateRunKernelPassThrough(upscalerRunKernel, inputWidth, inputHeight); + // Update ESPA crop if required + updateRunKernelFinalCropper(cropperRunKernel, inputWidth, inputHeight, outputWidth, outputHeight); + } + // If ROI is larger than scaler's output resolution - we downscale + else if (roi.width > outputWidth) + { + // Only down scaler is active + if (updateRunKernelDownScaler(downscalerRunKernel, roi, inputWidth, inputHeight, + outputWidth, outputHeight, &downscalerCropHistory) != StaticGraphStatus::SG_OK) + { + ret = StaticGraphStatus::SG_ERROR; + } + + updateRunKernelPassThrough(upscalerRunKernel, outputWidth, outputHeight); + + // When downscaling, cropper is not a part of dynamic scaling, even if it was a part of static configuration. + updateRunKernelPassThrough(cropperRunKernel, outputWidth, outputHeight); + + } + else + { + // Configure downscaler and upscaler according to upscaler constraints + + // Update upscaler info, according constraints. Returns the expected input width and height for upscaler. + uint32_t upscalerActualInputWidth; + uint32_t upscalerActualInputHeight; + uint32_t upscalerActualOutputWidth; + uint32_t upscalerActualOutputHeight; + if (updateRunKernelUpScaler(upscalerRunKernel, roi.width, roi.height, outputWidth, outputHeight, + upscalerActualInputWidth, upscalerActualInputHeight, + upscalerActualOutputWidth, upscalerActualOutputHeight) != StaticGraphStatus::SG_OK) + { + ret = StaticGraphStatus::SG_ERROR; + } + + // Update DS cropping and downscale according to the resolution the upscaler requires. + if (updateRunKernelDownScaler(downscalerRunKernel, roi, inputWidth, inputHeight, + upscalerActualInputWidth, upscalerActualInputHeight, &downscalerCropHistory) != StaticGraphStatus::SG_OK) + { + ret = StaticGraphStatus::SG_ERROR; + } + + // Now that we're done, if downscaler is not doing any scaling, it is better to let it be bypassed and move the cropping to upscaler + updateCroppingScaler(downscalerRunKernel, upscalerRunKernel); + + // Update ESPA crop if required + updateRunKernelFinalCropper(cropperRunKernel, upscalerActualOutputWidth, upscalerActualOutputHeight, outputWidth, outputHeight); + } + + // Update resolution histories according to decisions made above + if (updateRunKernelResolutionHistory(upscalerRunKernel, downscalerRunKernel) != StaticGraphStatus::SG_OK) + { + ret = StaticGraphStatus::SG_ERROR; + } + + if (updateRunKernelResolutionHistory(cropperRunKernel, upscalerRunKernel) != StaticGraphStatus::SG_OK) + { + ret = StaticGraphStatus::SG_ERROR; + } + + // Update resolution history for relevant kernels + for (auto& runKernelForUpdate : _kernelsForUpdate) + { + // We update all histories according to upscaler... ignoring any cropping from now on, even if we configured ESPA cropper. + // Anna - I don't know why cropping was ignored. I think it should be after cropping + StaticGraphRunKernel* runKernelPtr = getRunKernel(runKernelForUpdate); + if (updateRunKernelResolutionHistory(runKernelPtr, cropperRunKernel, false) != StaticGraphStatus::SG_OK) + { + ret = StaticGraphStatus::SG_ERROR; + } + } + } + + return ret; +} + +StaticGraphStatus GraphResolutionConfigurator::updateRunKernelDownScaler(StaticGraphRunKernel* runKernel, SensorRoi& roi, + uint32_t inputWidth, uint32_t inputHeight, + uint32_t outputWidth, uint32_t outputHeight, + StaticGraphKernelResCrop* originalScalerCrop) +{ + // + // Configure scaler + // + runKernel->resolution_info->input_width = inputWidth; + runKernel->resolution_info->input_height = inputHeight; + + runKernel->resolution_info->output_width = outputWidth; + runKernel->resolution_info->output_height = outputHeight; + + // Take into consideration original crop from downscaler's resolution history + // We assume that originally DS was configured to crop all the padding in its resolution history. + // Otherwise - we will need to save original DS crop (but for each key resolution...) + // roi crops were rounded, while original crop may still be odd numbers. We need to ignore 1 pixel diffs + StaticGraphKernelResCrop* runKernelCrop = &runKernel->resolution_info->input_crop; + runKernelCrop->left = static_cast(roi.cropLeft) - originalScalerCrop->left; + runKernelCrop->right = static_cast(roi.cropRight) - originalScalerCrop->right; + runKernelCrop->top = static_cast(roi.cropTop) - originalScalerCrop->top; + runKernelCrop->bottom = static_cast(roi.cropBottom) - originalScalerCrop->bottom; + + // If we are very close to key resolution sizes, and sensor BYR order is not GRBG, we may have small negative crops here + if (runKernelCrop->left < 0) + { + runKernelCrop->left = 0; + } + if (runKernelCrop->right < 0) + { + runKernelCrop->right = 0; + } + if (runKernelCrop->top < 0) + { + runKernelCrop->top = 0; + } + if (runKernelCrop->bottom < 0) + { + runKernelCrop->bottom = 0; + } + + if (runKernelCrop->left & 1) + { + runKernelCrop->left = runKernelCrop->left - 1; + } + if (runKernelCrop->right & 1) + { + runKernelCrop->right = runKernelCrop->right - 1; + } + if (runKernelCrop->top & 1) + { + runKernelCrop->top = runKernelCrop->top - 1; + } + if (runKernelCrop->bottom & 1) + { + runKernelCrop->bottom = runKernelCrop->bottom - 1; + } + + // In case ROI is too small for desired output resolution, we increase ROI + if (adjustDownscalerCrop(runKernel->resolution_info) != StaticGraphStatus::SG_OK) + { + return StaticGraphStatus::SG_ERROR; + } + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus GraphResolutionConfigurator::adjustDownscalerCrop(StaticGraphKernelRes* scalerResInfo) +{ + if (scalerResInfo->input_width - scalerResInfo->input_crop.left - scalerResInfo->input_crop.right < + scalerResInfo->output_width) + { + int32_t extraPixels = scalerResInfo->output_width - + (scalerResInfo->input_width - scalerResInfo->input_crop.left - scalerResInfo->input_crop.right); + + extraPixels = GRA_ROUND_UP(extraPixels, 4); + int32_t neededCrop = extraPixels / 2; + + if (scalerResInfo->input_crop.left + scalerResInfo->input_crop.right <= extraPixels) + { + // Cannot reach this resolution + return StaticGraphStatus::SG_ERROR; + } + + if (scalerResInfo->input_crop.left >= neededCrop && scalerResInfo->input_crop.right >= neededCrop) + { + // Both sides have enough for fix + scalerResInfo->input_crop.left -= neededCrop; + scalerResInfo->input_crop.right -= neededCrop; + } + else if (scalerResInfo->input_crop.left >= neededCrop) + { + // Only left has enough + neededCrop += (neededCrop - scalerResInfo->input_crop.right); + scalerResInfo->input_crop.left -= neededCrop; + scalerResInfo->input_crop.right = 0; + } + else + { + // Only right has enough + neededCrop += (neededCrop - scalerResInfo->input_crop.left); + scalerResInfo->input_crop.right -= neededCrop; + scalerResInfo->input_crop.left = 0; + } + } + + if (scalerResInfo->input_height - scalerResInfo->input_crop.top - scalerResInfo->input_crop.bottom < + scalerResInfo->output_height) + { + int32_t extraPixels = scalerResInfo->output_height - + (scalerResInfo->input_height - scalerResInfo->input_crop.top - scalerResInfo->input_crop.bottom); + + extraPixels = GRA_ROUND_UP(extraPixels, 4); + int32_t neededCrop = extraPixels / 2; + + if (scalerResInfo->input_crop.top + scalerResInfo->input_crop.bottom <= extraPixels) + { + // Cannot reach this resolution + return StaticGraphStatus::SG_ERROR; + } + + if (scalerResInfo->input_crop.top >= neededCrop && scalerResInfo->input_crop.bottom >= neededCrop) + { + // Both sides have enough for fix + scalerResInfo->input_crop.top -= neededCrop; + scalerResInfo->input_crop.bottom -= neededCrop; + } + else if (scalerResInfo->input_crop.top >= neededCrop) + { + // Only top has enough + neededCrop += (neededCrop - scalerResInfo->input_crop.bottom); + scalerResInfo->input_crop.top -= neededCrop; + scalerResInfo->input_crop.bottom = 0; + } + else + { + // Only bottom has enough + neededCrop += (neededCrop - scalerResInfo->input_crop.top); + scalerResInfo->input_crop.bottom -= neededCrop; + scalerResInfo->input_crop.top = 0; + } + } + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus GraphResolutionConfigurator::updateRunKernelUpScaler(StaticGraphRunKernel* runKernel, + uint32_t inputWidth, uint32_t inputHeight, + uint32_t outputWidth, uint32_t outputHeight, + uint32_t& upscalerActualInputWidth, uint32_t& upscalerActualInputHeight, + uint32_t& upscalerActualOutputWidth, uint32_t& upscalerActualOutputHeight) +{ + const uint32_t ia_pal_isp_upscaler_1_0__scaling_ratio__min = 4096; + + const uint32_t max_upscaling = (1 << SCALE_PREC) / ia_pal_isp_upscaler_1_0__scaling_ratio__min; + + StaticGraphStatus ret = StaticGraphStatus::SG_OK; + + upscalerActualOutputWidth = outputWidth; + upscalerActualOutputHeight = outputHeight; + + // Find valid output configurations + uint32_t stepW1 = 1; + uint32_t stepH1 = 1; + + for (stepH1 = 1; stepH1 < outputHeight / 2; stepH1++) + { + double horStep = static_cast(stepH1) * outputWidth / 2 / outputHeight; + if (floor((horStep)) == horStep) + { + stepW1 = static_cast(horStep) * 2; + break; + } + } + + // Try to work with "sensor" resolution - take original ESPA crop's values + // This is usually better when US output is not regular (and mp/dp cropping is used) and/or DS input is irregular (and ESPA is fixing A/R in original settings) + // HSD 15016169206 and 15017041003 are 2 examples + uint32_t newOutputWidth = outputWidth + _originalCropOfFinalCropper.left + _originalCropOfFinalCropper.right; + uint32_t newOutputHeight = outputHeight + _originalCropOfFinalCropper.top + _originalCropOfFinalCropper.bottom; + + uint32_t stepW2 = 1; + uint32_t stepH2 = 1; + + for (stepH2 = 1; stepH2 < newOutputHeight / 2; stepH2++) + { + double horStep = static_cast(stepH2) * newOutputWidth / 2 / newOutputHeight; + if (floor((horStep)) == horStep) + { + stepW2 = static_cast(horStep) * 2; + break; + } + } + + // Select which steps to take + uint32_t stepW = stepW1; + uint32_t stepH = stepH1; + + if (stepW2 > 1 && stepW2 < stepW1) + { + stepW = stepW2; + stepH = stepH2; + upscalerActualOutputWidth = newOutputWidth; + upscalerActualOutputHeight = newOutputHeight; + } + + // Now try to work with upscaler's direct output (remove espa cropping from output size) + newOutputWidth = runKernel->resolution_info->output_width; + newOutputHeight = runKernel->resolution_info->output_height; + + stepW2 = 1; + stepH2 = 1; + + for (stepH2 = 1; stepH2 < newOutputHeight / 2; stepH2++) + { + double horStep = static_cast(stepH2) * newOutputWidth / 2 / newOutputHeight; + if (floor((horStep)) == horStep) + { + stepW2 = static_cast(horStep) * 2; + break; + } + } + + // Select which steps to take + if (stepW2 > 1 && stepW2 < stepW) + { + stepW = stepW2; + stepH = stepH2; + upscalerActualOutputWidth = newOutputWidth; + upscalerActualOutputHeight = newOutputHeight; + } + + // The input to the upscaler should be multiple of (stepW, stepH) and also even numbers + stepW *= 2; + stepH *= 2; + + // Increase ROI to minimum possible ROI + upscalerActualInputWidth = (inputWidth > stepW && inputHeight > stepH) ? inputWidth : stepW; + + // Make sure ROI is a multiple of (stepW, stepH) + upscalerActualInputWidth = GRA_ROUND_DOWN(upscalerActualInputWidth, stepW); + upscalerActualInputHeight = (upscalerActualInputWidth / stepW) * stepH; + + if ((upscalerActualOutputWidth / upscalerActualInputWidth) > max_upscaling) + { + // Perform the max possible up scaling, downscaler will adjust itself + upscalerActualInputWidth = upscalerActualOutputWidth / max_upscaling; + upscalerActualInputWidth = GRA_ROUND_UP(upscalerActualInputWidth, stepW); + upscalerActualInputHeight = (upscalerActualInputWidth / stepW) * stepH; + } + + // + // Configure scaler + // + runKernel->resolution_info->input_width = upscalerActualInputWidth; + runKernel->resolution_info->input_height = upscalerActualInputHeight; + + runKernel->resolution_info->output_width = upscalerActualOutputWidth; + runKernel->resolution_info->output_height = upscalerActualOutputHeight; + + // Upscaler crop is always 0 + runKernel->resolution_info->input_crop.left = 0; + runKernel->resolution_info->input_crop.right = 0; + runKernel->resolution_info->input_crop.top = 0; + runKernel->resolution_info->input_crop.bottom = 0; + + return ret; +} + +StaticGraphStatus GraphResolutionConfigurator::updateRunKernelPassThrough(StaticGraphRunKernel* runKernel, uint32_t width, uint32_t height) +{ + runKernel->resolution_info->input_width = width; + runKernel->resolution_info->output_width = width; + + runKernel->resolution_info->input_height = height; + runKernel->resolution_info->output_height = height; + + runKernel->resolution_info->input_crop.left = 0; + runKernel->resolution_info->input_crop.right = 0; + runKernel->resolution_info->input_crop.top = 0; + runKernel->resolution_info->input_crop.bottom = 0; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus GraphResolutionConfigurator::updateRunKernelFinalCropper(StaticGraphRunKernel* runKernel, uint32_t inputWidth, uint32_t inputHeight, + uint32_t outputWidth, uint32_t outputHeight) +{ + runKernel->resolution_info->input_width = inputWidth; + runKernel->resolution_info->input_height = inputHeight; + + runKernel->resolution_info->output_width = outputWidth; + runKernel->resolution_info->output_height = outputHeight; + + // Crop symmetrically + runKernel->resolution_info->input_crop.left = GRA_ROUND_DOWN(static_cast((inputWidth - outputWidth) / 2.0), 2); + runKernel->resolution_info->input_crop.right = inputWidth - outputWidth - runKernel->resolution_info->input_crop.left; + runKernel->resolution_info->input_crop.top = GRA_ROUND_DOWN(static_cast((inputHeight - outputHeight) / 2.0), 2); + runKernel->resolution_info->input_crop.bottom = inputHeight - outputHeight - runKernel->resolution_info->input_crop.top; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus GraphResolutionConfigurator::updateCroppingScaler(StaticGraphRunKernel* downscalerRunKernel, StaticGraphRunKernel* upscalerRunKernel) + { + // Is DS performing DS? + int32_t widthAfterCtop = downscalerRunKernel->resolution_info->input_width - + downscalerRunKernel->resolution_info->input_crop.left - downscalerRunKernel->resolution_info->input_crop.right; + int32_t heightAfterCtop = downscalerRunKernel->resolution_info->input_height - + downscalerRunKernel->resolution_info->input_crop.top - downscalerRunKernel->resolution_info->input_crop.bottom; + + int32_t extraPixelsWidth = (downscalerRunKernel->resolution_info->input_width - downscalerRunKernel->resolution_info->input_crop.left - downscalerRunKernel->resolution_info->input_crop.right)- + downscalerRunKernel->resolution_info->output_width; + + widthAfterCtop -= extraPixelsWidth % 4; + + int32_t extraPixelsHeight = (downscalerRunKernel->resolution_info->input_width - downscalerRunKernel->resolution_info->input_crop.left - downscalerRunKernel->resolution_info->input_crop.right) - + downscalerRunKernel->resolution_info->output_width; + + heightAfterCtop -= extraPixelsHeight % 4; + + if (widthAfterCtop == downscalerRunKernel->resolution_info->output_width && + heightAfterCtop == downscalerRunKernel->resolution_info->output_height) + { + // Better move the cropping to US + upscalerRunKernel->resolution_info->input_crop.left = downscalerRunKernel->resolution_info->input_crop.left; + upscalerRunKernel->resolution_info->input_crop.right = downscalerRunKernel->resolution_info->input_crop.right; + upscalerRunKernel->resolution_info->input_crop.top = downscalerRunKernel->resolution_info->input_crop.top; + upscalerRunKernel->resolution_info->input_crop.bottom = downscalerRunKernel->resolution_info->input_crop.bottom; + + upscalerRunKernel->resolution_info->input_width = downscalerRunKernel->resolution_info->input_width; + upscalerRunKernel->resolution_info->input_height = downscalerRunKernel->resolution_info->input_height; + + downscalerRunKernel->resolution_info->input_crop.left = 0; + downscalerRunKernel->resolution_info->input_crop.right = 0; + downscalerRunKernel->resolution_info->input_crop.top = 0; + downscalerRunKernel->resolution_info->input_crop.bottom = 0; + + downscalerRunKernel->resolution_info->output_width = downscalerRunKernel->resolution_info->input_width; + downscalerRunKernel->resolution_info->output_height = downscalerRunKernel->resolution_info->input_height; + } + + return StaticGraphStatus::SG_OK; + } + +StaticGraphStatus GraphResolutionConfigurator::updateRunKernelResolutionHistory(StaticGraphRunKernel* runKernel, StaticGraphRunKernel* prevRunKernel, bool updateResolution) +{ + if (updateResolution == true) + { + runKernel->resolution_history->output_width = runKernel->resolution_info->input_width; + runKernel->resolution_history->output_height = runKernel->resolution_info->input_height; + } + + double horScaleFactor = _sensorHorizontalScaling; + double verScaleFactor = _sensorVerticalScaling; + + if (prevRunKernel->resolution_info != nullptr) + { + // Take our crop, translate according to our history. Take into account the scaling that prev kernel performed. + horScaleFactor = (double)prevRunKernel->resolution_history->output_width / + (prevRunKernel->resolution_history->input_width - prevRunKernel->resolution_history->input_crop.left - prevRunKernel->resolution_history->input_crop.right); + + verScaleFactor = (double)prevRunKernel->resolution_history->output_height / + (prevRunKernel->resolution_history->input_height - prevRunKernel->resolution_history->input_crop.top - prevRunKernel->resolution_history->input_crop.bottom); + + runKernel->resolution_history->input_crop.left = prevRunKernel->resolution_history->input_crop.left + + static_cast(prevRunKernel->resolution_info->input_crop.left / horScaleFactor); + runKernel->resolution_history->input_crop.right = prevRunKernel->resolution_history->input_crop.right + + static_cast(prevRunKernel->resolution_info->input_crop.right / horScaleFactor); + runKernel->resolution_history->input_crop.top = prevRunKernel->resolution_history->input_crop.top + + static_cast(prevRunKernel->resolution_info->input_crop.top / verScaleFactor); + runKernel->resolution_history->input_crop.bottom = prevRunKernel->resolution_history->input_crop.bottom + + static_cast(prevRunKernel->resolution_info->input_crop.bottom / verScaleFactor); + } + + return StaticGraphStatus::SG_OK; +} + +StaticGraphRunKernel* GraphResolutionConfigurator::getRunKernel(RunKernelCoords& coord) +{ + GraphTopology* graphTopology = nullptr; + StaticGraphStatus status = _staticGraph->getGraphTopology(&graphTopology); + + if (status != StaticGraphStatus::SG_OK) { + return nullptr; + } + + auto node = graphTopology->links[coord.nodeInd]->destNode; + return &node->nodeKernels.kernelList[coord.kernelInd].run_kernel; +} + +StaticGraphStatus GraphResolutionConfigurator::findRunKernel(uint32_t kernelUuid, RunKernelCoords& coord) +{ + GraphTopology* graphTopology = nullptr; + StaticGraphStatus status = _staticGraph->getGraphTopology(&graphTopology); + + if (status != StaticGraphStatus::SG_OK) { + return StaticGraphStatus::SG_ERROR; + } + + for (int32_t i = 0; i < graphTopology->numOfLinks; i++) + { + auto node = graphTopology->links[i]->destNode; + if (node != nullptr) + { + for (uint32_t j = 0; j < node->nodeKernels.kernelCount; j++) + { + if (node->nodeKernels.kernelList[j].run_kernel.kernel_uuid == kernelUuid) + { + //return &node->nodeKernels.kernelList[j].run_kernel; + coord.nodeInd = i; + coord.kernelInd = j; + return StaticGraphStatus::SG_OK; + } + } + } + } + + return StaticGraphStatus::SG_ERROR; +} + +StaticGraphStatus GraphResolutionConfigurator::initRunKernelCoord(GraphResolutionConfiguratorKernelRole role, RunKernelCoords &coord) +{ + uint32_t kernelUuid = GraphResolutionConfiguratorHelper::getRunKernelUuid(role); + return findRunKernel(kernelUuid, coord); +} + +StaticGraphStatus GraphResolutionConfigurator::initOutputRunKernelCoord(RunKernelCoords& coord) +{ + GraphTopology* graphTopology = nullptr; + StaticGraphStatus status = _staticGraph->getGraphTopology(&graphTopology); + GraphLink** links = graphTopology->links; + + int32_t graphId; + _staticGraph->getGraphId(&graphId); + + HwSink hwSink = HwSink::Disconnected; + + // Try to get output resolution according to priority - first preview then video or stills + std::vector virtualSinks; + virtualSinks.push_back(VirtualSink::PreviewSink); + virtualSinks.push_back(VirtualSink::VideoSink); + virtualSinks.push_back(VirtualSink::StillsSink); + + for (auto virtualSink : virtualSinks) + { + status = _staticGraph->getVirtualSinkConnection(virtualSink, &hwSink); + + if (status != StaticGraphStatus::SG_OK) { + return StaticGraphStatus::SG_ERROR; + } + + if (hwSink != HwSink::Disconnected) + { + // found it + break; + } + } + + if (hwSink == HwSink::Disconnected) + { + return StaticGraphStatus::SG_ERROR; + } + + // Find output device + auto kernelUuid = GraphResolutionConfiguratorHelper::getRunKernelUuidOfOutput(hwSink, graphId, links); + return findRunKernel(kernelUuid, coord); +} + +StaticGraphStatus GraphResolutionConfigurator::initKernelCoordsForUpdate() +{ + std::vector kernelUuids; + + GraphResolutionConfiguratorHelper::getRunKernelUuidForResHistoryUpdate(kernelUuids); + + for (auto& kernelUuid : kernelUuids) + { + RunKernelCoords coord; + if (findRunKernel(kernelUuid, coord) == StaticGraphStatus::SG_OK) + { + _kernelsForUpdate.push_back(coord); + } + } + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus GraphResolutionConfigurator::getInputRoiForOutput(const ResolutionRoi& roi, HwSink hwSink, SensorRoi& sensorRoi) +{ + if (_staticGraph == nullptr) + { + return StaticGraphStatus::SG_ERROR; + } + + int32_t graphId; + _staticGraph->getGraphId(&graphId); + + GraphTopology* graphTopology = nullptr; + _staticGraph->getGraphTopology(&graphTopology); + + GraphLink** links = graphTopology->links; + + auto kernelUuid = GraphResolutionConfiguratorHelper::getRunKernelUuidOfOutput(hwSink, graphId, links); + RunKernelCoords coord; + if (findRunKernel(kernelUuid, coord) != StaticGraphStatus::SG_OK) + { + return StaticGraphStatus::SG_ERROR; + } + + auto outputRunKernel = getRunKernel(coord); + + // We want to calculate the scaling ratio without taking any cropping into consideration + double widthIn2OutScale = static_cast(outputRunKernel->resolution_history->input_width - + outputRunKernel->resolution_history->input_crop.left - + outputRunKernel->resolution_history->input_crop.right) / outputRunKernel->resolution_history->output_width; + + double heightIn2OutScale = static_cast(outputRunKernel->resolution_history->input_height - + outputRunKernel->resolution_history->input_crop.top - + outputRunKernel->resolution_history->input_crop.bottom) / outputRunKernel->resolution_history->output_height; + + StaticGraphKernelResCrop outputCropHist = outputRunKernel->resolution_history->input_crop; + StaticGraphKernelResCrop outputCrop = { 0,0,0,0 }; + if (outputRunKernel->resolution_info != nullptr) + { + outputCrop = outputRunKernel->resolution_info->input_crop; + + // Translate crop to sensor units, w/out this kernel's scaling since input crop is done before scaling. + outputCrop.left += static_cast(outputCrop.left * widthIn2OutScale); + outputCrop.right += static_cast(outputCrop.right * widthIn2OutScale); + outputCrop.top += static_cast(outputCrop.top * heightIn2OutScale); + outputCrop.bottom += static_cast(outputCrop.bottom * heightIn2OutScale); + + widthIn2OutScale *= static_cast(outputRunKernel->resolution_info->input_width - + outputRunKernel->resolution_info->input_crop.left - + outputRunKernel->resolution_info->input_crop.right) / outputRunKernel->resolution_info->output_width; + + heightIn2OutScale *= static_cast(outputRunKernel->resolution_info->input_height - + outputRunKernel->resolution_info->input_crop.top - + outputRunKernel->resolution_info->input_crop.bottom) / outputRunKernel->resolution_info->output_height; + } + + // Now remove any scaling done by sensor itself + widthIn2OutScale *= _sensorHorizontalScaling; + heightIn2OutScale *= _sensorVerticalScaling; + + if ((outputCropHist.left < _sensorHorizontalCropLeft) || + (outputCropHist.right < _sensorHorizontalCropRight) || + (outputCropHist.top < _sensorVerticalCropTop) || + (outputCropHist.bottom < _sensorVerticalCropBottom)) { + return StaticGraphStatus::SG_ERROR; + } + + // Translate to ROI on input + sensorRoi.width = GRA_ROUND_UP(static_cast(roi.width * widthIn2OutScale), 2); + sensorRoi.height = GRA_ROUND_UP(static_cast(roi.height * heightIn2OutScale), 2); + sensorRoi.cropLeft = GRA_ROUND_UP(static_cast((roi.left * widthIn2OutScale) + ( (outputCropHist.left - _sensorHorizontalCropLeft) * _sensorHorizontalScaling ) + outputCrop.left), 2); + sensorRoi.cropRight = GRA_ROUND_UP(static_cast((roi.right * widthIn2OutScale) + ( (outputCropHist.right - _sensorHorizontalCropRight) * _sensorHorizontalScaling ) + outputCrop.right), 2); + sensorRoi.cropTop = GRA_ROUND_UP(static_cast((roi.top * heightIn2OutScale) + ( ( outputCropHist.top - _sensorVerticalCropTop) * _sensorVerticalScaling ) + outputCrop.top), 2); + sensorRoi.cropBottom = GRA_ROUND_UP(static_cast((roi.bottom * heightIn2OutScale) + ( ( outputCropHist.bottom - _sensorVerticalCropBottom ) * _sensorVerticalScaling ) + outputCrop.bottom), 2); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus GraphResolutionConfigurator::getStatsRoiFromSensorRoi(const SensorRoi& sensorRoi, ResolutionRoi& statsRoi) +{ + int32_t graphId; + _staticGraph->getGraphId(&graphId); + + GraphTopology* graphTopology = nullptr; + _staticGraph->getGraphTopology(&graphTopology); + + GraphLink** links = graphTopology->links; + + RunKernelCoords coord; + auto kernelUuid = GraphResolutionConfiguratorHelper::getRunKernelUuidOfOutput(HwSink::AeOutSink, graphId, links); + + if (findRunKernel(kernelUuid, coord) != StaticGraphStatus::SG_OK) + { + return StaticGraphStatus::SG_ERROR; + } + + auto aeRunKernel = getRunKernel(coord); + if (aeRunKernel == nullptr) { + return StaticGraphStatus::SG_ERROR; + } + + StaticGraphKernelResCrop aeCropHist = aeRunKernel->resolution_history->input_crop; + + // Compute stat ROI relative to sensor roi + + double widthIn2OutScale = static_cast(aeRunKernel->resolution_history->output_width) / + (aeRunKernel->resolution_history->input_width - aeCropHist.left - aeCropHist.right); + + double heightIn2OutScale = static_cast(aeRunKernel->resolution_history->output_height) / + (aeRunKernel->resolution_history->input_height - aeCropHist.top - aeCropHist.bottom); + + statsRoi.width = GRA_ROUND_UP(static_cast(sensorRoi.width * widthIn2OutScale), 2); + statsRoi.height = GRA_ROUND_UP(static_cast(sensorRoi.height * heightIn2OutScale), 2); + statsRoi.left = GRA_ROUND_UP(static_cast((sensorRoi.cropLeft * widthIn2OutScale) + aeCropHist.left), 2); + statsRoi.right = GRA_ROUND_UP(static_cast((sensorRoi.cropRight * widthIn2OutScale) + aeCropHist.right), 2); + statsRoi.top = GRA_ROUND_UP(static_cast((sensorRoi.cropTop * heightIn2OutScale) + aeCropHist.top), 2); + statsRoi.bottom = GRA_ROUND_UP(static_cast((sensorRoi.cropBottom * heightIn2OutScale) + aeCropHist.bottom), 2); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus GraphResolutionConfigurator::undoSensorCropandScale(SensorRoi& sensor_roi) +{ + sensor_roi.width = GRA_ROUND_UP(static_cast(sensor_roi.width / _sensorHorizontalScaling), 2); + sensor_roi.height = GRA_ROUND_UP(static_cast(sensor_roi.height / _sensorVerticalScaling), 2); + sensor_roi.cropLeft = GRA_ROUND_UP(static_cast((sensor_roi.cropLeft / _sensorHorizontalScaling) + _sensorHorizontalCropLeft), 2); + sensor_roi.cropRight = GRA_ROUND_UP(static_cast((sensor_roi.cropRight / _sensorHorizontalScaling) + _sensorHorizontalCropRight), 2); + sensor_roi.cropTop = GRA_ROUND_UP(static_cast((sensor_roi.cropTop / _sensorVerticalScaling) + _sensorVerticalCropTop), 2); + sensor_roi.cropBottom = GRA_ROUND_UP(static_cast((sensor_roi.cropBottom / _sensorVerticalScaling) + _sensorVerticalCropBottom ), 2); + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus GraphResolutionConfigurator::undoSensorScaleRipAngle(int32_t& rip_angle) +{ + rip_angle = static_cast(round(atan((_sensorHorizontalScaling / _sensorVerticalScaling) * tan(GRA_CONVERT_TO_RADIANS(rip_angle))))); + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus GraphResolutionConfigurator::sensorCropOrScaleExist(bool& sensor_crop_or_scale_exist) +{ + sensor_crop_or_scale_exist = false; + if ((abs(_sensorHorizontalScaling - 1.0F) > 0.01F) || + (abs(_sensorVerticalScaling - 1.0F) > 0.01F) || + (_sensorHorizontalCropLeft > 0) || + (_sensorHorizontalCropRight > 0) || + (_sensorVerticalCropTop > 0) || + (_sensorVerticalCropBottom > 0)) + { + sensor_crop_or_scale_exist = true; + } + + return StaticGraphStatus::SG_OK; +} + +#if SUPPORT_KEY_RESOLUTIONS == 0 +// +// IPU 8 +// + +Ipu8GraphResolutionConfigurator::Ipu8GraphResolutionConfigurator(IStaticGraphConfig* staticGraph) : GraphResolutionConfigurator(staticGraph) +{ + _staticGraph = staticGraph; + if (_staticGraph == nullptr) + { + return; + } + + if (initRunKernel(GraphResolutionConfiguratorKernelRole::DownScaler, _downscalerRunKernel) != StaticGraphStatus::SG_OK || + initRunKernel(GraphResolutionConfiguratorKernelRole::UpScaler, _upscalerRunKernel) != StaticGraphStatus::SG_OK || + initRunKernel(GraphResolutionConfiguratorKernelRole::EspaCropper, _cropperRunKernel) != StaticGraphStatus::SG_OK || + initOutputRunKernel() != StaticGraphStatus::SG_OK || + initKernelsForUpdate() != StaticGraphStatus::SG_OK || + _node == nullptr) + { + _staticGraph = nullptr; + return; + } + + // Find crop steps for zoom using upscaler + uint32_t outputWidth = _upscalerRunKernel->resolution_info->output_width; + uint32_t outputHeight = _upscalerRunKernel->resolution_info->output_height; + + for (_upscalerStepH = 1; _upscalerStepH < outputHeight / 2; _upscalerStepH++) + { + double horStep = static_cast(_upscalerStepH) * outputWidth / 2 / outputHeight; + if (floor((horStep)) == horStep) + { + _upscalerStepW = static_cast(horStep) * 2; + break; + } + } + + _upscalerStepW *= 2; + _upscalerStepH *= 2; + + // Due to upscaler constraints, we should avoid having too many units. + // Number of pixels that cannot be used when upscaling a stripe may be up to ~ 2*units + // For details: https://hsdes.intel.com/appstore/article-one/#/article/15018342122 + // This affects the number of possible zoom steps, but for large resolutions it is OK to enlarge the step + while (outputWidth / _upscalerStepW > 70) + { + _upscalerStepW *= 2; + _upscalerStepH *= 2; + } + + // Save original values for kernels that are being updated + + _originalCropOfDownScaler = _downscalerRunKernel->resolution_info->input_crop; + _originalCropOfUpscaler = _upscalerRunKernel->resolution_info->input_crop; + _originaHistoryOfOutput = _outputRunKernel->resolution_history->input_crop; + + if (_outputRunKernel->resolution_info != nullptr) + { + _originalCropOfOutput = _outputRunKernel->resolution_info->input_crop; + } + + SensorMode* sensorMode = nullptr; + _staticGraph->getSensorMode(&sensorMode); + if (sensorMode == nullptr) + { + _staticGraph = nullptr; + return; + } + + if (sensorMode->horizontalScalingDenominator) + { + _sensorHorizontalScaling = static_cast(sensorMode->horizontalScalingNumerator) / sensorMode->horizontalScalingDenominator; + } + + if (sensorMode->verticalScalingDenominator) + { + _sensorVerticalScaling = static_cast(sensorMode->verticalScalingNumerator) / sensorMode->verticalScalingDenominator; + } + +#if SUPPORT_FRAGMENTS == 1 + + initIsFragments(); + + if (_node != nullptr && _node->GetNumberOfFragments() > 1) + { + _fragmentsConfigurator = new Ipu8FragmentsConfigurator(_staticGraph, _node); + } + +#endif +} + +Ipu8GraphResolutionConfigurator::~Ipu8GraphResolutionConfigurator() +{ + _kernelsForUpdateAfterCropper.clear(); + _kernelsForUpdateAfterUpscaler.clear(); + +#if SUPPORT_FRAGMENTS == 1 + if (_fragmentsConfigurator != nullptr) + { + delete _fragmentsConfigurator; + _fragmentsConfigurator = nullptr; + } + + for (auto& smurfInfo : _smurfKernels) + { + delete smurfInfo; + } + _smurfKernels.clear(); + +#endif +} + +StaticGraphStatus Ipu8GraphResolutionConfigurator::initRunKernel(GraphResolutionConfiguratorKernelRole role, StaticGraphRunKernel*& runKernel) +{ + uint32_t kernelUuid = GraphResolutionConfiguratorHelper::getRunKernelUuid(role); + return initRunKernel(kernelUuid, runKernel); +} + +StaticGraphStatus Ipu8GraphResolutionConfigurator::initRunKernel(uint32_t kernelUuid, StaticGraphRunKernel*& runKernel) +{ + GraphTopology* graphTopology = nullptr; + StaticGraphStatus status = _staticGraph->getGraphTopology(&graphTopology); + + if (status != StaticGraphStatus::SG_OK) { + return StaticGraphStatus::SG_ERROR; + } + + for (int32_t i = 0; i < graphTopology->numOfLinks; i++) + { + auto node = graphTopology->links[i]->destNode; + if (node != nullptr) + { + for (uint32_t j = 0; j < node->nodeKernels.kernelCount; j++) + { + if (node->nodeKernels.kernelList[j].run_kernel.kernel_uuid == kernelUuid) + { + runKernel = &node->nodeKernels.kernelList[j].run_kernel; + if (node->type == NodeTypes::Cb) + { + _node = node; + } + return StaticGraphStatus::SG_OK; + } + } + } + } + + return StaticGraphStatus::SG_ERROR; +} + +StaticGraphStatus Ipu8GraphResolutionConfigurator::initOutputRunKernel() +{ + GraphTopology* graphTopology = nullptr; + StaticGraphStatus status = _staticGraph->getGraphTopology(&graphTopology); + GraphLink** links = graphTopology->links; + + int32_t graphId; + _staticGraph->getGraphId(&graphId); + + HwSink hwSink = HwSink::Disconnected; + + // Try to get output resolution according to priority - first preview then video or stills + std::vector virtualSinks; + virtualSinks.push_back(VirtualSink::PreviewSink); + virtualSinks.push_back(VirtualSink::VideoSink); + virtualSinks.push_back(VirtualSink::StillsSink); + + for (auto virtualSink : virtualSinks) + { + status = _staticGraph->getVirtualSinkConnection(virtualSink, &hwSink); + + if (status != StaticGraphStatus::SG_OK) { + return StaticGraphStatus::SG_ERROR; + } + + if (hwSink != HwSink::Disconnected) + { + // found it + break; + } + } + + if (hwSink == HwSink::Disconnected) + { + return StaticGraphStatus::SG_ERROR; + } + + // Find output device + auto kernelUuid = GraphResolutionConfiguratorHelper::getRunKernelUuidOfOutput(hwSink, graphId, links); + return initRunKernel(kernelUuid, _outputRunKernel); +} + +StaticGraphStatus Ipu8GraphResolutionConfigurator::initKernelsForUpdate() +{ + std::vector kernelUuids; + + GraphResolutionConfiguratorHelper::getRunKernelUuidForResHistoryUpdate(kernelUuids, _cropperRunKernel->kernel_uuid); + + for (auto& kernelUuid : kernelUuids) + { + StaticGraphRunKernel* runKernel; + if (initRunKernel(kernelUuid, runKernel) == StaticGraphStatus::SG_OK) + { + _kernelsForUpdateAfterCropper.push_back(runKernel); + } + } + + GraphResolutionConfiguratorHelper::getRunKernelUuidForResHistoryUpdate(kernelUuids, _upscalerRunKernel->kernel_uuid); + + for (auto& kernelUuid : kernelUuids) + { + StaticGraphRunKernel* runKernel; + if (initRunKernel(kernelUuid, runKernel) == StaticGraphStatus::SG_OK) + { + _kernelsForUpdateAfterUpscaler.push_back(runKernel); + } + } + + std::vector> smurfUuids; + GraphResolutionConfiguratorHelper::getSmurfRunKernelUuid(smurfUuids); + + for (auto& smurfUuid : smurfUuids) + { + StaticGraphRunKernel* runKernel; + StaticGraphRunKernel* deviceRunKernel; + if (initRunKernel(smurfUuid.first, runKernel) == StaticGraphStatus::SG_OK && + initRunKernel(smurfUuid.second, deviceRunKernel) == StaticGraphStatus::SG_OK) + { + SmurfKernelInfo* smurfInfo = new SmurfKernelInfo(); + smurfInfo->_smurfRunKernel = runKernel; + smurfInfo->_deviceRunKernel = deviceRunKernel; + smurfInfo->_originalDeviceCropHistory = deviceRunKernel->resolution_history->input_crop; + smurfInfo->_originalSmurfOutputCrop = runKernel->resolution_info->output_crop; + + _smurfKernels.push_back(smurfInfo); + } + } + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus Ipu8GraphResolutionConfigurator::initIsFragments() +{ + _isFragments = false; + + if (_downscalerRunKernel == nullptr) + { + return StaticGraphStatus::SG_ERROR; + } + +#ifdef STATIC_GRAPH_USE_IA_LEGACY_TYPES + if (_downscalerRunKernel->system_api.size != ((GRA_ROUND_UP(sizeof(SystemApiRecordHeader), 4)) + (sizeof(StaticGraphKernelSystemApiB2iDs1_1)))) + { + // TODO log error + return StaticGraphStatus::SG_ERROR; + } +#endif + + auto systemApiHeader = static_cast(_downscalerRunKernel->system_api.data); + if (systemApiHeader->systemApiUuid != GraphResolutionConfiguratorHelper::getRunKernelDownscalerSystemApiUuid()) + { + // TODO log error + return StaticGraphStatus::SG_ERROR; + } + + StaticGraphKernelSystemApiB2iDs1_1* systemApi = reinterpret_cast + (static_cast(_downscalerRunKernel->system_api.data) + GRA_ROUND_UP(sizeof(SystemApiRecordHeader), 4)); + + _isFragments = systemApi->is_striping; + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus Ipu8GraphResolutionConfigurator::updateStaticGraphConfig(const RegionOfInterest& roi, bool isCenteredZoom) +{ + if (_staticGraph == nullptr) + { + return StaticGraphStatus::SG_ERROR; + } + + // Get ROI in sensor dimensions + + // If zoom is centered, calculate the pan & tilt + RegionOfInterest userRoi = roi; + + if (isCenteredZoom == true) + { + userRoi.panFactor = (1 - userRoi.zoomFactor) / 2; + userRoi.tiltFactor = (1 - userRoi.zoomFactor) / 2; + } + + ResolutionRoi downscalerInputRoi; + if (getDownscalerInputRoi(userRoi, downscalerInputRoi) != StaticGraphStatus::SG_OK) + { + return StaticGraphStatus::SG_ERROR; + } + + // + // Step #2 Dynamic update according to this ROI + // + return updateRunKernelOfScalers(downscalerInputRoi); +} + +StaticGraphStatus Ipu8GraphResolutionConfigurator::getDownscalerInputRoi(const RegionOfInterest& userRoi, ResolutionRoi& downscalerInputRoi) +{ + if (_staticGraph == nullptr) + { + return StaticGraphStatus::SG_ERROR; + } + + if (userRoi.fromInput == true) + { + // Not supported + return StaticGraphStatus::SG_ERROR; + } + + // Use resolution history in case pipe output is not RCB (post processing kernel) + StaticGraphKernelRes* outputRunKernelResolution = _outputRunKernel->resolution_history; + if (_outputRunKernel->resolution_info != nullptr) + { + outputRunKernelResolution = _outputRunKernel->resolution_info; + } + + uint32_t outputLeft = static_cast(outputRunKernelResolution->output_width * userRoi.panFactor); + uint32_t outputRight = static_cast(outputRunKernelResolution->output_width * (1 - userRoi.panFactor - userRoi.zoomFactor)); + uint32_t outputTop = static_cast(outputRunKernelResolution->output_height * userRoi.tiltFactor); + uint32_t outputBottom = static_cast(outputRunKernelResolution->output_height * (1 - userRoi.tiltFactor - userRoi.zoomFactor)); + + // Translate the ROI to input, using res hist of output + ResolutionRoi pipeInputRoi; + + // _widthIn2OutScale and _heightIn2OutScale are relative to pipe input. History is relative to full sensor resolution + double widthHistScale = _widthIn2OutScale / _sensorHorizontalScaling; + double heightHistScale = _heightIn2OutScale / _sensorVerticalScaling; + + pipeInputRoi.left = static_cast(((outputLeft + _originalCropOfOutput.left) * widthHistScale) + _originaHistoryOfOutput.left); + pipeInputRoi.right = static_cast(((outputRight + _originalCropOfOutput.right) * widthHistScale) + _originaHistoryOfOutput.right); + pipeInputRoi.top = static_cast(((outputTop + _originalCropOfOutput.top) * heightHistScale) + _originaHistoryOfOutput.top); + pipeInputRoi.bottom = static_cast(((outputBottom + _originalCropOfOutput.bottom) * heightHistScale) + _originaHistoryOfOutput.bottom); + + // Translate ROI on input to ROI as input to downscaler + double scaleWidth = static_cast(_downscalerRunKernel->resolution_history->input_width + - _downscalerRunKernel->resolution_history->input_crop.left - _downscalerRunKernel->resolution_history->input_crop.right) / + _downscalerRunKernel->resolution_history->output_width; + + double scaleHeight = static_cast(_downscalerRunKernel->resolution_history->input_height + - _downscalerRunKernel->resolution_history->input_crop.top - _downscalerRunKernel->resolution_history->input_crop.bottom) / + _downscalerRunKernel->resolution_history->output_height; + + downscalerInputRoi.left = GRA_ROUND_UP(static_cast((pipeInputRoi.left - _downscalerRunKernel->resolution_history->input_crop.left) / scaleWidth), 2); + downscalerInputRoi.right = GRA_ROUND_UP(static_cast((pipeInputRoi.right - _downscalerRunKernel->resolution_history->input_crop.right) / scaleWidth), 2); + downscalerInputRoi.top = GRA_ROUND_UP(static_cast((pipeInputRoi.top - _downscalerRunKernel->resolution_history->input_crop.top) / scaleHeight), 2); + downscalerInputRoi.bottom = GRA_ROUND_UP(static_cast((pipeInputRoi.bottom - _downscalerRunKernel->resolution_history->input_crop.bottom) / scaleHeight), 2); + + downscalerInputRoi.width = _downscalerRunKernel->resolution_history->output_width - downscalerInputRoi.left - downscalerInputRoi.right; + downscalerInputRoi.height = _downscalerRunKernel->resolution_history->output_height - downscalerInputRoi.top - downscalerInputRoi.bottom; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus Ipu8GraphResolutionConfigurator::updateRunKernelOfScalers(ResolutionRoi& roi) +{ + StaticGraphStatus ret = StaticGraphStatus::SG_OK; + + uint32_t inputWidth = _downscalerRunKernel->resolution_info->input_width; + uint32_t inputHeight = _downscalerRunKernel->resolution_info->input_height; + + uint32_t outputWidthCropper = _cropperRunKernel->resolution_info->output_width; + uint32_t outputHeightCropper = _cropperRunKernel->resolution_info->output_height; + + uint32_t outputWidth = _upscalerRunKernel->resolution_info->output_width; + uint32_t outputHeight = _upscalerRunKernel->resolution_info->output_height; + + StaticGraphKernelResCrop downscalerCropHist = _downscalerRunKernel->resolution_history->input_crop; + + // If ROI is larger than scaler's output resolution - we downscale + if (roi.width >= outputWidth) + { + // Only down scaler is active + uint32_t dsOutputWidth = outputWidth; + uint32_t dsOutputHeight = outputHeight; + + if (updateRunKernelDownScaler(_downscalerRunKernel, roi, dsOutputWidth, dsOutputHeight) != StaticGraphStatus::SG_OK) + { + ret = StaticGraphStatus::SG_ERROR; + } + + if (updateRunKernelCropper(_cropperRunKernel, roi, _downscalerRunKernel->resolution_info, outputWidthCropper, outputHeightCropper) != StaticGraphStatus::SG_OK) + { + ret = StaticGraphStatus::SG_ERROR; + } + + updateRunKernelPassThrough(_upscalerRunKernel, outputWidth, outputHeight); + } + else + { + updateRunKernelPassThrough(_downscalerRunKernel, inputWidth, inputHeight); + + // Configure ESPA crop to output resolution (TNR ROI) + if (updateRunKernelCropper(_cropperRunKernel, roi, _downscalerRunKernel->resolution_info, outputWidthCropper, outputHeightCropper) != StaticGraphStatus::SG_OK) + { + ret = StaticGraphStatus::SG_ERROR; + } + + // Configure upscaler to crop from output resolution to ROI + if (updateRunKernelUpScaler(_upscalerRunKernel, roi, _cropperRunKernel->resolution_info->input_crop, + outputWidthCropper, outputHeightCropper, outputWidth, outputHeight) != StaticGraphStatus::SG_OK) + { + ret = StaticGraphStatus::SG_ERROR; + } + } + + // Update resolution histories according to decisions made above + if (updateRunKernelResolutionHistory(_cropperRunKernel, _downscalerRunKernel) != StaticGraphStatus::SG_OK) + { + ret = StaticGraphStatus::SG_ERROR; + } + + if (updateRunKernelResolutionHistory(_upscalerRunKernel, _cropperRunKernel) != StaticGraphStatus::SG_OK) + { + ret = StaticGraphStatus::SG_ERROR; + } + + // Update resolution history for relevant kernels + for (auto& runKernelForUpdate : _kernelsForUpdateAfterCropper) + { + // We update all histories according to our changes... assuming no more cropping from now on + if (updateRunKernelResolutionHistory(runKernelForUpdate, _cropperRunKernel, false) != StaticGraphStatus::SG_OK) + { + ret = StaticGraphStatus::SG_ERROR; + } + } + + for (auto& runKernelForUpdate : _kernelsForUpdateAfterUpscaler) + { + // We update all histories according to our changes... assuming no more cropping from now on + if (updateRunKernelResolutionHistory(runKernelForUpdate, _upscalerRunKernel, false) != StaticGraphStatus::SG_OK) + { + ret = StaticGraphStatus::SG_ERROR; + } + } + + // After resolution history was updated, re-configure SAP devices to get the correct FOV + // We do not change the sap feeders configuration, only update the crop & scale of smurfs + for (auto& smurfInfo : _smurfKernels) + { + if (updateRunKernelSmurf(smurfInfo) != StaticGraphStatus::SG_OK) + { + ret = StaticGraphStatus::SG_ERROR; + } + } + + if (ret == StaticGraphStatus::SG_OK) + { + ret = SanityCheck(); + } + + if (ret == StaticGraphStatus::SG_OK && _fragmentsConfigurator != nullptr) + { + // Configure fragments according to the new zoomed run kernels information + ret = _fragmentsConfigurator->configureFragments(_smurfKernels); + } + + return ret; +} + +StaticGraphStatus Ipu8GraphResolutionConfigurator::updateRunKernelDownScaler(StaticGraphRunKernel* runKernel, ResolutionRoi& roi, + uint32_t& outputWidth, uint32_t& outputHeight) +{ + StaticGraphStatus ret = StaticGraphStatus::SG_OK; + + if (_isFragments == false) + { + // No fragments, crop to ROI and downscale to output resolution + runKernel->resolution_info->output_width = outputWidth; + runKernel->resolution_info->output_height = outputHeight; + + runKernel->resolution_info->input_crop.left = roi.left; + runKernel->resolution_info->input_crop.right = roi.right; + runKernel->resolution_info->input_crop.top = roi.top; + runKernel->resolution_info->input_crop.bottom = roi.bottom; + } + else + { + // Fragments, leave the crop to espa crop, configure according to desired scale factor + // Since ESPA can only crop, make sure new output sizes are larger or equal to requested sizes + auto resInfo = runKernel->resolution_info; + + // If we have frgments, downscaler cannot perform left cropping + auto scaleFactorW = static_cast(roi.width) / outputWidth; + auto scaleFactorH = static_cast(roi.height) / outputHeight; + auto scaleFactor = std::max(scaleFactorW, scaleFactorH); + + runKernel->resolution_info->input_crop = _originalCropOfDownScaler; + + runKernel->resolution_info->output_width = std::max(outputWidth, + GRA_ROUND_UP(static_cast(ceil(static_cast(resInfo->input_width - resInfo->input_crop.left - resInfo->input_crop.right) / scaleFactor)), 4)); + runKernel->resolution_info->output_height = std::max(outputHeight, + GRA_ROUND_UP(static_cast(ceil(static_cast(resInfo->input_height - resInfo->input_crop.top - resInfo->input_crop.bottom) / scaleFactor)), 2)); + + outputWidth = runKernel->resolution_info->output_width; + outputHeight = runKernel->resolution_info->output_height; + } + + return ret; +} + +StaticGraphStatus Ipu8GraphResolutionConfigurator::updateRunKernelCropper(StaticGraphRunKernel* runKernel, ResolutionRoi& roi, + StaticGraphKernelRes* downscalerResInfo, + uint32_t outputWidth, uint32_t outputHeight) +{ + runKernel->resolution_info->input_width = downscalerResInfo->output_width; + runKernel->resolution_info->input_height = downscalerResInfo->output_height; + + runKernel->resolution_info->output_width = outputWidth; + runKernel->resolution_info->output_height = outputHeight; + + // Configure to crop the required amount. + int32_t totalHorizontalCrop = runKernel->resolution_info->input_width - outputWidth; + + // Now crop to TNR size if any more cropping is required, according to the required ROI + uint32_t cropLeft = roi.left; + uint32_t cropRight = roi.right; + + if (downscalerResInfo->input_crop.right > 0) + { + double scale = static_cast(downscalerResInfo->output_width) / + (downscalerResInfo->input_width - downscalerResInfo->input_crop.left - downscalerResInfo->input_crop.right); + cropRight -= GRA_ROUND_UP(static_cast(downscalerResInfo->input_crop.right * scale), 2); + } + + // Calculate the crop after downscale, relatively to the desired crop before the downscale + cropLeft = (cropLeft + cropRight) == 0 ? 0 : + GRA_ROUND_DOWN(static_cast(GRA_ROUND(static_cast(cropLeft) / (cropLeft + cropRight) * totalHorizontalCrop)), 2); + + runKernel->resolution_info->input_crop.left = cropLeft; + runKernel->resolution_info->input_crop.right = totalHorizontalCrop - cropLeft; + + if (roi.left < static_cast(runKernel->resolution_info->input_crop.left)) + { + runKernel->resolution_info->input_crop.right += (runKernel->resolution_info->input_crop.left - roi.left); + runKernel->resolution_info->input_crop.left = roi.left; + } + if (roi.right < static_cast(runKernel->resolution_info->input_crop.right)) + { + runKernel->resolution_info->input_crop.left += (runKernel->resolution_info->input_crop.right - roi.right); + runKernel->resolution_info->input_crop.right = roi.right; + } + + int32_t totalVerticalCrop = runKernel->resolution_info->input_height - outputHeight; + + // Now crop to TNR size if any more cropping is required, according to the required ROI + uint32_t cropTop = roi.top; + uint32_t cropBottom = roi.bottom; + + if (downscalerResInfo->input_crop.bottom > 0) + { + double scale = static_cast(downscalerResInfo->output_height) / + (downscalerResInfo->input_height - downscalerResInfo->input_crop.top - downscalerResInfo->input_crop.bottom); + cropBottom -= GRA_ROUND_UP(static_cast(downscalerResInfo->input_crop.bottom * scale), 2); + } + + cropTop = (cropTop + cropBottom) == 0 ? 0 : + GRA_ROUND_DOWN(static_cast(GRA_ROUND(static_cast(cropTop) / (cropTop + cropBottom) * totalVerticalCrop)), 2); + + runKernel->resolution_info->input_crop.top = cropTop; + runKernel->resolution_info->input_crop.bottom = totalVerticalCrop - cropTop; + + if (roi.top < static_cast(runKernel->resolution_info->input_crop.top)) + { + runKernel->resolution_info->input_crop.bottom += (runKernel->resolution_info->input_crop.top - roi.top); + runKernel->resolution_info->input_crop.top = roi.top; + } + if (roi.bottom < static_cast(runKernel->resolution_info->input_crop.bottom)) + { + runKernel->resolution_info->input_crop.top += (runKernel->resolution_info->input_crop.bottom - roi.bottom); + runKernel->resolution_info->input_crop.bottom = roi.bottom; + } + +#ifdef STATIC_GRAPH_USE_IA_LEGACY_TYPES + // Update the left crop in striping system api. Currently assuming one stripe + if (runKernel->system_api.size != ((GRA_ROUND_UP(sizeof(SystemApiRecordHeader), 4)) + (sizeof(StaticGraphKernelSystemApiIoBuffer1_4)))) + { + // TODO log error + return StaticGraphStatus::SG_ERROR; + } +#endif + + auto systemApiHeader = static_cast(runKernel->system_api.data); + if (systemApiHeader->systemApiUuid != GraphResolutionConfiguratorHelper::getRunKernelIoBufferSystemApiUuid()) + { + // TODO log error + return StaticGraphStatus::SG_ERROR; + } + + // The following will update the system API for single stripe. In case there are additional stripes system API will + // be configured by FrgamentsConfigurator. + StaticGraphKernelSystemApiIoBuffer1_4* systemApi = reinterpret_cast + (static_cast(runKernel->system_api.data) + GRA_ROUND_UP(sizeof(SystemApiRecordHeader), 4)); + + systemApi->x_output_offset_per_stripe[0] = runKernel->resolution_info->input_crop.left; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus Ipu8GraphResolutionConfigurator::updateRunKernelUpScaler(StaticGraphRunKernel* runKernel, ResolutionRoi& roi, StaticGraphKernelResCrop& cropperKernelCrop, + uint32_t inputWidth, uint32_t inputHeight, uint32_t outputWidth, uint32_t outputHeight) +{ + StaticGraphStatus ret = StaticGraphStatus::SG_OK; + + runKernel->resolution_info->input_width = inputWidth; + runKernel->resolution_info->input_height = inputHeight; + runKernel->resolution_info->output_width = outputWidth; + runKernel->resolution_info->output_height = outputHeight; + + // How much cropping is left for the upscaler to do after the cropper? + uint32_t totalCropW = roi.left + roi.right - cropperKernelCrop.left - cropperKernelCrop.right - _originalCropOfUpscaler.left - _originalCropOfUpscaler.right; + uint32_t totalCropH = roi.top + roi.bottom - cropperKernelCrop.top - cropperKernelCrop.bottom - _originalCropOfUpscaler.top - _originalCropOfUpscaler.bottom; + + // Cropping must be done in units of stepW x stepH. + // How many units of stepW x stepH should we crop? + uint32_t unitsW = GRA_ROUND_DOWN(totalCropW, _upscalerStepW) / _upscalerStepW; + uint32_t unitsH = GRA_ROUND_DOWN(totalCropH, _upscalerStepH) / _upscalerStepH; + + uint32_t units = unitsW < unitsH ? unitsW : unitsH; + + uint32_t actualCropW = units * _upscalerStepW; + uint32_t actualCropH = units * _upscalerStepH; + + uint32_t deltaLeft = GRA_ROUND_DOWN((totalCropW - actualCropW) / 2, 2); + uint32_t deltaRight = totalCropW - actualCropW - deltaLeft; + uint32_t deltaTop = GRA_ROUND_DOWN((totalCropH - actualCropH) / 2, 2); + uint32_t deltaBottom = totalCropH - actualCropH - deltaTop; + + runKernel->resolution_info->input_crop.left = roi.left - cropperKernelCrop.left - deltaLeft; + runKernel->resolution_info->input_crop.right = roi.right - cropperKernelCrop.right - deltaRight; + runKernel->resolution_info->input_crop.top = roi.top - cropperKernelCrop.top - deltaTop; + runKernel->resolution_info->input_crop.bottom = roi.bottom - cropperKernelCrop.bottom - deltaBottom; + + if (runKernel->resolution_info->input_crop.left < 0) + { + runKernel->resolution_info->input_crop.right += runKernel->resolution_info->input_crop.left; + runKernel->resolution_info->input_crop.left = 0; + } + if (runKernel->resolution_info->input_crop.right < 0) + { + runKernel->resolution_info->input_crop.left += runKernel->resolution_info->input_crop.right; + runKernel->resolution_info->input_crop.right = 0; + } + if (runKernel->resolution_info->input_crop.top < 0) + { + runKernel->resolution_info->input_crop.bottom += runKernel->resolution_info->input_crop.top; + runKernel->resolution_info->input_crop.top = 0; + } + if (runKernel->resolution_info->input_crop.bottom < 0) + { + runKernel->resolution_info->input_crop.top += runKernel->resolution_info->input_crop.bottom; + runKernel->resolution_info->input_crop.bottom = 0; + } + + return ret; +} + +StaticGraphStatus Ipu8GraphResolutionConfigurator::updateRunKernelSmurf(SmurfKernelInfo* smurfInfo) +{ + StaticGraphStatus ret = StaticGraphStatus::SG_OK; + + auto resInfo = smurfInfo->_smurfRunKernel->resolution_info; + if (resInfo->input_width == 0 || resInfo->input_height == 0) + { + return StaticGraphStatus::SG_OK; + } + + // We need to update smurf's output crop according to device's new crop history + StaticGraphKernelRes* deviceResHist = smurfInfo->_deviceRunKernel->resolution_history; + StaticGraphKernelResCrop newCrop; + newCrop.left = deviceResHist->input_crop.left - smurfInfo->_originalDeviceCropHistory.left; + newCrop.right = deviceResHist->input_crop.right - smurfInfo->_originalDeviceCropHistory.right; + newCrop.top = deviceResHist->input_crop.top - smurfInfo->_originalDeviceCropHistory.top; + newCrop.bottom = deviceResHist->input_crop.bottom - smurfInfo->_originalDeviceCropHistory.bottom; + + // Now calculate how much is left for the smurf to crop + // Translate from history units to device units + double newInputToDeviceFactor = static_cast(deviceResHist->input_width - deviceResHist->input_crop.left - deviceResHist->input_crop.right) / + deviceResHist->output_width; + + // Now translate from history units to smurf output (device) + newCrop.left = static_cast(newCrop.left / newInputToDeviceFactor); + newCrop.right = static_cast(newCrop.right / newInputToDeviceFactor); + newCrop.top = static_cast(newCrop.top / newInputToDeviceFactor); + newCrop.bottom = static_cast(newCrop.bottom / newInputToDeviceFactor); + + smurfInfo->_smurfRunKernel->resolution_info->output_crop.left = smurfInfo->_originalSmurfOutputCrop.left + newCrop.left; + smurfInfo->_smurfRunKernel->resolution_info->output_crop.right = smurfInfo->_originalSmurfOutputCrop.right + newCrop.right; + smurfInfo->_smurfRunKernel->resolution_info->output_crop.top = smurfInfo->_originalSmurfOutputCrop.top + newCrop.top; + smurfInfo->_smurfRunKernel->resolution_info->output_crop.bottom = smurfInfo->_originalSmurfOutputCrop.bottom + newCrop.bottom; + + return ret; +} + +StaticGraphStatus Ipu8GraphResolutionConfigurator::SanityCheck() +{ + // Resolution hist output must be same as info input + if (_downscalerRunKernel->resolution_info->input_width != _downscalerRunKernel->resolution_history->output_width || + _downscalerRunKernel->resolution_info->input_height != _downscalerRunKernel->resolution_history->output_height || + + _upscalerRunKernel->resolution_info->input_width != _upscalerRunKernel->resolution_history->output_width || + _upscalerRunKernel->resolution_info->input_height != _upscalerRunKernel->resolution_history->output_height || + + _cropperRunKernel->resolution_info->input_width != _cropperRunKernel->resolution_history->output_width || + _cropperRunKernel->resolution_info->input_height != _cropperRunKernel->resolution_history->output_height) + { + return StaticGraphStatus::SG_ERROR; + } + + // Resolution consistency + if (_downscalerRunKernel->resolution_info->output_width != _cropperRunKernel->resolution_info->input_width || + _downscalerRunKernel->resolution_info->output_height != _cropperRunKernel->resolution_info->input_height || + + _cropperRunKernel->resolution_info->output_width != _upscalerRunKernel->resolution_info->input_width || + _cropperRunKernel->resolution_info->output_height != _upscalerRunKernel->resolution_info->input_height) + { + return StaticGraphStatus::SG_ERROR; + } + + // Cropping values + + if (SanityCheckCrop(&_downscalerRunKernel->resolution_info->input_crop) == StaticGraphStatus::SG_ERROR || + SanityCheckCrop(&_upscalerRunKernel->resolution_info->input_crop) == StaticGraphStatus::SG_ERROR || + SanityCheckCrop(&_cropperRunKernel->resolution_info->input_crop) == StaticGraphStatus::SG_ERROR) + { + return StaticGraphStatus::SG_ERROR; + } + + // Make sure DS is actually down scaling + int32_t widthAfterCrop = _downscalerRunKernel->resolution_info->input_width - _downscalerRunKernel->resolution_info->input_crop.left - _downscalerRunKernel->resolution_info->input_crop.right; + int32_t heightAfterCrop = _downscalerRunKernel->resolution_info->input_height - _downscalerRunKernel->resolution_info->input_crop.top - _downscalerRunKernel->resolution_info->input_crop.bottom; + + if (widthAfterCrop < 0 || widthAfterCrop < _downscalerRunKernel->resolution_info->output_width || + heightAfterCrop < 0 || heightAfterCrop < _downscalerRunKernel->resolution_info->output_height || + static_cast(widthAfterCrop) / _downscalerRunKernel->resolution_info->output_width > 16) + { + return StaticGraphStatus::SG_ERROR; + } + + // Make sure US is actually up scaling + widthAfterCrop = _upscalerRunKernel->resolution_info->input_width - _upscalerRunKernel->resolution_info->input_crop.left - _upscalerRunKernel->resolution_info->input_crop.right; + heightAfterCrop = _upscalerRunKernel->resolution_info->input_height - _upscalerRunKernel->resolution_info->input_crop.top - _upscalerRunKernel->resolution_info->input_crop.bottom; + + if (widthAfterCrop < 0 || widthAfterCrop > _upscalerRunKernel->resolution_info->output_width || + heightAfterCrop < 0 || heightAfterCrop > _upscalerRunKernel->resolution_info->output_height || + static_cast(_upscalerRunKernel->resolution_history->output_width) / widthAfterCrop > 16) + { + return StaticGraphStatus::SG_ERROR; + } + + // Validate upscaler scale ratio constraints + if (static_cast(widthAfterCrop) / _upscalerRunKernel->resolution_info->output_width != + static_cast(heightAfterCrop) / _upscalerRunKernel->resolution_info->output_height) + { + return StaticGraphStatus::SG_ERROR; + } + + // Make sure cropper is actually cropping + widthAfterCrop = _cropperRunKernel->resolution_info->input_width - _cropperRunKernel->resolution_info->input_crop.left - _cropperRunKernel->resolution_info->input_crop.right; + heightAfterCrop = _cropperRunKernel->resolution_info->input_height - _cropperRunKernel->resolution_info->input_crop.top - _cropperRunKernel->resolution_info->input_crop.bottom; + + if (widthAfterCrop < 0 || widthAfterCrop != _cropperRunKernel->resolution_info->output_width || + heightAfterCrop < 0 || heightAfterCrop != _cropperRunKernel->resolution_info->output_height) + { + return StaticGraphStatus::SG_ERROR; + } + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus Ipu8GraphResolutionConfigurator::SanityCheckCrop(StaticGraphKernelResCrop* crop) +{ + if (crop->top < 0 || crop->bottom < 0 || crop->left < 0 || crop->right < 0 || + crop->top & 1 || crop->bottom & 1 || crop->left & 1 || crop->right & 1) + { + return StaticGraphStatus::SG_ERROR; + } + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus Ipu8GraphResolutionConfigurator::getInputRoiForOutput(const ResolutionRoi& roi, HwSink hwSink, SensorRoi& sensorRoi) +{ + if (_staticGraph == nullptr) + { + return StaticGraphStatus::SG_ERROR; + } + + int32_t graphId; + _staticGraph->getGraphId(&graphId); + + GraphTopology* graphTopology = nullptr; + _staticGraph->getGraphTopology(&graphTopology); + + GraphLink** links = graphTopology->links; + + auto kernelUuid = GraphResolutionConfiguratorHelper::getRunKernelUuidOfOutput(hwSink, graphId, links); + + StaticGraphRunKernel* outputRunKernel; + if (initRunKernel(kernelUuid, outputRunKernel) != StaticGraphStatus::SG_OK) + { + return StaticGraphStatus::SG_ERROR; + } + + // We want to calculate the scaling ratio without taking any cropping into consideration + double widthIn2OutScale = static_cast(outputRunKernel->resolution_history->input_width - + outputRunKernel->resolution_history->input_crop.left - + outputRunKernel->resolution_history->input_crop.right) / outputRunKernel->resolution_history->output_width; + + double heightIn2OutScale = static_cast(outputRunKernel->resolution_history->input_height - + outputRunKernel->resolution_history->input_crop.top - + outputRunKernel->resolution_history->input_crop.bottom) / outputRunKernel->resolution_history->output_height; + + StaticGraphKernelResCrop outputCropHist = outputRunKernel->resolution_history->input_crop; + StaticGraphKernelResCrop outputCrop = { 0,0,0,0 }; + if (outputRunKernel->resolution_info != nullptr) + { + outputCrop = outputRunKernel->resolution_info->input_crop; + + // Translate crop to sensor units, w/out this kernel's scaling since input crop is done before scaling. + outputCrop.left += static_cast(outputCrop.left * widthIn2OutScale); + outputCrop.right += static_cast(outputCrop.right * widthIn2OutScale); + outputCrop.top += static_cast(outputCrop.top * heightIn2OutScale); + outputCrop.bottom += static_cast(outputCrop.bottom * heightIn2OutScale); + + widthIn2OutScale *= static_cast(outputRunKernel->resolution_info->input_width - + outputRunKernel->resolution_info->input_crop.left - + outputRunKernel->resolution_info->input_crop.right) / outputRunKernel->resolution_info->output_width; + + heightIn2OutScale *= static_cast(outputRunKernel->resolution_info->input_height - + outputRunKernel->resolution_info->input_crop.top - + outputRunKernel->resolution_info->input_crop.bottom) / outputRunKernel->resolution_info->output_height; + } + + // Now remove any scaling done by sensor itself + widthIn2OutScale *= _sensorHorizontalScaling; + heightIn2OutScale *= _sensorVerticalScaling; + + if ((outputCropHist.left < _sensorHorizontalCropLeft) || + (outputCropHist.right < _sensorHorizontalCropRight) || + (outputCropHist.top < _sensorVerticalCropTop) || + (outputCropHist.bottom < _sensorVerticalCropBottom)) { + return StaticGraphStatus::SG_ERROR; + } + + // Translate to ROI on input + sensorRoi.width = GRA_ROUND_UP(static_cast(roi.width * widthIn2OutScale), 2); + sensorRoi.height = GRA_ROUND_UP(static_cast(roi.height * heightIn2OutScale), 2); + sensorRoi.cropLeft = GRA_ROUND_UP(static_cast((roi.left * widthIn2OutScale) + ((outputCropHist.left - _sensorHorizontalCropLeft) * _sensorHorizontalScaling) + outputCrop.left), 2); + sensorRoi.cropRight = GRA_ROUND_UP(static_cast((roi.right * widthIn2OutScale) + ((outputCropHist.right - _sensorHorizontalCropRight) * _sensorHorizontalScaling) + outputCrop.right), 2); + sensorRoi.cropTop = GRA_ROUND_UP(static_cast((roi.top * heightIn2OutScale) + ((outputCropHist.top - _sensorVerticalCropTop) * _sensorVerticalScaling) + outputCrop.top), 2); + sensorRoi.cropBottom = GRA_ROUND_UP(static_cast((roi.bottom * heightIn2OutScale) + ((outputCropHist.bottom - _sensorVerticalCropBottom) * _sensorVerticalScaling) + outputCrop.bottom), 2); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus Ipu8GraphResolutionConfigurator::getStatsRoiFromSensorRoi(const SensorRoi& sensorRoi, ResolutionRoi& statsRoi) +{ + int32_t graphId; + _staticGraph->getGraphId(&graphId); + + GraphTopology* graphTopology = nullptr; + _staticGraph->getGraphTopology(&graphTopology); + + GraphLink** links = graphTopology->links; + + auto kernelUuid = GraphResolutionConfiguratorHelper::getRunKernelUuidOfOutput(HwSink::AeOutSink, graphId, links); + StaticGraphRunKernel* aeRunKernel; + if (initRunKernel(kernelUuid, aeRunKernel) != StaticGraphStatus::SG_OK) + { + return StaticGraphStatus::SG_ERROR; + } + + StaticGraphKernelResCrop aeCropHist = aeRunKernel->resolution_history->input_crop; + + // Compute stat ROI relative to sensor roi + + double widthIn2OutScale = static_cast(aeRunKernel->resolution_history->output_width) / + (aeRunKernel->resolution_history->input_width - aeCropHist.left - aeCropHist.right); + + double heightIn2OutScale = static_cast(aeRunKernel->resolution_history->output_height) / + (aeRunKernel->resolution_history->input_height - aeCropHist.top - aeCropHist.bottom); + + statsRoi.width = GRA_ROUND_UP(static_cast(sensorRoi.width * widthIn2OutScale), 2); + statsRoi.height = GRA_ROUND_UP(static_cast(sensorRoi.height * heightIn2OutScale), 2); + statsRoi.left = GRA_ROUND_UP(static_cast((sensorRoi.cropLeft * widthIn2OutScale) + aeCropHist.left), 2); + statsRoi.right = GRA_ROUND_UP(static_cast((sensorRoi.cropRight * widthIn2OutScale) + aeCropHist.right), 2); + statsRoi.top = GRA_ROUND_UP(static_cast((sensorRoi.cropTop * heightIn2OutScale) + aeCropHist.top), 2); + statsRoi.bottom = GRA_ROUND_UP(static_cast((sensorRoi.cropBottom * heightIn2OutScale) + aeCropHist.bottom), 2); + + return StaticGraphStatus::SG_OK; +} + +#endif \ No newline at end of file diff --git a/modules/ipu_desc/ipu8/GraphResolutionConfigurator.h b/modules/ipu_desc/ipu8/GraphResolutionConfigurator.h new file mode 100644 index 0000000..171828a --- /dev/null +++ b/modules/ipu_desc/ipu8/GraphResolutionConfigurator.h @@ -0,0 +1,243 @@ +/* +* INTEL CONFIDENTIAL +* Copyright (c) 2022 Intel Corporation +* All Rights Reserved. +* +* The source code contained or described herein and all documents related to +* the source code ("Material") are owned by Intel Corporation or its +* suppliers or licensors. Title to the Material remains with Intel +* Corporation or its suppliers and licensors. The Material may contain trade +* secrets and proprietary and confidential information of Intel Corporation +* and its suppliers and licensors, and is protected by worldwide copyright +* and trade secret laws and treaty provisions. No part of the Material may be +* used, copied, reproduced, modified, published, uploaded, posted, +* transmitted, distributed, or disclosed in any way without Intel's prior +* express written permission. +* +* No license under any patent, copyright, trade secret or other intellectual +* property right is granted to or conferred upon you by disclosure or +* delivery of the Materials, either expressly, by implication, inducement, +* estoppel or otherwise. Any license under such intellectual property rights +* must be express and approved by Intel in writing. +* +* Unless otherwise agreed by Intel in writing, you may not remove or alter +* this notice or any other notice embedded in Materials by Intel or Intels +* suppliers or licensors in any way. +*/ +#pragma once +#include +#include +#include + +#define _USE_MATH_DEFINES +#define GRA_ROUND_UP(a,b) (((a) + ((b)-1)) / (b) * (b)) +#define GRA_ROUND_DOWN(a,b) ((a) / (b) * (b)) +#define GRA_ROUND(a) (((double)(a) > 0.0) ? floor((double)(a) + 0.5) : ceil((double)(a) - 0.5)) + +// ROI in user level +class RegionOfInterest +{ +public: + double zoomFactor; + double panFactor; + double tiltFactor; + + // If true, take factors relative to sensor image + // (needed for WFOV face tracking for example) + bool fromInput; +}; + +// ROI translated to sensor resolution +// sensor width = crop.left + width + crop.right +// sensor height = crop.top + height + crop.bottom +class SensorRoi +{ +public: + uint32_t width; // ROI width + uint32_t height; // ROI height + uint32_t cropLeft; // Crop from sensor width to ROI left + uint32_t cropRight; // Crop from sensor width from ROI right + uint32_t cropTop; // Crop from sensor height to ROI top + uint32_t cropBottom; // Crop from sensor height from ROI bottom +}; + +class ResolutionRoi +{ +public: + uint32_t width; // ROI width + uint32_t height; // ROI height + uint32_t left; // ROI left point + uint32_t right; // ROI right point + uint32_t top; // ROI top point + uint32_t bottom; // ROI bottom point +}; + +enum class GraphResolutionConfiguratorKernelRole : uint8_t +{ + UpScaler, + DownScaler, + EspaCropper, + NonRcb, + Output, + TnrOutput, + TnrScaler, + TnrFeederFull, + TnrFeederSmall, + Smurf, + SmurfFeeder, + None +}; + +class RunKernelCoords +{ +public: + RunKernelCoords() + { + nodeInd = 0; + kernelInd = 0; + } + uint32_t nodeInd; + uint32_t kernelInd; +}; + +class GraphResolutionConfigurator +{ +public: + GraphResolutionConfigurator(IStaticGraphConfig* staticGraph); + ~GraphResolutionConfigurator() + { + _kernelsForUpdate.clear(); + } + + StaticGraphStatus updateStaticGraphConfig(const RegionOfInterest& roi, + const RegionOfInterest& prevRoi, + bool isCenteredZoom, + bool prevIsCenteredZoom, + bool& isKeyResolutionChanged); + // Calculate ROI in sensor dimensions. User ROI is given relative to *full* output ROI + StaticGraphStatus getSensorRoi(const RegionOfInterest& userRoi, SensorRoi& sensorRoi); + // Calculate ROI in sensor dimensions. Resolution ROI is given relative to *final* (zoomed) output ROI + StaticGraphStatus getInputRoiForOutput(const ResolutionRoi& roi, const HwSink hwSink, SensorRoi& sensorRoi); + + // Calculate ROI in sensor dimensions. Resolution ROI is given relative to *final* (zoomed) output ROI + // This function is used for statistics output only + StaticGraphStatus getStatsRoiFromSensorRoi(const SensorRoi& sensorRoi, ResolutionRoi& statsRoi); + StaticGraphStatus undoSensorCropandScale(SensorRoi& sensor_roi); + StaticGraphStatus sensorCropOrScaleExist(bool& sensor_crop_or_scale_exist); + StaticGraphStatus undoSensorScaleRipAngle(int32_t& rip_angle); + + static const int SCALE_PREC = 16; +protected: + StaticGraphStatus updateRunKernelPassThrough(StaticGraphRunKernel* runKernel, uint32_t width, uint32_t height); + StaticGraphStatus updateRunKernelResolutionHistory(StaticGraphRunKernel* runKernel, StaticGraphRunKernel* prevRunKernel, bool updateResolution = true); + + IStaticGraphConfig* _staticGraph; + double _widthIn2OutScale = 1; + double _heightIn2OutScale = 1; + + double _sensorHorizontalScaling = 1.0; + double _sensorVerticalScaling = 1.0; + size_t _sensorHorizontalCropLeft; + size_t _sensorHorizontalCropRight; + size_t _sensorVerticalCropTop; + size_t _sensorVerticalCropBottom; + +private: + StaticGraphStatus initRunKernelCoord(GraphResolutionConfiguratorKernelRole role, RunKernelCoords& coord); + StaticGraphStatus initOutputRunKernelCoord(RunKernelCoords& coord); + StaticGraphStatus initKernelCoordsForUpdate(); + StaticGraphStatus findRunKernel(uint32_t kernelUuid, RunKernelCoords& coord); + + StaticGraphRunKernel* getRunKernel(RunKernelCoords& coord); +#if SUPPORT_KEY_RESOLUTIONS == 1 + StaticGraphStatus getZoomKeyResolutionIndex(ZoomKeyResolutions* zoomKeyResolutions, SensorRoi sensorRoi, uint32_t& selectedIndex); +#endif + StaticGraphStatus updateRunKernelOfScalers(bool fromInput, SensorRoi& roi); + + StaticGraphStatus updateRunKernelDownScaler(StaticGraphRunKernel* runKernel, SensorRoi& roi, uint32_t inputWidth, uint32_t inputHeight, + uint32_t outputWidth, uint32_t outputHeight, StaticGraphKernelResCrop* originalScalerCrop); + StaticGraphStatus adjustDownscalerCrop(StaticGraphKernelRes* scalerResInfo); + StaticGraphStatus updateRunKernelUpScaler(StaticGraphRunKernel* runKernel, uint32_t inputWidth, uint32_t inputHeight, + uint32_t outputWidth, uint32_t outputHeight, uint32_t& upscalerActualInputWidth, uint32_t& upscalerActualInputHeight, + uint32_t& upscalerActualOutputWidth, uint32_t& upscalerActualOutputHeight); + StaticGraphStatus updateRunKernelFinalCropper(StaticGraphRunKernel* runKernel, uint32_t inputWidth, uint32_t inputHeight, + uint32_t outputWidth, uint32_t outputHeight); + StaticGraphStatus updateCroppingScaler(StaticGraphRunKernel* downscalerRunKernel, StaticGraphRunKernel* upscalerRunKernel); + + RunKernelCoords _downscalerRunKernelCoord; + RunKernelCoords _upscalerRunKernelCoord; + RunKernelCoords _cropperRunKernelCoord; + RunKernelCoords _outputRunKernelCoord; + std::vector _kernelsForUpdate; + + StaticGraphKernelResCrop _originalCropOfFinalCropper = { 0,0,0,0 }; + StaticGraphKernelResCrop _originalCropInputToScaler = {0,0,0,0}; + StaticGraphKernelResCrop _originalCropScalerToOutput = { 0,0,0,0 }; +}; + +class Ipu8FragmentsConfigurator; + +class SmurfKernelInfo +{ +public: + StaticGraphRunKernel* _smurfRunKernel; + StaticGraphRunKernel* _deviceRunKernel; + StaticGraphKernelResCrop _originalDeviceCropHistory = { 0,0,0,0 }; + StaticGraphKernelResCrop _originalSmurfOutputCrop = { 0,0,0,0 }; +}; + +class Ipu8GraphResolutionConfigurator : public GraphResolutionConfigurator +{ +public: + Ipu8GraphResolutionConfigurator(IStaticGraphConfig* staticGraph); + ~Ipu8GraphResolutionConfigurator(); + + StaticGraphStatus updateStaticGraphConfig(const RegionOfInterest& roi, bool isCenteredZoom); + + virtual StaticGraphStatus getInputRoiForOutput(const ResolutionRoi& roi, const HwSink hwSink, SensorRoi& sensorRoi); + + // Calculate ROI in sensor dimensions. Resolution ROI is given relative to *final* (zoomed) output ROI + // This function is used for statistics output only + virtual StaticGraphStatus getStatsRoiFromSensorRoi(const SensorRoi& sensorRoi, ResolutionRoi& statsRoi); + +private: + StaticGraphStatus initRunKernel(GraphResolutionConfiguratorKernelRole role, StaticGraphRunKernel*& runKernel); + StaticGraphStatus initRunKernel(uint32_t kernelUuid, StaticGraphRunKernel*& runKernel); + StaticGraphStatus initOutputRunKernel(); + StaticGraphStatus initKernelsForUpdate(); + StaticGraphStatus initIsFragments(); + + // Calculate ROI in dimensions of pipe downscaler input. + StaticGraphStatus getDownscalerInputRoi(const RegionOfInterest& userRoi, ResolutionRoi& pipeInputRoi); + + StaticGraphStatus updateRunKernelOfScalers(ResolutionRoi& roi); + + StaticGraphStatus updateRunKernelDownScaler(StaticGraphRunKernel* runKernel, ResolutionRoi& roi, uint32_t& outputWidth, uint32_t& outputHeight); + StaticGraphStatus updateRunKernelUpScaler(StaticGraphRunKernel* runKernel, ResolutionRoi& roi, StaticGraphKernelResCrop& cropperKernelCrop, uint32_t inputWidth, uint32_t inputHeight, uint32_t outputWidth, uint32_t outputHeight); + StaticGraphStatus updateRunKernelCropper(StaticGraphRunKernel* runKernel, ResolutionRoi& roi, StaticGraphKernelRes* downscalerResInfo, uint32_t outputWidth, uint32_t outputHeight); + StaticGraphStatus updateRunKernelSmurf(SmurfKernelInfo* smurfInfo); + + StaticGraphStatus SanityCheck(); + StaticGraphStatus SanityCheckCrop(StaticGraphKernelResCrop* crop); + + uint32_t _upscalerStepW = 1; + uint32_t _upscalerStepH = 1; + + StaticGraphKernelResCrop _originalCropOfDownScaler = { 0,0,0,0 }; + StaticGraphKernelResCrop _originalCropOfUpscaler = { 0,0,0,0 }; + StaticGraphKernelResCrop _originalCropOfOutput = { 0,0,0,0 }; + StaticGraphKernelResCrop _originaHistoryOfOutput = { 0,0,0,0 }; + + StaticGraphRunKernel* _downscalerRunKernel; + StaticGraphRunKernel* _cropperRunKernel; + StaticGraphRunKernel* _upscalerRunKernel; + StaticGraphRunKernel* _outputRunKernel; + std::vector _kernelsForUpdateAfterCropper; + std::vector _kernelsForUpdateAfterUpscaler; + std::vector _smurfKernels; + + // For striping + OuterNode* _node = nullptr; + Ipu8FragmentsConfigurator* _fragmentsConfigurator = nullptr; + bool _isFragments = false; +}; diff --git a/modules/ipu_desc/ipu8/GraphResolutionConfiguratorAutogen.cpp b/modules/ipu_desc/ipu8/GraphResolutionConfiguratorAutogen.cpp new file mode 100644 index 0000000..3142dfa --- /dev/null +++ b/modules/ipu_desc/ipu8/GraphResolutionConfiguratorAutogen.cpp @@ -0,0 +1,131 @@ +/* + * Copyright (C) 2025 Intel Corporation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "GraphResolutionConfiguratorAutogen.h" + +uint32_t GraphResolutionConfiguratorHelper::getRunKernelUuid( + GraphResolutionConfiguratorKernelRole role) { + switch (role) { + case GraphResolutionConfiguratorKernelRole::UpScaler: + return 28787; // image_upscaler_1_1 + case GraphResolutionConfiguratorKernelRole::DownScaler: + return 40299; // b2i_ds_1_1 + case GraphResolutionConfiguratorKernelRole::EspaCropper: + return 65466; // lbff_crop_espa_1_4 + } + + return 0; +} + +uint32_t GraphResolutionConfiguratorHelper::getRunKernelUuidOfOutput(HwSink hwSink, int32_t graphId, + GraphLink** links) { + (void)graphId; + (void)links; + + switch (hwSink) { + case HwSink::ImageMpSink: + return 16460; // odr_ofs_mp_1_4 + case HwSink::ImageDpSink: + return 37951; // odr_ofs_dp_1_4 + case HwSink::ProcessedMainSink: + switch (graphId) { + case 100001: // Bayer_NoPdaf_WithDvs_NoTnr + case 100003: // Bayer_NoPdaf_WithDvs_WithTnr + case 100080: // Bayer_NoPdaf_WithGdc_WithTnr + case 100081: // Bayer_NoPdaf_WithGdc_WithDvs_WithTnr + case 100005: // Bayer_WithPdaf2_WithDvs_NoTnr + case 100007: // Bayer_WithPdaf2_WithDvs_WithTnr + case 100009: // Bayer_WithPdaf3_WithDvs_NoTnr + case 100011: // Bayer_WithPdaf3_WithDvs_WithTnr + case 100013: // Dol2Inputs_WithDvs_NoTnr + case 100015: // Dol2Inputs_WithDvs_WithTnr + case 100017: // Dol3Inputs_NoBurst_WithDvs_NoTnr + case 100019: // Dol3Inputs_NoBurst_WithDvs_WithTnr + case 100021: // RgbIr_WithDvs_NoTnr + case 100023: // RgbIr_WithDvs_WithTnr + case 100040: // Mipi_WithDvs + case 100041: // Mipi_WithDvs_WithTnr + case 100028: // Ir_WithDvs_NoTnr + case 100030: // Ir_WithDvs_WithTnr + case 100032: // Bayer_WithPdaf3asPdaf2_WithDvs_NoTnr + case 100034: // Bayer_WithPdaf3asPdaf2_WithDvs_WithTnr + case 100101: // Bayer_NoPdaf_WithDvs_NoTnr_WithSap + case 100103: // Bayer_NoPdaf_WithDvs_WithTnr_WithSap + case 100105: // Bayer_WithPdaf2_WithDvs_NoTnr_WithSap + case 100107: // Bayer_WithPdaf2_WithDvs_WithTnr_WithSap + case 100109: // Bayer_WithPdaf3_WithDvs_NoTnr_WithSap + case 100111: // Bayer_WithPdaf3_WithDvs_WithTnr_WithSap + case 100113: // Dol2Inputs_WithDvs_NoTnr_WithSap + case 100115: // Dol2Inputs_WithDvs_WithTnr_WithSap + case 100117: // Dol3Inputs_NoBurst_WithDvs_NoTnr_WithSap + case 100119: // Dol3Inputs_NoBurst_WithDvs_WithTnr_WithSap + case 100121: // RgbIr_WithDvs_NoTnr_WithSap + case 100123: // RgbIr_WithDvs_WithTnr_WithSap + case 100128: // Ir_WithDvs_NoTnr_WithSap + case 100130: // Ir_WithDvs_WithTnr_WithSap + case 100132: // Bayer_WithPdaf3asPdaf2_WithDvs_NoTnr_WithSap + case 100134: // Bayer_WithPdaf3asPdaf2_WithDvs_WithTnr_WithSap + return 5637; // gdc7_1 + case 100079: // Bayer_NoPdaf_WithNntm_WithTnr + case 100045: // Bayer_WithPdaf3_WithNntm_WithTnr + case 100012: // Dol2Inputs_NoGmv_NoTnr + case 100014: // Dol2Inputs_NoGmv_WithTnr + case 100016: // Dol3Inputs_NoBurst_NoGmv_NoTnr + case 100018: // Dol3Inputs_NoBurst_NoGmv_WithTnr + return 46539; // nntm_1_0 + } + break; + case HwSink::ProcessedSecondarySink: + return 19706; // sw_scaler + case HwSink::AeOutSink: + return 55073; // aestatistics_2_1 + default: + return 0; + } + + return 0; +} + +StaticGraphStatus GraphResolutionConfiguratorHelper::getRunKernelUuidForResHistoryUpdate( + std::vector& kernelUuids, uint32_t startUuid) { + kernelUuids.clear(); + + // Must take only one from each resolution history index, since in static graph they all share + // the same resolution history instance + if (startUuid == 65466) // ESPA Crop + { + kernelUuids.push_back(40280); // gmv_statistics_1_1 + kernelUuids.push_back(7416); // odr_gmv_feature_1_4 + kernelUuids.push_back(41148); // odr_gmv_match_1_4 + kernelUuids.push_back(2495); // tnr7_spatial_1_1 + kernelUuids.push_back(20119); // tnr7_blend_1_1 + kernelUuids.push_back(65437); // odr_tnr_scale_fp_yuv4n_1_4 + kernelUuids.push_back(23639); // tnr7_ims_1_2 + kernelUuids.push_back(1502); // tnr7_bc_1_2 + } else if (startUuid == 28787) // Upscaler + { + kernelUuids.push_back(9385); // cas_1_1 + kernelUuids.push_back(37951); // odr_ofs_dp_1_4 + kernelUuids.push_back(5637); // gdc7_1 + kernelUuids.push_back(46539); // nntm_1_0 + kernelUuids.push_back(19706); // sw_scaler + } + return StaticGraphStatus::SG_OK; +} + +uint32_t GraphResolutionConfiguratorHelper::getRunKernelIoBufferSystemApiUuid() { + return 47417; +} diff --git a/modules/ipu_desc/ipu8/GraphResolutionConfiguratorAutogen.h b/modules/ipu_desc/ipu8/GraphResolutionConfiguratorAutogen.h new file mode 100644 index 0000000..c934e28 --- /dev/null +++ b/modules/ipu_desc/ipu8/GraphResolutionConfiguratorAutogen.h @@ -0,0 +1,33 @@ +/* + * Copyright (C) 2025 Intel Corporation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#pragma once +#include + +#include "GraphResolutionConfigurator.h" +#include "StaticGraphAutogen.h" +#include "StaticGraphTypesAutogen.h" + +class GraphResolutionConfiguratorHelper { + public: + GraphResolutionConfiguratorHelper(); + + static uint32_t getRunKernelUuid(GraphResolutionConfiguratorKernelRole role); + static uint32_t getRunKernelUuidOfOutput(HwSink hwSink, int32_t graphId, GraphLink** links); + static StaticGraphStatus getRunKernelUuidForResHistoryUpdate(std::vector& kernelUuids, + uint32_t startUuid = 0); + static uint32_t getRunKernelIoBufferSystemApiUuid(); +}; diff --git a/modules/ipu_desc/ipu8/GraphResolutionConfiguratorInclude.h b/modules/ipu_desc/ipu8/GraphResolutionConfiguratorInclude.h new file mode 100644 index 0000000..1eceba9 --- /dev/null +++ b/modules/ipu_desc/ipu8/GraphResolutionConfiguratorInclude.h @@ -0,0 +1,46 @@ +/* +* INTEL CONFIDENTIAL +* Copyright (c) 2022 Intel Corporation +* All Rights Reserved. +* +* The source code contained or described herein and all documents related to +* the source code ("Material") are owned by Intel Corporation or its +* suppliers or licensors. Title to the Material remains with Intel +* Corporation or its suppliers and licensors. The Material may contain trade +* secrets and proprietary and confidential information of Intel Corporation +* and its suppliers and licensors, and is protected by worldwide copyright +* and trade secret laws and treaty provisions. No part of the Material may be +* used, copied, reproduced, modified, published, uploaded, posted, +* transmitted, distributed, or disclosed in any way without Intel's prior +* express written permission. +* +* No license under any patent, copyright, trade secret or other intellectual +* property right is granted to or conferred upon you by disclosure or +* delivery of the Materials, either expressly, by implication, inducement, +* estoppel or otherwise. Any license under such intellectual property rights +* must be express and approved by Intel in writing. +* +* Unless otherwise agreed by Intel in writing, you may not remove or alter +* this notice or any other notice embedded in Materials by Intel or Intels +* suppliers or licensors in any way. +*/ +#pragma once +#include + +#if defined(GRC_IPU7X) +#include "Ipu7xStaticGraphAutogen.h" +#include "Ipu7xStaticGraphTypesAutogen.h" +#include "Ipu7xGraphResolutionConfiguratorAutogen.h" +#elif defined(GRC_IPU75XA) +#include "Ipu75xaStaticGraphAutogen.h" +#include "Ipu75xaStaticGraphTypesAutogen.h" +#include "Ipu75xaGraphResolutionConfiguratorAutogen.h" +#elif defined(GRC_IPU8) +#include "Ipu8StaticGraphAutogen.h" +#include "Ipu8StaticGraphTypesAutogen.h" +#include "Ipu8GraphResolutionConfiguratorAutogen.h" +#else +#include "StaticGraphAutogen.h" +#include "StaticGraphTypesAutogen.h" +#include "GraphResolutionConfiguratorAutogen.h" +#endif diff --git a/modules/ipu_desc/ipu8/Ipu8GraphResolutionConfiguratorAutogen.cpp b/modules/ipu_desc/ipu8/Ipu8GraphResolutionConfiguratorAutogen.cpp new file mode 100644 index 0000000..13d96a4 --- /dev/null +++ b/modules/ipu_desc/ipu8/Ipu8GraphResolutionConfiguratorAutogen.cpp @@ -0,0 +1,286 @@ +/* +* INTEL CONFIDENTIAL +* Copyright (c) 2026 Intel Corporation +* All Rights Reserved. +* +* The source code contained or described herein and all documents related to +* the source code ("Material") are owned by Intel Corporation or its +* suppliers or licensors. Title to the Material remains with Intel +* Corporation or its suppliers and licensors. The Material may contain trade +* secrets and proprietary and confidential information of Intel Corporation +* and its suppliers and licensors, and is protected by worldwide copyright +* and trade secret laws and treaty provisions. No part of the Material may be +* used, copied, reproduced, modified, published, uploaded, posted, +* transmitted, distributed, or disclosed in any way without Intel's prior +* express written permission. +* +* No license under any patent, copyright, trade secret or other intellectual +* property right is granted to or conferred upon you by disclosure or +* delivery of the Materials, either expressly, by implication, inducement, +* estoppel or otherwise. Any license under such intellectual property rights +* must be express and approved by Intel in writing. +* +* Unless otherwise agreed by Intel in writing, you may not remove or alter +* this notice or any other notice embedded in Materials by Intel or Intels +* suppliers or licensors in any way. +*/ + +#include "Ipu8GraphResolutionConfiguratorAutogen.h" + +uint32_t GraphResolutionConfiguratorHelper::getRunKernelUuid(GraphResolutionConfiguratorKernelRole role) +{ + switch (role) + { + case GraphResolutionConfiguratorKernelRole::UpScaler: return 28787; // image_upscaler_1_1 + case GraphResolutionConfiguratorKernelRole::DownScaler: return 40299; // b2i_ds_1_1 + case GraphResolutionConfiguratorKernelRole::EspaCropper: return 65466; // lbff_crop_espa_1_4 + } + + return 0; +} + +uint32_t GraphResolutionConfiguratorHelper::getRunKernelUuidOfOutput(HwSink hwSink, int32_t graphId, GraphLink** links) +{ + (void)graphId; + (void)links; + + switch (hwSink) + { + case HwSink::ImageMpSink: return 16460; // odr_ofs_mp_1_4 + case HwSink::ImageDpSink: return 37951; // odr_ofs_dp_1_4 + case HwSink::ProcessedMainSink: + switch(graphId) + { + case 100001: // Bayer_NoPdaf_WithDvs_NoTnr + case 100003: // Bayer_NoPdaf_WithDvs_WithTnr + case 100137: // Bayer_NoPdaf_WithDvs_WithTnr_WithSap_WithGdc + case 100080: // Bayer_NoPdaf_WithGdc_WithTnr + case 100138: // Bayer_NoPdaf_WithGdc_WithTnr_WithSap + case 100142: // Bayer_WithPdaf2_WithGdc_WithTnr_WithSap + case 100143: // Bayer_WithPdaf3_WithGdc_WithTnr_WithSap + case 100144: // Bayer_WithPdaf3asPdaf2_WithGdc_WithTnr_WithSap + case 100081: // Bayer_NoPdaf_WithGdc_WithDvs_WithTnr + case 100005: // Bayer_WithPdaf2_WithDvs_NoTnr + case 100007: // Bayer_WithPdaf2_WithDvs_WithTnr + case 100139: // Bayer_WithPdaf2_WithDvs_WithTnr_WithSap_WithGdc + case 100009: // Bayer_WithPdaf3_WithDvs_NoTnr + case 100011: // Bayer_WithPdaf3_WithDvs_WithTnr + case 100140: // Bayer_WithPdaf3_WithDvs_WithTnr_WithSap_WithGdc + case 100013: // Dol2Inputs_WithDvs_NoTnr + case 100015: // Dol2Inputs_WithDvs_WithTnr + case 100017: // Dol3Inputs_NoBurst_WithDvs_NoTnr + case 100019: // Dol3Inputs_NoBurst_WithDvs_WithTnr + case 100021: // RgbIr_WithDvs_NoTnr + case 100023: // RgbIr_WithDvs_WithTnr + case 100040: // Mipi_WithDvs + case 100041: // Mipi_WithDvs_WithTnr + case 100028: // Ir_WithDvs_NoTnr + case 100030: // Ir_WithDvs_WithTnr + case 100032: // Bayer_WithPdaf3asPdaf2_WithDvs_NoTnr + case 100034: // Bayer_WithPdaf3asPdaf2_WithDvs_WithTnr + case 100141: // Bayer_WithPdaf3asPdaf2_WithDvs_WithTnr_WithSap_WithGdc + case 100101: // Bayer_NoPdaf_WithDvs_NoTnr_WithSap + case 100103: // Bayer_NoPdaf_WithDvs_WithTnr_WithSap + case 100105: // Bayer_WithPdaf2_WithDvs_NoTnr_WithSap + case 100107: // Bayer_WithPdaf2_WithDvs_WithTnr_WithSap + case 100109: // Bayer_WithPdaf3_WithDvs_NoTnr_WithSap + case 100111: // Bayer_WithPdaf3_WithDvs_WithTnr_WithSap + case 100113: // Dol2Inputs_WithDvs_NoTnr_WithSap + case 100146: // Dol2Inputs_NoGmv_WithTnr_WithSap_WithGdc + case 100115: // Dol2Inputs_WithDvs_WithTnr_WithSap + case 100117: // Dol3Inputs_NoBurst_WithDvs_NoTnr_WithSap + case 100119: // Dol3Inputs_NoBurst_WithDvs_WithTnr_WithSap + case 100121: // RgbIr_WithDvs_NoTnr_WithSap + case 100123: // RgbIr_WithDvs_WithTnr_WithSap + case 100128: // Ir_WithDvs_NoTnr_WithSap + case 100130: // Ir_WithDvs_WithTnr_WithSap + case 100132: // Bayer_WithPdaf3asPdaf2_WithDvs_NoTnr_WithSap + case 100134: // Bayer_WithPdaf3asPdaf2_WithDvs_WithTnr_WithSap + case 100236: // Bayer_NoPdaf_WithDvs_NoTnr + case 100203: // Bayer_NoPdaf_WithDvs_WithTnr + case 100280: // Bayer_NoPdaf_WithGdc_WithTnr + case 100281: // Bayer_NoPdaf_WithGdc_WithDvs_WithTnr + case 100205: // Bayer_WithPdaf2_WithDvs_NoTnr + case 100207: // Bayer_WithPdaf2_WithDvs_WithTnr + case 100209: // Bayer_WithPdaf3_WithDvs_NoTnr + case 100211: // Bayer_WithPdaf3_WithDvs_WithTnr + case 100213: // Dol2Inputs_WithDvs_NoTnr + case 100215: // Dol2Inputs_WithDvs_WithTnr + case 100217: // Dol3Inputs_NoBurst_WithDvs_NoTnr + case 100219: // Dol3Inputs_NoBurst_WithDvs_WithTnr + case 100221: // RgbIr_WithDvs_NoTnr + case 100223: // RgbIr_WithDvs_WithTnr + case 100240: // Mipi_WithDvs + case 100241: // Mipi_WithDvs_WithTnr + case 100228: // Ir_WithDvs_NoTnr + case 100230: // Ir_WithDvs_WithTnr + case 100232: // Bayer_WithPdaf3asPdaf2_WithDvs_NoTnr + case 100234: // Bayer_WithPdaf3asPdaf2_WithDvs_WithTnr + return 5637; // gdc7_1 + case 100079: // Bayer_NoPdaf_WithNntm_WithTnr + case 100066: // Bayer_WithPdaf2_NoGmv_WithTnr_WithNntm + case 100067: // Bayer_WithPdaf2_WithDvs_WithTnr_WithNntm + case 100045: // Bayer_WithPdaf3_WithNntm_WithTnr + case 100012: // Dol2Inputs_NoGmv_NoTnr + case 100014: // Dol2Inputs_NoGmv_WithTnr + case 100016: // Dol3Inputs_NoBurst_NoGmv_NoTnr + case 100018: // Dol3Inputs_NoBurst_NoGmv_WithTnr + case 100135: // Bayer_NoPdaf_WithNntm_WithTnr_WithSap + case 100166: // Bayer_WithPdaf2_NoGmv_WithTnr_WithSap_WithNntm + case 100145: // Bayer_WithPdaf2_WithDvs_WithTnr_WithSap_WithNntm + case 100136: // Bayer_WithPdaf3_WithNntm_WithTnr_WithSap + case 100200: // Bayer_WithPdaf3asPdaf2_WithNntm_WithTnr_WithSap + case 100201: // Bayer_WithPdaf3asPdaf2_WithNntm_WithTnr_NoSap + case 100114: // Dol2Inputs_NoGmv_WithTnr_WithSap + case 100279: // Bayer_NoPdaf_WithNntm_WithTnr + case 100266: // Bayer_WithPdaf2_NoGmv_WithTnr_WithNntm + case 100267: // Bayer_WithPdaf2_WithDvs_WithTnr_WithNntm + case 100245: // Bayer_WithPdaf3_WithNntm_WithTnr + case 100212: // Dol2Inputs_NoGmv_NoTnr + case 100214: // Dol2Inputs_NoGmv_WithTnr + case 100216: // Dol3Inputs_NoBurst_NoGmv_NoTnr + case 100218: // Dol3Inputs_NoBurst_NoGmv_WithTnr + return 46539; // nntm_1_0 + } + break; + case HwSink::ProcessedSecondarySink: return 19706; // sw_scaler + case HwSink::AeOutSink: return 55073; // aestatistics_2_1 + } + + return 0; +} + +StaticGraphStatus GraphResolutionConfiguratorHelper::getRunKernelUuidForResHistoryUpdate(std::vector& kernelUuids, uint32_t startUuid) +{ + kernelUuids.clear(); + + // Must take only one from each resolution history index, since in static graph they all share the same + // resolution history instance + if (startUuid == 0) + { + return StaticGraphStatus::SG_ERROR; + } + + if (startUuid == 65466) // ESPA Crop + { + kernelUuids.push_back(40280); // gmv_statistics_1_1 + kernelUuids.push_back(7416); // odr_gmv_feature_1_4 + kernelUuids.push_back(41148); // odr_gmv_match_1_4 + kernelUuids.push_back(2495); // tnr7_spatial_1_1 + kernelUuids.push_back(20119); // tnr7_blend_1_1 + kernelUuids.push_back(65437); // odr_tnr_scale_fp_yuv4n_1_4 + kernelUuids.push_back(23639); // tnr7_ims_1_2 + kernelUuids.push_back(1502); // tnr7_bc_1_2 + } + else if (startUuid == 28787) // Upscaler + { + kernelUuids.push_back(9385); // cas_1_1 + kernelUuids.push_back(37951); // odr_ofs_dp_1_4 + kernelUuids.push_back(5637); // gdc7_1 + kernelUuids.push_back(19706); // sw_scaler + kernelUuids.push_back(46539); // nntm_1_0 + } + return StaticGraphStatus::SG_OK; +} + +uint32_t GraphResolutionConfiguratorHelper::getRunKernelIoBufferSystemApiUuid() +{ + return 47417; +} + +uint32_t GraphResolutionConfiguratorHelper::getRunKernelDownscalerSystemApiUuid() +{ + return 2102; +} + +GraphResolutionConfiguratorKernelRole GraphResolutionConfiguratorHelper::getKernelRole(uint32_t kernelUuid) +{ + switch (kernelUuid) + { + case 28787 : return GraphResolutionConfiguratorKernelRole::UpScaler; // image_upscaler_1_1 + case 40299 : return GraphResolutionConfiguratorKernelRole::DownScaler; // b2i_ds_1_1 + case 50136 : return GraphResolutionConfiguratorKernelRole::DownScaler; // b2i_ds_output_1_1 + case 65466 : return GraphResolutionConfiguratorKernelRole::EspaCropper; // lbff_crop_espa_1_4 + case 9385 : return GraphResolutionConfiguratorKernelRole::NonRcb; // cas_1_1 + case 16460 : return GraphResolutionConfiguratorKernelRole::Output; // odr_ofs_mp_1_4 + case 37951 : return GraphResolutionConfiguratorKernelRole::Output; // odr_ofs_dp_1_4 + case 63731 : return GraphResolutionConfiguratorKernelRole::TnrOutput; // odr_tnr_sp_bc_rs4n_1_4 + case 5215 : return GraphResolutionConfiguratorKernelRole::TnrOutput; // odr_tnr_fp_yuvn_1_4 + case 65437 : return GraphResolutionConfiguratorKernelRole::TnrOutput; // odr_tnr_scale_fp_yuv4n_1_4 + case 29996 : return GraphResolutionConfiguratorKernelRole::TnrScaler; // tnr_scaler_lb_1_1 + case 20623 : return GraphResolutionConfiguratorKernelRole::TnrScaler; // tnr_scaler_fp_1_1 + case 16295 : return GraphResolutionConfiguratorKernelRole::TnrFeederFull; // ifd_tnr_fp_blend_yuvnm1_1_4 + case 7357 : return GraphResolutionConfiguratorKernelRole::TnrFeederSmall; // ifd_tnr_sp_bc_yuv4nm1_1_4 + case 62054 : return GraphResolutionConfiguratorKernelRole::TnrFeederSmall; // ifd_tnr_sp_bc_rs4nm1_1_4 + case 23639 : return GraphResolutionConfiguratorKernelRole::NonRcb; // tnr7_ims_1_2 + case 1502 : return GraphResolutionConfiguratorKernelRole::NonRcb; // tnr7_bc_1_2 + case 2495 : return GraphResolutionConfiguratorKernelRole::NonRcb; // tnr7_spatial_1_1 + case 20119 : return GraphResolutionConfiguratorKernelRole::NonRcb; // tnr7_blend_1_1 + case 13101 : return GraphResolutionConfiguratorKernelRole::Smurf; // smurf_tnr_bc_1_0 + case 42749 : return GraphResolutionConfiguratorKernelRole::Smurf; // smurf_tnr_blend_1_0 + case 37468 : return GraphResolutionConfiguratorKernelRole::Smurf; // smurf_cas_1_0 + case 35263 : return GraphResolutionConfiguratorKernelRole::SmurfFeeder; // ifd_segmap_bnlm_1_4 + case 9241 : return GraphResolutionConfiguratorKernelRole::SmurfFeeder; // ifd_segmap_xnr_1_4 + case 51914 : return GraphResolutionConfiguratorKernelRole::SmurfFeeder; // ifd_segmap_acm_1_4 + case 47873 : return GraphResolutionConfiguratorKernelRole::SmurfFeeder; // ifd_segmap_tnr_bc_1_4 + case 14619 : return GraphResolutionConfiguratorKernelRole::SmurfFeeder; // ifd_segmap_tnr_blend_1_4 + case 20893 : return GraphResolutionConfiguratorKernelRole::SmurfFeeder; // ifd_segmap_cas_1_4 + + default: return GraphResolutionConfiguratorKernelRole::None; + } +} + +uint32_t GraphResolutionConfiguratorHelper::getReferenceKernel(uint32_t kernelUuid) +{ + switch (kernelUuid) + { + case 29996 : return 65466; // tnr_scaler_lb_1_1 from lbff_crop_espa_1_4 + case 20623 : return 65466; // tnr_scaler_fp_1_1 from lbff_crop_espa_1_4 + case 28787 : return 65466; // image_upscaler_1_1 from lbff_crop_espa_1_4 + case 50136 : return 9385; // b2i_ds_output_1_1 from cas_1_1 + case 65437 : return 20623; // odr_tnr_scale_fp_yuv4n_1_4 from tnr_scaler_fp_1_1 + case 30019 : return 54721; // xnr_5_4 from gltm_2_0 + case 17531 : return 36029; // acm_1_2 from glim_2_0 + case 1502 : return 23639; // tnr7_bc_1_2 from tnr7_ims_1_2 + case 20119 : return 16295; // tnr7_blend_1_1 from ifd_tnr_fp_blend_yuvnm1_1_4 + case 9385 : return 28787; // cas_1_1 from image_upscaler_1_1 + } + + return 0; +} + +FormatType GraphResolutionConfiguratorHelper::getFormatForDrainer(uint32_t kernelUuid) +{ + switch (kernelUuid) + { + case 16460 : return FormatType::YUV420_8_SP_P; // odr_ofs_mp_1_4 + case 37951 : return FormatType::YUV420_8_SP_P; // odr_ofs_dp_1_4 + case 63731 : return FormatType::META_8; // odr_tnr_sp_bc_rs4n_1_4 + case 5215 : return FormatType::YUV420_8_SP_P; // odr_tnr_fp_yuvn_1_4 HERE WE ASSUME NV12 OUTPUT! + case 65437 : return FormatType::YUV420_8_SP_P; // odr_tnr_scale_fp_yuv4n_1_4 + } + + return FormatType::YUV420_8_SP_P; +} + +StaticGraphStatus GraphResolutionConfiguratorHelper::getSmurfRunKernelUuid(std::vector>& kernelUuids) +{ + kernelUuids.clear(); + + std::pair smurfPair; + + smurfPair.first = 13101; // Smurf smurf_tnr_bc_1_0 + smurfPair.second = 1502; // Connected To tnr7_bc_1_2 + kernelUuids.push_back(smurfPair); + + smurfPair.first = 42749; // Smurf smurf_tnr_blend_1_0 + smurfPair.second = 20119; // Connected To tnr7_blend_1_1 + kernelUuids.push_back(smurfPair); + + smurfPair.first = 37468; // Smurf smurf_cas_1_0 + smurfPair.second = 9385; // Connected To cas_1_1 + kernelUuids.push_back(smurfPair); + + return StaticGraphStatus::SG_OK; +} + diff --git a/modules/ipu_desc/ipu8/Ipu8GraphResolutionConfiguratorAutogen.h b/modules/ipu_desc/ipu8/Ipu8GraphResolutionConfiguratorAutogen.h new file mode 100644 index 0000000..725140f --- /dev/null +++ b/modules/ipu_desc/ipu8/Ipu8GraphResolutionConfiguratorAutogen.h @@ -0,0 +1,46 @@ +/* +* INTEL CONFIDENTIAL +* Copyright (c) 2026 Intel Corporation +* All Rights Reserved. +* +* The source code contained or described herein and all documents related to +* the source code ("Material") are owned by Intel Corporation or its +* suppliers or licensors. Title to the Material remains with Intel +* Corporation or its suppliers and licensors. The Material may contain trade +* secrets and proprietary and confidential information of Intel Corporation +* and its suppliers and licensors, and is protected by worldwide copyright +* and trade secret laws and treaty provisions. No part of the Material may be +* used, copied, reproduced, modified, published, uploaded, posted, +* transmitted, distributed, or disclosed in any way without Intel's prior +* express written permission. +* +* No license under any patent, copyright, trade secret or other intellectual +* property right is granted to or conferred upon you by disclosure or +* delivery of the Materials, either expressly, by implication, inducement, +* estoppel or otherwise. Any license under such intellectual property rights +* must be express and approved by Intel in writing. +* +* Unless otherwise agreed by Intel in writing, you may not remove or alter +* this notice or any other notice embedded in Materials by Intel or Intels +* suppliers or licensors in any way. +*/ +#pragma once +#include +#include "Ipu8StaticGraphAutogen.h" +#include "Ipu8StaticGraphTypesAutogen.h" +#include "GraphResolutionConfigurator.h" + +class GraphResolutionConfiguratorHelper +{ +public: + + static uint32_t getRunKernelUuid(GraphResolutionConfiguratorKernelRole role); + static uint32_t getRunKernelUuidOfOutput(HwSink hwSink, int32_t graphId, GraphLink** links); + static StaticGraphStatus getRunKernelUuidForResHistoryUpdate(std::vector& kernelUuids, uint32_t startUuid = 0); + static uint32_t getRunKernelIoBufferSystemApiUuid(); + static uint32_t getRunKernelDownscalerSystemApiUuid(); + static GraphResolutionConfiguratorKernelRole getKernelRole(uint32_t kernelUuid); + static uint32_t getReferenceKernel(uint32_t kernelUuid); + static FormatType getFormatForDrainer(uint32_t kernelUuid); + static StaticGraphStatus getSmurfRunKernelUuid(std::vector>& kernelUuids); +}; diff --git a/modules/ipu_desc/ipu8/Ipu8StaticGraphAutogen.cpp b/modules/ipu_desc/ipu8/Ipu8StaticGraphAutogen.cpp new file mode 100644 index 0000000..0a209c5 --- /dev/null +++ b/modules/ipu_desc/ipu8/Ipu8StaticGraphAutogen.cpp @@ -0,0 +1,76723 @@ +/* +* INTEL CONFIDENTIAL +* Copyright (c) 2026 Intel Corporation +* All Rights Reserved. +* +* The source code contained or described herein and all documents related to +* the source code ("Material") are owned by Intel Corporation or its +* suppliers or licensors. Title to the Material remains with Intel +* Corporation or its suppliers and licensors. The Material may contain trade +* secrets and proprietary and confidential information of Intel Corporation +* and its suppliers and licensors, and is protected by worldwide copyright +* and trade secret laws and treaty provisions. No part of the Material may be +* used, copied, reproduced, modified, published, uploaded, posted, +* transmitted, distributed, or disclosed in any way without Intel's prior +* express written permission. +* +* No license under any patent, copyright, trade secret or other intellectual +* property right is granted to or conferred upon you by disclosure or +* delivery of the Materials, either expressly, by implication, inducement, +* estoppel or otherwise. Any license under such intellectual property rights +* must be express and approved by Intel in writing. +* +* Unless otherwise agreed by Intel in writing, you may not remove or alter +* this notice or any other notice embedded in Materials by Intel or Intels +* suppliers or licensors in any way. +*/ + +#include "Ipu8StaticGraphAutogen.h" +#define CHECK_BITMAP128_BIT(bitmap, index) ((bitmap[(index)/64]) & ((uint64_t)1 << ((index) % 64))) + +/* + * External Interfaces + */ +IStaticGraphConfig::IStaticGraphConfig(SensorMode* selectedSensorMode, VirtualSinkMapping* sinkMappingConfiguration, int32_t graphId, int32_t settingsId) : +_selectedSensorMode(selectedSensorMode), _graphId(graphId), _settingsId(settingsId) +{ + memcpy(_sinkMappingConfiguration, sinkMappingConfiguration, sizeof(VirtualSinkMapping)); +} + +StaticGraphStatus IStaticGraphConfig::getSensorMode(SensorMode** sensorMode) +{ + if (!sensorMode) + { + STATIC_GRAPH_LOG("Sensor mode does not exist for this setting."); + return StaticGraphStatus::SG_OK; + } + *sensorMode = _selectedSensorMode; + return StaticGraphStatus::SG_OK; +}; + +StaticGraphStatus IStaticGraphConfig::getGraphTopology(GraphTopology** topology) +{ + *topology = _selectedGraphTopology; + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus IStaticGraphConfig::getGraphId(int32_t* graphId) +{ + if (graphId == nullptr) + { + return StaticGraphStatus::SG_ERROR; + } + + *graphId = _graphId; + return StaticGraphStatus::SG_OK; +}; + +StaticGraphStatus IStaticGraphConfig::getSettingsId(int32_t* settingsId) +{ + if (settingsId == nullptr) + { + return StaticGraphStatus::SG_ERROR; + } + + *settingsId = _settingsId; + return StaticGraphStatus::SG_OK; +}; + +StaticGraphStatus IStaticGraphConfig::getVirtualSinkConnection(VirtualSink& virtualSink, HwSink* hwSink) +{ + switch (virtualSink) + { + case VirtualSink::PreviewSink: + *hwSink = static_cast(_sinkMappingConfiguration->preview); + break; + case VirtualSink::VideoSink: + *hwSink = static_cast(_sinkMappingConfiguration->video); + break; + case VirtualSink::PostProcessingVideoSink: + *hwSink = static_cast(_sinkMappingConfiguration->postProcessingVideo); + break; + case VirtualSink::StillsSink: + *hwSink = static_cast(_sinkMappingConfiguration->stills); + break; + case VirtualSink::ThumbnailSink: + *hwSink = static_cast(_sinkMappingConfiguration->thumbnail); + break; + case VirtualSink::RawSink: + *hwSink = static_cast(_sinkMappingConfiguration->raw); + break; + case VirtualSink::RawPdafSink: + *hwSink = static_cast(_sinkMappingConfiguration->rawPdaf); + break; + case VirtualSink::RawDolLongSink: + *hwSink = static_cast(_sinkMappingConfiguration->rawDolLong); + break; + case VirtualSink::RawCvSink: + *hwSink = static_cast(_sinkMappingConfiguration->rawCv); + break; + case VirtualSink::VideoIrSink: + *hwSink = static_cast(_sinkMappingConfiguration->videoIr); + break; + case VirtualSink::PreviewIrSink: + *hwSink = static_cast(_sinkMappingConfiguration->previewIr); + break; + default: + STATIC_GRAPH_LOG("Failed to get virtual sink mapping for virtual sink %d", static_cast(virtualSink)); + return StaticGraphStatus::SG_ERROR; + } + + return StaticGraphStatus::SG_OK; +} + +GraphTopology::GraphTopology(GraphLink** links, int32_t numOfLinks, VirtualSinkMapping* sinkMappingConfiguration) : + links(links), numOfLinks(numOfLinks), _sinkMappingConfiguration(sinkMappingConfiguration) {} + +StaticGraphStatus GraphTopology::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + // Default impl. No inner nodes in the sub-graph nodes. + (void)subGraphInnerNodeConfiguration; + return StaticGraphStatus::SG_OK; +}; + +InnerNodeOptionsFlags GraphTopology::GetInnerOptions(SubGraphPublicInnerNodeConfiguration* publicInnerOptions) +{ + InnerNodeOptionsFlags res = None; + + if (publicInnerOptions) + { + res |= no3A & (publicInnerOptions->no3A ? -1 : 0); + res |= noMp & (publicInnerOptions->noMp ? -1 : 0); + res |= noDp & (publicInnerOptions->noDp ? -1 : 0); + res |= noPdaf & (publicInnerOptions->noPdaf ? -1 : 0); + } + + return res; +} + +bool GraphTopology::isLinkVanished(GraphLink* link) +{ + if (link == nullptr) + { + return false; + } + + switch(link->type) + { + case LinkType::Node2Self: + case LinkType::Node2Node: + { + if (link->srcNode == nullptr || link->destNode == nullptr) + { + return false; + } + + uint8_t srcTeb = link->srcTerminalId / 32; + uint8_t srcTebIndex = link->srcTerminalId % 32; + uint8_t destTeb = link->destTerminalId / 32; + uint8_t destTebIndex = link->destTerminalId % 32; + + if (((link->srcNode->bitmaps.teb[srcTeb] & (1 << srcTebIndex)) == 0) && + ((link->destNode->bitmaps.teb[destTeb] & (1 << destTebIndex)) == 0)) + { + return true; + } + + return false; + } + case LinkType::Node2Sink: + { + if (link->srcNode == nullptr) + { + return false; + } + + uint8_t srcTeb = link->srcTerminalId / 32; + uint8_t srcTebIndex = link->srcTerminalId % 32; + + if ((link->srcNode->bitmaps.teb[srcTeb] & (1 << srcTebIndex)) == 0) + { + return true; + } + + return false; + } + case LinkType::Source2Node: + { + if (link->destNode == nullptr) + { + return false; + } + + uint8_t destTeb = link->destTerminalId / 32; + uint8_t destTebIndex = link->destTerminalId % 32; + + if ((link->destNode->bitmaps.teb[destTeb] & (1 << destTebIndex)) == 0) + { + return true; + } + + return false; + } + + } + + return false; +} + +/* + * Outer Nodes + */ + +void OuterNode::Init(uint8_t nodeResourceId, + NodeTypes nodeType, + uint32_t kernelCount, + uint32_t operationMode, + uint32_t streamId, + uint8_t nodeNumberOfFragments) +{ + resourceId = nodeResourceId; + type = nodeType; + nodeKernels.kernelCount = kernelCount; + numberOfFragments = nodeNumberOfFragments; + if (kernelCount > 0) + { + nodeKernels.kernelList = new StaticGraphPacRunKernel[kernelCount]; + for (uint32_t j = 0; j < kernelCount; j++) + { + nodeKernels.kernelList[j].fragment_descs = nullptr; + } + + kernelListInConfigOrder = new uint16_t[kernelCount]; + } + else + { + nodeKernels.kernelList = nullptr; + } + for (uint32_t i = 0; i < 4; ++i) + { + fragmentVanishStatus[i] = VanishOption::Full; + } + + nodeKernels.operationMode = operationMode; + nodeKernels.streamId = streamId; +} +OuterNode::~OuterNode() +{ + delete[] nodeKernels.kernelList; + delete[] kernelListInConfigOrder; +} +void OuterNode::InitRunKernels(uint16_t* kernelsUuids, uint64_t kernelsRcbBitmap[2], StaticGraphKernelRes* resolutionInfos, uint64_t kernelsResolutionHistoryGroupBitmap[2], uint64_t fragmentDescriptorsGroupBitmap[2], StaticGraphKernelRes* resolutionHistories, StaticGraphKernelBppConfiguration* bppInfos, uint8_t* systemApisSizes, uint8_t* systemApiData, KernelFragments* fragmentDescriptors, uint16_t* runKernelConfigOrder) +{ + uint8_t* systemApiDataCurrentPtr = systemApiData; + uint32_t currentResolutionHistoryIndex = 0; + uint32_t currentRcbIndex = 0; + int32_t currentFragmentsDescriptorIndex = -1; + + for (uint32_t i = 0; i < nodeKernels.kernelCount; ++i) + { + auto& runKernel = nodeKernels.kernelList[i].run_kernel; + runKernel.kernel_uuid = kernelsUuids[i]; + runKernel.stream_id = nodeKernels.streamId; + runKernel.enable = 1; + runKernel.output_count = 1; + if (CHECK_BITMAP128_BIT(kernelsRcbBitmap, i)) + { + // RCB + runKernel.resolution_info = &resolutionInfos[currentRcbIndex]; + currentRcbIndex++; + } + else + { + runKernel.resolution_info = nullptr; + } + + if (CHECK_BITMAP128_BIT(kernelsResolutionHistoryGroupBitmap, i)) + { + // Next resolution history group + currentResolutionHistoryIndex++; + } + runKernel.resolution_history = &resolutionHistories[currentResolutionHistoryIndex]; + + runKernel.bpp_info.input_bpp = bppInfos[i].input_bpp; + runKernel.bpp_info.output_bpp = bppInfos[i].output_bpp; + + // system API + uint32_t systemApiSize = systemApisSizes[i]; + runKernel.system_api.size = systemApiSize; + runKernel.system_api.data = systemApiSize != 0 ? systemApiDataCurrentPtr : nullptr; + + if (systemApiDataCurrentPtr) + { + systemApiDataCurrentPtr = systemApiDataCurrentPtr + systemApiSize; + } + + // Metadata + runKernel.metadata[0] = 0; + runKernel.metadata[1] = 0; + runKernel.metadata[2] = 0; + runKernel.metadata[3] = 0; + + // Init fragments information + if (CHECK_BITMAP128_BIT(fragmentDescriptorsGroupBitmap, i)) + { + // New group + currentFragmentsDescriptorIndex++; + } + + nodeKernels.kernelList[i].fragment_descs = &fragmentDescriptors[currentFragmentsDescriptorIndex].fragmentDescriptors[0]; + nodeKernels.kernelList[i].fragments_defined = (numberOfFragments > 0); + + kernelListInConfigOrder[i] = runKernelConfigOrder[i]; + } +} + +void OuterNode::SetDisabledKernels(uint64_t disabledRunKernelsBitmap[2]) +{ + for (uint32_t i = 0; i < nodeKernels.kernelCount; ++i) + { + // check the i'th bit in the bitmap + if (CHECK_BITMAP128_BIT(disabledRunKernelsBitmap, i)) + { + nodeKernels.kernelList[i].run_kernel.enable = 2; // disabled + } + } +} + +uint8_t OuterNode::GetNumberOfFragments() +{ + return numberOfFragments; +} +void OuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Default implementation + (void)vanishStatus; +} + +const uint16_t* OuterNode::getRunKernelConfigOrder() +{ + return kernelListInConfigOrder; +} + +void IsysOuterNode::Init(IsysOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(2, NodeTypes::Isys, 1, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[1] = {11470 /*is_odr_a*/}; + uint64_t kernelsRcbBitmap[] = {0x1, 0x0}; // { is_odr_a[0] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x0, 0x0}; // {{is_odr_a}[0] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x1, 0x0}; // {{is_odr_a}[0] } + uint8_t systemApisSizes[1] = {0 /*is_odr_a*/}; + uint16_t runKernelConfigOrder[1] = {0 /*is_odr_a*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, nullptr, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerNoGmvNoTnrNoSapOuterNode::Init(LbffBayerNoGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 34, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[34] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 14488 /*rgb_ir_2_0*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 28787 /*image_upscaler_1_1*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x3FDF80031, 0x0}; // { ifd_pipe_1_4[0], rgb_ir_2_0[4], ifd_lsc_1_4[5], rgbs_grid_1_1[19], ccm_3a_2_0[20], fr_grid_1_0[21], b2i_ds_1_1[22], lbff_crop_espa_1_4[23], image_upscaler_1_1[24], odr_ofs_mp_1_4[26], b2i_ds_output_1_1[27], odr_ofs_dp_1_4[28], odr_awb_std_1_4[29], odr_awb_sat_1_4[30], aestatistics_2_1[31], odr_ae_1_4[32], odr_af_std_1_4[33] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x3F3800062, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgb_ir_2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[3], {lbff_crop_espa_1_4}[4], {image_upscaler_1_1}[5], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[6], {odr_ofs_dp_1_4}[7], {odr_awb_std_1_4}[8], {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], {odr_ae_1_4}[11], {odr_af_std_1_4}[12] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x3FFF80073, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgb_ir_2_0}[2], {ifd_lsc_1_4}[3], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[4], {rgbs_grid_1_1}[5], {ccm_3a_2_0}[6], {fr_grid_1_0}[7], {b2i_ds_1_1}[8], {lbff_crop_espa_1_4}[9], {image_upscaler_1_1}[10], {cas_1_1}[11], {odr_ofs_mp_1_4}[12], {b2i_ds_output_1_1}[13], {odr_ofs_dp_1_4}[14], {odr_awb_std_1_4}[15], {odr_awb_sat_1_4}[16], {aestatistics_2_1}[17], {odr_ae_1_4}[18], {odr_af_std_1_4}[19] } + uint8_t systemApisSizes[34] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 0 /*rgb_ir_2_0*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*image_upscaler_1_1*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/}; + uint16_t runKernelConfigOrder[34] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 4 /*rgb_ir_2_0*/, 5 /*ifd_lsc_1_4*/, 6 /*lsc_1_2*/, 7 /*gd_2_2*/, 8 /*wb_1_1*/, 9 /*bnlm_3_4*/, 10 /*bxt_demosaic*/, 11 /*vcsc_2_0_b*/, 12 /*gltm_2_0*/, 13 /*xnr_5_4*/, 14 /*vcr_3_1*/, 15 /*glim_2_0*/, 16 /*acm_1_2*/, 17 /*gammatm_v4*/, 18 /*csc_1_1*/, 22 /*b2i_ds_1_1*/, 23 /*lbff_crop_espa_1_4*/, 24 /*image_upscaler_1_1*/, 25 /*cas_1_1*/, 26 /*odr_ofs_mp_1_4*/, 27 /*b2i_ds_output_1_1*/, 28 /*odr_ofs_dp_1_4*/, 19 /*rgbs_grid_1_1*/, 29 /*odr_awb_std_1_4*/, 30 /*odr_awb_sat_1_4*/, 20 /*ccm_3a_2_0*/, 31 /*aestatistics_2_1*/, 32 /*odr_ae_1_4*/, 21 /*fr_grid_1_0*/, 33 /*odr_af_std_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[9].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerWithGmvNoTnrNoSapOuterNode::Init(LbffBayerWithGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 38, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[38] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 14488 /*rgb_ir_2_0*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 28787 /*image_upscaler_1_1*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 51073 /*ifd_gmv_1_4*/, 40280 /*gmv_statistics_1_1*/, 7416 /*odr_gmv_feature_1_4*/, 41148 /*odr_gmv_match_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x3FFDF80031, 0x0}; // { ifd_pipe_1_4[0], rgb_ir_2_0[4], ifd_lsc_1_4[5], rgbs_grid_1_1[19], ccm_3a_2_0[20], fr_grid_1_0[21], b2i_ds_1_1[22], lbff_crop_espa_1_4[23], image_upscaler_1_1[24], odr_ofs_mp_1_4[26], b2i_ds_output_1_1[27], odr_ofs_dp_1_4[28], odr_awb_std_1_4[29], odr_awb_sat_1_4[30], aestatistics_2_1[31], odr_ae_1_4[32], odr_af_std_1_4[33], ifd_gmv_1_4[34], gmv_statistics_1_1[35], odr_gmv_feature_1_4[36], odr_gmv_match_1_4[37] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x3FF3800062, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgb_ir_2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[3], {lbff_crop_espa_1_4}[4], {image_upscaler_1_1}[5], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[6], {odr_ofs_dp_1_4}[7], {odr_awb_std_1_4}[8], {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], {odr_ae_1_4}[11], {odr_af_std_1_4}[12], {ifd_gmv_1_4}[13], {gmv_statistics_1_1}[14], {odr_gmv_feature_1_4}[15], {odr_gmv_match_1_4}[16] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x3FFFF80073, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgb_ir_2_0}[2], {ifd_lsc_1_4}[3], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[4], {rgbs_grid_1_1}[5], {ccm_3a_2_0}[6], {fr_grid_1_0}[7], {b2i_ds_1_1}[8], {lbff_crop_espa_1_4}[9], {image_upscaler_1_1}[10], {cas_1_1}[11], {odr_ofs_mp_1_4}[12], {b2i_ds_output_1_1}[13], {odr_ofs_dp_1_4}[14], {odr_awb_std_1_4}[15], {odr_awb_sat_1_4}[16], {aestatistics_2_1}[17], {odr_ae_1_4}[18], {odr_af_std_1_4}[19], {ifd_gmv_1_4}[20], {gmv_statistics_1_1}[21], {odr_gmv_feature_1_4}[22], {odr_gmv_match_1_4}[23] } + uint8_t systemApisSizes[38] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 0 /*rgb_ir_2_0*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*image_upscaler_1_1*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_gmv_1_4*/, 32 /*gmv_statistics_1_1*/, 220 /*odr_gmv_feature_1_4*/, 220 /*odr_gmv_match_1_4*/}; + uint16_t runKernelConfigOrder[38] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 4 /*rgb_ir_2_0*/, 5 /*ifd_lsc_1_4*/, 6 /*lsc_1_2*/, 7 /*gd_2_2*/, 8 /*wb_1_1*/, 9 /*bnlm_3_4*/, 10 /*bxt_demosaic*/, 11 /*vcsc_2_0_b*/, 12 /*gltm_2_0*/, 13 /*xnr_5_4*/, 14 /*vcr_3_1*/, 15 /*glim_2_0*/, 16 /*acm_1_2*/, 17 /*gammatm_v4*/, 18 /*csc_1_1*/, 22 /*b2i_ds_1_1*/, 23 /*lbff_crop_espa_1_4*/, 24 /*image_upscaler_1_1*/, 25 /*cas_1_1*/, 26 /*odr_ofs_mp_1_4*/, 27 /*b2i_ds_output_1_1*/, 28 /*odr_ofs_dp_1_4*/, 19 /*rgbs_grid_1_1*/, 29 /*odr_awb_std_1_4*/, 30 /*odr_awb_sat_1_4*/, 20 /*ccm_3a_2_0*/, 31 /*aestatistics_2_1*/, 32 /*odr_ae_1_4*/, 21 /*fr_grid_1_0*/, 33 /*odr_af_std_1_4*/, 34 /*ifd_gmv_1_4*/, 35 /*gmv_statistics_1_1*/, 36 /*odr_gmv_feature_1_4*/, 37 /*odr_gmv_match_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[9].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void SwGdcOuterNode::Init(SwGdcOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(4, NodeTypes::Sw, 1, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[1] = {5637 /*gdc7_1*/}; + uint64_t kernelsRcbBitmap[] = {0x1, 0x0}; // { gdc7_1[0] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x0, 0x0}; // {{gdc7_1}[0] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x1, 0x0}; // {{gdc7_1}[0] } + uint8_t systemApisSizes[1] = {0 /*gdc7_1*/}; + uint16_t runKernelConfigOrder[1] = {0 /*gdc7_1*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, nullptr, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerNoGmvWithTnrNoSapOuterNode::Init(LbffBayerNoGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 46, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[46] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 14488 /*rgb_ir_2_0*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 2495 /*tnr7_spatial_1_1*/, 29996 /*tnr_scaler_lb_1_1*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 23639 /*tnr7_ims_1_2*/, 1502 /*tnr7_bc_1_2*/, 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 20119 /*tnr7_blend_1_1*/, 5215 /*odr_tnr_fp_yuvn_1_4*/, 20623 /*tnr_scaler_fp_1_1*/, 28787 /*image_upscaler_1_1*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/, 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x3DD9FEF80031, 0x0}; // { ifd_pipe_1_4[0], rgb_ir_2_0[4], ifd_lsc_1_4[5], rgbs_grid_1_1[19], ccm_3a_2_0[20], fr_grid_1_0[21], b2i_ds_1_1[22], lbff_crop_espa_1_4[23], tnr_scaler_lb_1_1[25], odr_awb_std_1_4[26], odr_awb_sat_1_4[27], aestatistics_2_1[28], odr_ae_1_4[29], odr_af_std_1_4[30], ifd_tnr_sp_bc_yuv4nm1_1_4[31], ifd_tnr_sp_bc_rs4nm1_1_4[32], odr_tnr_sp_bc_rs4n_1_4[35], ifd_tnr_fp_blend_yuvnm1_1_4[36], odr_tnr_fp_yuvn_1_4[38], tnr_scaler_fp_1_1[39], image_upscaler_1_1[40], odr_ofs_mp_1_4[42], b2i_ds_output_1_1[43], odr_ofs_dp_1_4[44], odr_tnr_scale_fp_yuv4n_1_4[45] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x3233FD800062, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgb_ir_2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[3], {lbff_crop_espa_1_4}[4], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[5], {odr_awb_std_1_4}[6], {odr_awb_sat_1_4}[7], {aestatistics_2_1}[8], {odr_ae_1_4}[9], {odr_af_std_1_4}[10], {ifd_tnr_sp_bc_yuv4nm1_1_4}[11], {ifd_tnr_sp_bc_rs4nm1_1_4}[12], {tnr7_ims_1_2, tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[13], {ifd_tnr_fp_blend_yuvnm1_1_4}[14], {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[15], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[16], {odr_ofs_dp_1_4}[17], {odr_tnr_scale_fp_yuv4n_1_4}[18] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x3FFBFFF80073, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgb_ir_2_0}[2], {ifd_lsc_1_4}[3], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[4], {rgbs_grid_1_1}[5], {ccm_3a_2_0}[6], {fr_grid_1_0}[7], {b2i_ds_1_1}[8], {lbff_crop_espa_1_4}[9], {tnr7_spatial_1_1}[10], {tnr_scaler_lb_1_1}[11], {odr_awb_std_1_4}[12], {odr_awb_sat_1_4}[13], {aestatistics_2_1}[14], {odr_ae_1_4}[15], {odr_af_std_1_4}[16], {ifd_tnr_sp_bc_yuv4nm1_1_4}[17], {ifd_tnr_sp_bc_rs4nm1_1_4}[18], {tnr7_ims_1_2, tnr7_bc_1_2}[19], {odr_tnr_sp_bc_rs4n_1_4}[20], {ifd_tnr_fp_blend_yuvnm1_1_4}[21], {tnr7_blend_1_1}[22], {odr_tnr_fp_yuvn_1_4}[23], {tnr_scaler_fp_1_1}[24], {image_upscaler_1_1}[25], {cas_1_1}[26], {odr_ofs_mp_1_4}[27], {b2i_ds_output_1_1}[28], {odr_ofs_dp_1_4}[29], {odr_tnr_scale_fp_yuv4n_1_4}[30] } + uint8_t systemApisSizes[46] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 0 /*rgb_ir_2_0*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*tnr7_spatial_1_1*/, 0 /*tnr_scaler_lb_1_1*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 0 /*tnr7_ims_1_2*/, 5 /*tnr7_bc_1_2*/, 220 /*odr_tnr_sp_bc_rs4n_1_4*/, 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 5 /*tnr7_blend_1_1*/, 220 /*odr_tnr_fp_yuvn_1_4*/, 0 /*tnr_scaler_fp_1_1*/, 0 /*image_upscaler_1_1*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/, 220 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint16_t runKernelConfigOrder[46] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 4 /*rgb_ir_2_0*/, 5 /*ifd_lsc_1_4*/, 6 /*lsc_1_2*/, 7 /*gd_2_2*/, 8 /*wb_1_1*/, 9 /*bnlm_3_4*/, 10 /*bxt_demosaic*/, 11 /*vcsc_2_0_b*/, 12 /*gltm_2_0*/, 13 /*xnr_5_4*/, 14 /*vcr_3_1*/, 15 /*glim_2_0*/, 16 /*acm_1_2*/, 17 /*gammatm_v4*/, 18 /*csc_1_1*/, 22 /*b2i_ds_1_1*/, 23 /*lbff_crop_espa_1_4*/, 24 /*tnr7_spatial_1_1*/, 25 /*tnr_scaler_lb_1_1*/, 19 /*rgbs_grid_1_1*/, 26 /*odr_awb_std_1_4*/, 27 /*odr_awb_sat_1_4*/, 20 /*ccm_3a_2_0*/, 28 /*aestatistics_2_1*/, 29 /*odr_ae_1_4*/, 21 /*fr_grid_1_0*/, 30 /*odr_af_std_1_4*/, 31 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 32 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 33 /*tnr7_ims_1_2*/, 34 /*tnr7_bc_1_2*/, 35 /*odr_tnr_sp_bc_rs4n_1_4*/, 36 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 37 /*tnr7_blend_1_1*/, 40 /*image_upscaler_1_1*/, 41 /*cas_1_1*/, 42 /*odr_ofs_mp_1_4*/, 43 /*b2i_ds_output_1_1*/, 44 /*odr_ofs_dp_1_4*/, 38 /*odr_tnr_fp_yuvn_1_4*/, 39 /*tnr_scaler_fp_1_1*/, 45 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[9].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerWithGmvWithTnrNoSapOuterNode::Init(LbffBayerWithGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 50, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[50] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 14488 /*rgb_ir_2_0*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 2495 /*tnr7_spatial_1_1*/, 29996 /*tnr_scaler_lb_1_1*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 51073 /*ifd_gmv_1_4*/, 40280 /*gmv_statistics_1_1*/, 7416 /*odr_gmv_feature_1_4*/, 41148 /*odr_gmv_match_1_4*/, 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 23639 /*tnr7_ims_1_2*/, 1502 /*tnr7_bc_1_2*/, 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 20119 /*tnr7_blend_1_1*/, 5215 /*odr_tnr_fp_yuvn_1_4*/, 20623 /*tnr_scaler_fp_1_1*/, 28787 /*image_upscaler_1_1*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/, 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x3DD9FFEF80031, 0x0}; // { ifd_pipe_1_4[0], rgb_ir_2_0[4], ifd_lsc_1_4[5], rgbs_grid_1_1[19], ccm_3a_2_0[20], fr_grid_1_0[21], b2i_ds_1_1[22], lbff_crop_espa_1_4[23], tnr_scaler_lb_1_1[25], odr_awb_std_1_4[26], odr_awb_sat_1_4[27], aestatistics_2_1[28], odr_ae_1_4[29], odr_af_std_1_4[30], ifd_gmv_1_4[31], gmv_statistics_1_1[32], odr_gmv_feature_1_4[33], odr_gmv_match_1_4[34], ifd_tnr_sp_bc_yuv4nm1_1_4[35], ifd_tnr_sp_bc_rs4nm1_1_4[36], odr_tnr_sp_bc_rs4n_1_4[39], ifd_tnr_fp_blend_yuvnm1_1_4[40], odr_tnr_fp_yuvn_1_4[42], tnr_scaler_fp_1_1[43], image_upscaler_1_1[44], odr_ofs_mp_1_4[46], b2i_ds_output_1_1[47], odr_ofs_dp_1_4[48], odr_tnr_scale_fp_yuv4n_1_4[49] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x3233FFD800062, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgb_ir_2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[3], {lbff_crop_espa_1_4}[4], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[5], {odr_awb_std_1_4}[6], {odr_awb_sat_1_4}[7], {aestatistics_2_1}[8], {odr_ae_1_4}[9], {odr_af_std_1_4}[10], {ifd_gmv_1_4}[11], {gmv_statistics_1_1}[12], {odr_gmv_feature_1_4}[13], {odr_gmv_match_1_4}[14], {ifd_tnr_sp_bc_yuv4nm1_1_4}[15], {ifd_tnr_sp_bc_rs4nm1_1_4}[16], {tnr7_ims_1_2, tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[17], {ifd_tnr_fp_blend_yuvnm1_1_4}[18], {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[19], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[20], {odr_ofs_dp_1_4}[21], {odr_tnr_scale_fp_yuv4n_1_4}[22] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x3FFBFFFF80073, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgb_ir_2_0}[2], {ifd_lsc_1_4}[3], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[4], {rgbs_grid_1_1}[5], {ccm_3a_2_0}[6], {fr_grid_1_0}[7], {b2i_ds_1_1}[8], {lbff_crop_espa_1_4}[9], {tnr7_spatial_1_1}[10], {tnr_scaler_lb_1_1}[11], {odr_awb_std_1_4}[12], {odr_awb_sat_1_4}[13], {aestatistics_2_1}[14], {odr_ae_1_4}[15], {odr_af_std_1_4}[16], {ifd_gmv_1_4}[17], {gmv_statistics_1_1}[18], {odr_gmv_feature_1_4}[19], {odr_gmv_match_1_4}[20], {ifd_tnr_sp_bc_yuv4nm1_1_4}[21], {ifd_tnr_sp_bc_rs4nm1_1_4}[22], {tnr7_ims_1_2, tnr7_bc_1_2}[23], {odr_tnr_sp_bc_rs4n_1_4}[24], {ifd_tnr_fp_blend_yuvnm1_1_4}[25], {tnr7_blend_1_1}[26], {odr_tnr_fp_yuvn_1_4}[27], {tnr_scaler_fp_1_1}[28], {image_upscaler_1_1}[29], {cas_1_1}[30], {odr_ofs_mp_1_4}[31], {b2i_ds_output_1_1}[32], {odr_ofs_dp_1_4}[33], {odr_tnr_scale_fp_yuv4n_1_4}[34] } + uint8_t systemApisSizes[50] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 0 /*rgb_ir_2_0*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*tnr7_spatial_1_1*/, 0 /*tnr_scaler_lb_1_1*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_gmv_1_4*/, 32 /*gmv_statistics_1_1*/, 220 /*odr_gmv_feature_1_4*/, 220 /*odr_gmv_match_1_4*/, 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 0 /*tnr7_ims_1_2*/, 5 /*tnr7_bc_1_2*/, 220 /*odr_tnr_sp_bc_rs4n_1_4*/, 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 5 /*tnr7_blend_1_1*/, 220 /*odr_tnr_fp_yuvn_1_4*/, 0 /*tnr_scaler_fp_1_1*/, 0 /*image_upscaler_1_1*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/, 220 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint16_t runKernelConfigOrder[50] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 4 /*rgb_ir_2_0*/, 5 /*ifd_lsc_1_4*/, 6 /*lsc_1_2*/, 7 /*gd_2_2*/, 8 /*wb_1_1*/, 9 /*bnlm_3_4*/, 10 /*bxt_demosaic*/, 11 /*vcsc_2_0_b*/, 12 /*gltm_2_0*/, 13 /*xnr_5_4*/, 14 /*vcr_3_1*/, 15 /*glim_2_0*/, 16 /*acm_1_2*/, 17 /*gammatm_v4*/, 18 /*csc_1_1*/, 22 /*b2i_ds_1_1*/, 23 /*lbff_crop_espa_1_4*/, 24 /*tnr7_spatial_1_1*/, 25 /*tnr_scaler_lb_1_1*/, 19 /*rgbs_grid_1_1*/, 26 /*odr_awb_std_1_4*/, 27 /*odr_awb_sat_1_4*/, 20 /*ccm_3a_2_0*/, 28 /*aestatistics_2_1*/, 29 /*odr_ae_1_4*/, 21 /*fr_grid_1_0*/, 30 /*odr_af_std_1_4*/, 31 /*ifd_gmv_1_4*/, 32 /*gmv_statistics_1_1*/, 33 /*odr_gmv_feature_1_4*/, 34 /*odr_gmv_match_1_4*/, 35 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 36 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 37 /*tnr7_ims_1_2*/, 38 /*tnr7_bc_1_2*/, 39 /*odr_tnr_sp_bc_rs4n_1_4*/, 40 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 41 /*tnr7_blend_1_1*/, 44 /*image_upscaler_1_1*/, 45 /*cas_1_1*/, 46 /*odr_ofs_mp_1_4*/, 47 /*b2i_ds_output_1_1*/, 48 /*odr_ofs_dp_1_4*/, 42 /*odr_tnr_fp_yuvn_1_4*/, 43 /*tnr_scaler_fp_1_1*/, 49 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[9].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void IsysWithCvOuterNode::Init(IsysWithCvOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(2, NodeTypes::Isys, 4, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[4] = {36280 /*crop_bpp_adjust_1_0*/, 5420 /*upipe_1_0*/, 26150 /*isys_drainer_1_0*/, 11470 /*is_odr_a*/}; + uint64_t kernelsRcbBitmap[] = {0xB, 0x0}; // { crop_bpp_adjust_1_0[0], upipe_1_0[1], is_odr_a[3] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0xE, 0x0}; // {{crop_bpp_adjust_1_0}[0], {upipe_1_0}[1], {isys_drainer_1_0}[2], {is_odr_a}[3] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0xF, 0x0}; // {{crop_bpp_adjust_1_0}[0], {upipe_1_0}[1], {isys_drainer_1_0}[2], {is_odr_a}[3] } + uint8_t systemApisSizes[4] = {0 /*crop_bpp_adjust_1_0*/, 34 /*upipe_1_0*/, 20 /*isys_drainer_1_0*/, 0 /*is_odr_a*/}; + uint16_t runKernelConfigOrder[4] = {0 /*crop_bpp_adjust_1_0*/, 1 /*upipe_1_0*/, 2 /*isys_drainer_1_0*/, 3 /*is_odr_a*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // set default inner Node + setInnerNode(None); +} + +void SwSegnetOuterNode::Init(SwSegnetOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(3, NodeTypes::Sw, 0, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerWithGmvWithTnrWithSapOuterNode::Init(LbffBayerWithGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 62, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[62] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 14488 /*rgb_ir_2_0*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 51073 /*ifd_gmv_1_4*/, 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 35263 /*ifd_segmap_bnlm_1_4*/, 54924 /*smurf_bnlm_1_0*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 9241 /*ifd_segmap_xnr_1_4*/, 42329 /*smurf_xnr_1_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 51914 /*ifd_segmap_acm_1_4*/, 28366 /*smurf_acm_1_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 2495 /*tnr7_spatial_1_1*/, 29996 /*tnr_scaler_lb_1_1*/, 23639 /*tnr7_ims_1_2*/, 40280 /*gmv_statistics_1_1*/, 7416 /*odr_gmv_feature_1_4*/, 41148 /*odr_gmv_match_1_4*/, 47873 /*ifd_segmap_tnr_bc_1_4*/, 13101 /*smurf_tnr_bc_1_0*/, 1502 /*tnr7_bc_1_2*/, 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, 14619 /*ifd_segmap_tnr_blend_1_4*/, 42749 /*smurf_tnr_blend_1_0*/, 20119 /*tnr7_blend_1_1*/, 5215 /*odr_tnr_fp_yuvn_1_4*/, 20623 /*tnr_scaler_fp_1_1*/, 28787 /*image_upscaler_1_1*/, 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/, 20893 /*ifd_segmap_cas_1_4*/, 37468 /*smurf_cas_1_0*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x3BF77D63187FFE31, 0x0}; // { ifd_pipe_1_4[0], rgb_ir_2_0[4], ifd_lsc_1_4[5], rgbs_grid_1_1[9], ccm_3a_2_0[10], fr_grid_1_0[11], odr_awb_std_1_4[12], odr_awb_sat_1_4[13], aestatistics_2_1[14], odr_ae_1_4[15], odr_af_std_1_4[16], ifd_gmv_1_4[17], ifd_tnr_sp_bc_yuv4nm1_1_4[18], ifd_tnr_sp_bc_rs4nm1_1_4[19], ifd_tnr_fp_blend_yuvnm1_1_4[20], ifd_segmap_bnlm_1_4[21], smurf_bnlm_1_0[22], ifd_segmap_xnr_1_4[27], smurf_xnr_1_0[28], ifd_segmap_acm_1_4[32], smurf_acm_1_0[33], b2i_ds_1_1[37], lbff_crop_espa_1_4[38], tnr_scaler_lb_1_1[40], gmv_statistics_1_1[42], odr_gmv_feature_1_4[43], odr_gmv_match_1_4[44], ifd_segmap_tnr_bc_1_4[45], smurf_tnr_bc_1_0[46], odr_tnr_sp_bc_rs4n_1_4[48], ifd_segmap_tnr_blend_1_4[49], smurf_tnr_blend_1_0[50], odr_tnr_fp_yuvn_1_4[52], tnr_scaler_fp_1_1[53], image_upscaler_1_1[54], odr_tnr_scale_fp_yuv4n_1_4[55], ifd_segmap_cas_1_4[56], smurf_cas_1_0[57], odr_ofs_mp_1_4[59], b2i_ds_output_1_1[60], odr_ofs_dp_1_4[61] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x278EFEC738FFF062, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgb_ir_2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sat_1_4}[5], {aestatistics_2_1}[6], {odr_ae_1_4}[7], {odr_af_std_1_4}[8], {ifd_gmv_1_4}[9], {ifd_tnr_sp_bc_yuv4nm1_1_4}[10], {ifd_tnr_sp_bc_rs4nm1_1_4}[11], {ifd_tnr_fp_blend_yuvnm1_1_4}[12], {ifd_segmap_bnlm_1_4}[13], {smurf_bnlm_1_0}[14], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[15], {ifd_segmap_xnr_1_4}[16], {smurf_xnr_1_0}[17], {xnr_5_4, vcr_3_1, glim_2_0}[18], {ifd_segmap_acm_1_4}[19], {smurf_acm_1_0}[20], {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[21], {lbff_crop_espa_1_4}[22], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[23], {tnr7_ims_1_2}[24], {gmv_statistics_1_1}[25], {odr_gmv_feature_1_4}[26], {odr_gmv_match_1_4}[27], {ifd_segmap_tnr_bc_1_4}[28], {smurf_tnr_bc_1_0}[29], {tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[30], {ifd_segmap_tnr_blend_1_4}[31], {smurf_tnr_blend_1_0}[32], {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[33], {odr_tnr_scale_fp_yuv4n_1_4}[34], {ifd_segmap_cas_1_4}[35], {smurf_cas_1_0}[36], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[37], {odr_ofs_dp_1_4}[38] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x3FFFFFE738FFFE73, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgb_ir_2_0}[2], {ifd_lsc_1_4}[3], {lsc_1_2, gd_2_2, wb_1_1}[4], {rgbs_grid_1_1}[5], {ccm_3a_2_0}[6], {fr_grid_1_0}[7], {odr_awb_std_1_4}[8], {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], {odr_ae_1_4}[11], {odr_af_std_1_4}[12], {ifd_gmv_1_4}[13], {ifd_tnr_sp_bc_yuv4nm1_1_4}[14], {ifd_tnr_sp_bc_rs4nm1_1_4}[15], {ifd_tnr_fp_blend_yuvnm1_1_4}[16], {ifd_segmap_bnlm_1_4}[17], {smurf_bnlm_1_0}[18], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[19], {ifd_segmap_xnr_1_4}[20], {smurf_xnr_1_0}[21], {xnr_5_4, vcr_3_1, glim_2_0}[22], {ifd_segmap_acm_1_4}[23], {smurf_acm_1_0}[24], {acm_1_2, gammatm_v4, csc_1_1}[25], {b2i_ds_1_1}[26], {lbff_crop_espa_1_4}[27], {tnr7_spatial_1_1}[28], {tnr_scaler_lb_1_1}[29], {tnr7_ims_1_2}[30], {gmv_statistics_1_1}[31], {odr_gmv_feature_1_4}[32], {odr_gmv_match_1_4}[33], {ifd_segmap_tnr_bc_1_4}[34], {smurf_tnr_bc_1_0}[35], {tnr7_bc_1_2}[36], {odr_tnr_sp_bc_rs4n_1_4}[37], {ifd_segmap_tnr_blend_1_4}[38], {smurf_tnr_blend_1_0}[39], {tnr7_blend_1_1}[40], {odr_tnr_fp_yuvn_1_4}[41], {tnr_scaler_fp_1_1}[42], {image_upscaler_1_1}[43], {odr_tnr_scale_fp_yuv4n_1_4}[44], {ifd_segmap_cas_1_4}[45], {smurf_cas_1_0}[46], {cas_1_1}[47], {odr_ofs_mp_1_4}[48], {b2i_ds_output_1_1}[49], {odr_ofs_dp_1_4}[50] } + uint8_t systemApisSizes[62] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 0 /*rgb_ir_2_0*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_gmv_1_4*/, 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 220 /*ifd_segmap_bnlm_1_4*/, 0 /*smurf_bnlm_1_0*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 220 /*ifd_segmap_xnr_1_4*/, 0 /*smurf_xnr_1_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 220 /*ifd_segmap_acm_1_4*/, 0 /*smurf_acm_1_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*tnr7_spatial_1_1*/, 0 /*tnr_scaler_lb_1_1*/, 0 /*tnr7_ims_1_2*/, 32 /*gmv_statistics_1_1*/, 220 /*odr_gmv_feature_1_4*/, 220 /*odr_gmv_match_1_4*/, 220 /*ifd_segmap_tnr_bc_1_4*/, 0 /*smurf_tnr_bc_1_0*/, 5 /*tnr7_bc_1_2*/, 220 /*odr_tnr_sp_bc_rs4n_1_4*/, 220 /*ifd_segmap_tnr_blend_1_4*/, 0 /*smurf_tnr_blend_1_0*/, 5 /*tnr7_blend_1_1*/, 220 /*odr_tnr_fp_yuvn_1_4*/, 0 /*tnr_scaler_fp_1_1*/, 0 /*image_upscaler_1_1*/, 220 /*odr_tnr_scale_fp_yuv4n_1_4*/, 220 /*ifd_segmap_cas_1_4*/, 0 /*smurf_cas_1_0*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/}; + uint16_t runKernelConfigOrder[62] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 4 /*rgb_ir_2_0*/, 5 /*ifd_lsc_1_4*/, 6 /*lsc_1_2*/, 7 /*gd_2_2*/, 8 /*wb_1_1*/, 23 /*bnlm_3_4*/, 24 /*bxt_demosaic*/, 25 /*vcsc_2_0_b*/, 26 /*gltm_2_0*/, 29 /*xnr_5_4*/, 30 /*vcr_3_1*/, 31 /*glim_2_0*/, 34 /*acm_1_2*/, 35 /*gammatm_v4*/, 36 /*csc_1_1*/, 37 /*b2i_ds_1_1*/, 38 /*lbff_crop_espa_1_4*/, 39 /*tnr7_spatial_1_1*/, 40 /*tnr_scaler_lb_1_1*/, 9 /*rgbs_grid_1_1*/, 12 /*odr_awb_std_1_4*/, 13 /*odr_awb_sat_1_4*/, 10 /*ccm_3a_2_0*/, 14 /*aestatistics_2_1*/, 15 /*odr_ae_1_4*/, 11 /*fr_grid_1_0*/, 16 /*odr_af_std_1_4*/, 17 /*ifd_gmv_1_4*/, 42 /*gmv_statistics_1_1*/, 43 /*odr_gmv_feature_1_4*/, 44 /*odr_gmv_match_1_4*/, 18 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 19 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 41 /*tnr7_ims_1_2*/, 47 /*tnr7_bc_1_2*/, 48 /*odr_tnr_sp_bc_rs4n_1_4*/, 20 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 51 /*tnr7_blend_1_1*/, 54 /*image_upscaler_1_1*/, 58 /*cas_1_1*/, 59 /*odr_ofs_mp_1_4*/, 60 /*b2i_ds_output_1_1*/, 61 /*odr_ofs_dp_1_4*/, 52 /*odr_tnr_fp_yuvn_1_4*/, 53 /*tnr_scaler_fp_1_1*/, 55 /*odr_tnr_scale_fp_yuv4n_1_4*/, 21 /*ifd_segmap_bnlm_1_4*/, 27 /*ifd_segmap_xnr_1_4*/, 32 /*ifd_segmap_acm_1_4*/, 45 /*ifd_segmap_tnr_bc_1_4*/, 49 /*ifd_segmap_tnr_blend_1_4*/, 56 /*ifd_segmap_cas_1_4*/, 22 /*smurf_bnlm_1_0*/, 28 /*smurf_xnr_1_0*/, 33 /*smurf_acm_1_0*/, 46 /*smurf_tnr_bc_1_0*/, 50 /*smurf_tnr_blend_1_0*/, 57 /*smurf_cas_1_0*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[23].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void SwScalerOuterNode::Init(SwScalerOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(5, NodeTypes::Sw, 1, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[1] = {19706 /*sw_scaler*/}; + uint64_t kernelsRcbBitmap[] = {0x1, 0x0}; // { sw_scaler[0] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x0, 0x0}; // {{sw_scaler}[0] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x1, 0x0}; // {{sw_scaler}[0] } + uint8_t systemApisSizes[1] = {5 /*sw_scaler*/}; + uint16_t runKernelConfigOrder[1] = {0 /*sw_scaler*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // set default inner Node + setInnerNode(None); +} + +void SwNntmOuterNode::Init(SwNntmOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(6, NodeTypes::Sw, 1, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[1] = {46539 /*nntm_1_0*/}; + uint64_t kernelsRcbBitmap[] = {0x0, 0x0}; // { } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x0, 0x0}; // {{nntm_1_0}[0] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x1, 0x0}; // {{nntm_1_0}[0] } + uint8_t systemApisSizes[1] = {5 /*nntm_1_0*/}; + uint16_t runKernelConfigOrder[1] = {0 /*nntm_1_0*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, nullptr, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerNoGmvWithTnrWithSapOuterNode::Init(LbffBayerNoGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 58, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[58] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 14488 /*rgb_ir_2_0*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 35263 /*ifd_segmap_bnlm_1_4*/, 54924 /*smurf_bnlm_1_0*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 9241 /*ifd_segmap_xnr_1_4*/, 42329 /*smurf_xnr_1_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 51914 /*ifd_segmap_acm_1_4*/, 28366 /*smurf_acm_1_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 2495 /*tnr7_spatial_1_1*/, 29996 /*tnr_scaler_lb_1_1*/, 23639 /*tnr7_ims_1_2*/, 47873 /*ifd_segmap_tnr_bc_1_4*/, 13101 /*smurf_tnr_bc_1_0*/, 1502 /*tnr7_bc_1_2*/, 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, 14619 /*ifd_segmap_tnr_blend_1_4*/, 42749 /*smurf_tnr_blend_1_0*/, 20119 /*tnr7_blend_1_1*/, 5215 /*odr_tnr_fp_yuvn_1_4*/, 20623 /*tnr_scaler_fp_1_1*/, 28787 /*image_upscaler_1_1*/, 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/, 20893 /*ifd_segmap_cas_1_4*/, 37468 /*smurf_cas_1_0*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x3BF76B18C3FFE31, 0x0}; // { ifd_pipe_1_4[0], rgb_ir_2_0[4], ifd_lsc_1_4[5], rgbs_grid_1_1[9], ccm_3a_2_0[10], fr_grid_1_0[11], odr_awb_std_1_4[12], odr_awb_sat_1_4[13], aestatistics_2_1[14], odr_ae_1_4[15], odr_af_std_1_4[16], ifd_tnr_sp_bc_yuv4nm1_1_4[17], ifd_tnr_sp_bc_rs4nm1_1_4[18], ifd_tnr_fp_blend_yuvnm1_1_4[19], ifd_segmap_bnlm_1_4[20], smurf_bnlm_1_0[21], ifd_segmap_xnr_1_4[26], smurf_xnr_1_0[27], ifd_segmap_acm_1_4[31], smurf_acm_1_0[32], b2i_ds_1_1[36], lbff_crop_espa_1_4[37], tnr_scaler_lb_1_1[39], ifd_segmap_tnr_bc_1_4[41], smurf_tnr_bc_1_0[42], odr_tnr_sp_bc_rs4n_1_4[44], ifd_segmap_tnr_blend_1_4[45], smurf_tnr_blend_1_0[46], odr_tnr_fp_yuvn_1_4[48], tnr_scaler_fp_1_1[49], image_upscaler_1_1[50], odr_tnr_scale_fp_yuv4n_1_4[51], ifd_segmap_cas_1_4[52], smurf_cas_1_0[53], odr_ofs_mp_1_4[55], b2i_ds_output_1_1[56], odr_ofs_dp_1_4[57] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x278EF639C7FF062, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgb_ir_2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sat_1_4}[5], {aestatistics_2_1}[6], {odr_ae_1_4}[7], {odr_af_std_1_4}[8], {ifd_tnr_sp_bc_yuv4nm1_1_4}[9], {ifd_tnr_sp_bc_rs4nm1_1_4}[10], {ifd_tnr_fp_blend_yuvnm1_1_4}[11], {ifd_segmap_bnlm_1_4}[12], {smurf_bnlm_1_0}[13], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[14], {ifd_segmap_xnr_1_4}[15], {smurf_xnr_1_0}[16], {xnr_5_4, vcr_3_1, glim_2_0}[17], {ifd_segmap_acm_1_4}[18], {smurf_acm_1_0}[19], {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[20], {lbff_crop_espa_1_4}[21], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[22], {tnr7_ims_1_2}[23], {ifd_segmap_tnr_bc_1_4}[24], {smurf_tnr_bc_1_0}[25], {tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[26], {ifd_segmap_tnr_blend_1_4}[27], {smurf_tnr_blend_1_0}[28], {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[29], {odr_tnr_scale_fp_yuv4n_1_4}[30], {ifd_segmap_cas_1_4}[31], {smurf_cas_1_0}[32], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[33], {odr_ofs_dp_1_4}[34] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x3FFFFF39C7FFE73, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgb_ir_2_0}[2], {ifd_lsc_1_4}[3], {lsc_1_2, gd_2_2, wb_1_1}[4], {rgbs_grid_1_1}[5], {ccm_3a_2_0}[6], {fr_grid_1_0}[7], {odr_awb_std_1_4}[8], {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], {odr_ae_1_4}[11], {odr_af_std_1_4}[12], {ifd_tnr_sp_bc_yuv4nm1_1_4}[13], {ifd_tnr_sp_bc_rs4nm1_1_4}[14], {ifd_tnr_fp_blend_yuvnm1_1_4}[15], {ifd_segmap_bnlm_1_4}[16], {smurf_bnlm_1_0}[17], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[18], {ifd_segmap_xnr_1_4}[19], {smurf_xnr_1_0}[20], {xnr_5_4, vcr_3_1, glim_2_0}[21], {ifd_segmap_acm_1_4}[22], {smurf_acm_1_0}[23], {acm_1_2, gammatm_v4, csc_1_1}[24], {b2i_ds_1_1}[25], {lbff_crop_espa_1_4}[26], {tnr7_spatial_1_1}[27], {tnr_scaler_lb_1_1}[28], {tnr7_ims_1_2}[29], {ifd_segmap_tnr_bc_1_4}[30], {smurf_tnr_bc_1_0}[31], {tnr7_bc_1_2}[32], {odr_tnr_sp_bc_rs4n_1_4}[33], {ifd_segmap_tnr_blend_1_4}[34], {smurf_tnr_blend_1_0}[35], {tnr7_blend_1_1}[36], {odr_tnr_fp_yuvn_1_4}[37], {tnr_scaler_fp_1_1}[38], {image_upscaler_1_1}[39], {odr_tnr_scale_fp_yuv4n_1_4}[40], {ifd_segmap_cas_1_4}[41], {smurf_cas_1_0}[42], {cas_1_1}[43], {odr_ofs_mp_1_4}[44], {b2i_ds_output_1_1}[45], {odr_ofs_dp_1_4}[46] } + uint8_t systemApisSizes[58] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 0 /*rgb_ir_2_0*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 220 /*ifd_segmap_bnlm_1_4*/, 0 /*smurf_bnlm_1_0*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 220 /*ifd_segmap_xnr_1_4*/, 0 /*smurf_xnr_1_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 220 /*ifd_segmap_acm_1_4*/, 0 /*smurf_acm_1_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*tnr7_spatial_1_1*/, 0 /*tnr_scaler_lb_1_1*/, 0 /*tnr7_ims_1_2*/, 220 /*ifd_segmap_tnr_bc_1_4*/, 0 /*smurf_tnr_bc_1_0*/, 5 /*tnr7_bc_1_2*/, 220 /*odr_tnr_sp_bc_rs4n_1_4*/, 220 /*ifd_segmap_tnr_blend_1_4*/, 0 /*smurf_tnr_blend_1_0*/, 5 /*tnr7_blend_1_1*/, 220 /*odr_tnr_fp_yuvn_1_4*/, 0 /*tnr_scaler_fp_1_1*/, 0 /*image_upscaler_1_1*/, 220 /*odr_tnr_scale_fp_yuv4n_1_4*/, 220 /*ifd_segmap_cas_1_4*/, 0 /*smurf_cas_1_0*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/}; + uint16_t runKernelConfigOrder[58] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 4 /*rgb_ir_2_0*/, 5 /*ifd_lsc_1_4*/, 6 /*lsc_1_2*/, 7 /*gd_2_2*/, 8 /*wb_1_1*/, 22 /*bnlm_3_4*/, 23 /*bxt_demosaic*/, 24 /*vcsc_2_0_b*/, 25 /*gltm_2_0*/, 28 /*xnr_5_4*/, 29 /*vcr_3_1*/, 30 /*glim_2_0*/, 33 /*acm_1_2*/, 34 /*gammatm_v4*/, 35 /*csc_1_1*/, 36 /*b2i_ds_1_1*/, 37 /*lbff_crop_espa_1_4*/, 38 /*tnr7_spatial_1_1*/, 39 /*tnr_scaler_lb_1_1*/, 9 /*rgbs_grid_1_1*/, 12 /*odr_awb_std_1_4*/, 13 /*odr_awb_sat_1_4*/, 10 /*ccm_3a_2_0*/, 14 /*aestatistics_2_1*/, 15 /*odr_ae_1_4*/, 11 /*fr_grid_1_0*/, 16 /*odr_af_std_1_4*/, 17 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 18 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 40 /*tnr7_ims_1_2*/, 43 /*tnr7_bc_1_2*/, 44 /*odr_tnr_sp_bc_rs4n_1_4*/, 19 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 47 /*tnr7_blend_1_1*/, 50 /*image_upscaler_1_1*/, 54 /*cas_1_1*/, 55 /*odr_ofs_mp_1_4*/, 56 /*b2i_ds_output_1_1*/, 57 /*odr_ofs_dp_1_4*/, 48 /*odr_tnr_fp_yuvn_1_4*/, 49 /*tnr_scaler_fp_1_1*/, 51 /*odr_tnr_scale_fp_yuv4n_1_4*/, 20 /*ifd_segmap_bnlm_1_4*/, 26 /*ifd_segmap_xnr_1_4*/, 31 /*ifd_segmap_acm_1_4*/, 41 /*ifd_segmap_tnr_bc_1_4*/, 45 /*ifd_segmap_tnr_blend_1_4*/, 52 /*ifd_segmap_cas_1_4*/, 21 /*smurf_bnlm_1_0*/, 27 /*smurf_xnr_1_0*/, 32 /*smurf_acm_1_0*/, 42 /*smurf_tnr_bc_1_0*/, 46 /*smurf_tnr_blend_1_0*/, 53 /*smurf_cas_1_0*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[22].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void IsysPdaf2WithCvOuterNode::Init(IsysPdaf2WithCvOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(2, NodeTypes::Isys, 5, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[5] = {36280 /*crop_bpp_adjust_1_0*/, 5420 /*upipe_1_0*/, 26150 /*isys_drainer_1_0*/, 11470 /*is_odr_a*/, 55449 /*is_odr_b*/}; + uint64_t kernelsRcbBitmap[] = {0x1B, 0x0}; // { crop_bpp_adjust_1_0[0], upipe_1_0[1], is_odr_a[3], is_odr_b[4] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x1E, 0x0}; // {{crop_bpp_adjust_1_0}[0], {upipe_1_0}[1], {isys_drainer_1_0}[2], {is_odr_a}[3], {is_odr_b}[4] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x1F, 0x0}; // {{crop_bpp_adjust_1_0}[0], {upipe_1_0}[1], {isys_drainer_1_0}[2], {is_odr_a}[3], {is_odr_b}[4] } + uint8_t systemApisSizes[5] = {0 /*crop_bpp_adjust_1_0*/, 34 /*upipe_1_0*/, 20 /*isys_drainer_1_0*/, 0 /*is_odr_a*/, 0 /*is_odr_b*/}; + uint16_t runKernelConfigOrder[5] = {0 /*crop_bpp_adjust_1_0*/, 1 /*upipe_1_0*/, 2 /*isys_drainer_1_0*/, 3 /*is_odr_a*/, 4 /*is_odr_b*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf2NoGmvWithTnrWithSapOuterNode::Init(LbffBayerPdaf2NoGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 62, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[62] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 14488 /*rgb_ir_2_0*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 22427 /*ifd_pdaf_1_4*/, 43213 /*pext_1_0*/, 44308 /*pafstatistics_1_2*/, 26892 /*odr_pdaf_1_4*/, 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 35263 /*ifd_segmap_bnlm_1_4*/, 54924 /*smurf_bnlm_1_0*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 9241 /*ifd_segmap_xnr_1_4*/, 42329 /*smurf_xnr_1_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 51914 /*ifd_segmap_acm_1_4*/, 28366 /*smurf_acm_1_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 2495 /*tnr7_spatial_1_1*/, 29996 /*tnr_scaler_lb_1_1*/, 23639 /*tnr7_ims_1_2*/, 47873 /*ifd_segmap_tnr_bc_1_4*/, 13101 /*smurf_tnr_bc_1_0*/, 1502 /*tnr7_bc_1_2*/, 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, 14619 /*ifd_segmap_tnr_blend_1_4*/, 42749 /*smurf_tnr_blend_1_0*/, 20119 /*tnr7_blend_1_1*/, 5215 /*odr_tnr_fp_yuvn_1_4*/, 20623 /*tnr_scaler_fp_1_1*/, 28787 /*image_upscaler_1_1*/, 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/, 20893 /*ifd_segmap_cas_1_4*/, 37468 /*smurf_cas_1_0*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x3BF76B18C3FFFE31, 0x0}; // { ifd_pipe_1_4[0], rgb_ir_2_0[4], ifd_lsc_1_4[5], rgbs_grid_1_1[9], ccm_3a_2_0[10], fr_grid_1_0[11], odr_awb_std_1_4[12], odr_awb_sat_1_4[13], aestatistics_2_1[14], odr_ae_1_4[15], odr_af_std_1_4[16], ifd_pdaf_1_4[17], pext_1_0[18], pafstatistics_1_2[19], odr_pdaf_1_4[20], ifd_tnr_sp_bc_yuv4nm1_1_4[21], ifd_tnr_sp_bc_rs4nm1_1_4[22], ifd_tnr_fp_blend_yuvnm1_1_4[23], ifd_segmap_bnlm_1_4[24], smurf_bnlm_1_0[25], ifd_segmap_xnr_1_4[30], smurf_xnr_1_0[31], ifd_segmap_acm_1_4[35], smurf_acm_1_0[36], b2i_ds_1_1[40], lbff_crop_espa_1_4[41], tnr_scaler_lb_1_1[43], ifd_segmap_tnr_bc_1_4[45], smurf_tnr_bc_1_0[46], odr_tnr_sp_bc_rs4n_1_4[48], ifd_segmap_tnr_blend_1_4[49], smurf_tnr_blend_1_0[50], odr_tnr_fp_yuvn_1_4[52], tnr_scaler_fp_1_1[53], image_upscaler_1_1[54], odr_tnr_scale_fp_yuv4n_1_4[55], ifd_segmap_cas_1_4[56], smurf_cas_1_0[57], odr_ofs_mp_1_4[59], b2i_ds_output_1_1[60], odr_ofs_dp_1_4[61] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x278EF639C7FFF062, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgb_ir_2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sat_1_4}[5], {aestatistics_2_1}[6], {odr_ae_1_4}[7], {odr_af_std_1_4}[8], {ifd_pdaf_1_4}[9], {pext_1_0}[10], {pafstatistics_1_2}[11], {odr_pdaf_1_4}[12], {ifd_tnr_sp_bc_yuv4nm1_1_4}[13], {ifd_tnr_sp_bc_rs4nm1_1_4}[14], {ifd_tnr_fp_blend_yuvnm1_1_4}[15], {ifd_segmap_bnlm_1_4}[16], {smurf_bnlm_1_0}[17], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[18], {ifd_segmap_xnr_1_4}[19], {smurf_xnr_1_0}[20], {xnr_5_4, vcr_3_1, glim_2_0}[21], {ifd_segmap_acm_1_4}[22], {smurf_acm_1_0}[23], {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[24], {lbff_crop_espa_1_4}[25], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[26], {tnr7_ims_1_2}[27], {ifd_segmap_tnr_bc_1_4}[28], {smurf_tnr_bc_1_0}[29], {tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[30], {ifd_segmap_tnr_blend_1_4}[31], {smurf_tnr_blend_1_0}[32], {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[33], {odr_tnr_scale_fp_yuv4n_1_4}[34], {ifd_segmap_cas_1_4}[35], {smurf_cas_1_0}[36], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[37], {odr_ofs_dp_1_4}[38] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x3FFFFF39C7FFFE73, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgb_ir_2_0}[2], {ifd_lsc_1_4}[3], {lsc_1_2, gd_2_2, wb_1_1}[4], {rgbs_grid_1_1}[5], {ccm_3a_2_0}[6], {fr_grid_1_0}[7], {odr_awb_std_1_4}[8], {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], {odr_ae_1_4}[11], {odr_af_std_1_4}[12], {ifd_pdaf_1_4}[13], {pext_1_0}[14], {pafstatistics_1_2}[15], {odr_pdaf_1_4}[16], {ifd_tnr_sp_bc_yuv4nm1_1_4}[17], {ifd_tnr_sp_bc_rs4nm1_1_4}[18], {ifd_tnr_fp_blend_yuvnm1_1_4}[19], {ifd_segmap_bnlm_1_4}[20], {smurf_bnlm_1_0}[21], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[22], {ifd_segmap_xnr_1_4}[23], {smurf_xnr_1_0}[24], {xnr_5_4, vcr_3_1, glim_2_0}[25], {ifd_segmap_acm_1_4}[26], {smurf_acm_1_0}[27], {acm_1_2, gammatm_v4, csc_1_1}[28], {b2i_ds_1_1}[29], {lbff_crop_espa_1_4}[30], {tnr7_spatial_1_1}[31], {tnr_scaler_lb_1_1}[32], {tnr7_ims_1_2}[33], {ifd_segmap_tnr_bc_1_4}[34], {smurf_tnr_bc_1_0}[35], {tnr7_bc_1_2}[36], {odr_tnr_sp_bc_rs4n_1_4}[37], {ifd_segmap_tnr_blend_1_4}[38], {smurf_tnr_blend_1_0}[39], {tnr7_blend_1_1}[40], {odr_tnr_fp_yuvn_1_4}[41], {tnr_scaler_fp_1_1}[42], {image_upscaler_1_1}[43], {odr_tnr_scale_fp_yuv4n_1_4}[44], {ifd_segmap_cas_1_4}[45], {smurf_cas_1_0}[46], {cas_1_1}[47], {odr_ofs_mp_1_4}[48], {b2i_ds_output_1_1}[49], {odr_ofs_dp_1_4}[50] } + uint8_t systemApisSizes[62] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 0 /*rgb_ir_2_0*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_pdaf_1_4*/, 24 /*pext_1_0*/, 8 /*pafstatistics_1_2*/, 220 /*odr_pdaf_1_4*/, 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 220 /*ifd_segmap_bnlm_1_4*/, 0 /*smurf_bnlm_1_0*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 220 /*ifd_segmap_xnr_1_4*/, 0 /*smurf_xnr_1_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 220 /*ifd_segmap_acm_1_4*/, 0 /*smurf_acm_1_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*tnr7_spatial_1_1*/, 0 /*tnr_scaler_lb_1_1*/, 0 /*tnr7_ims_1_2*/, 220 /*ifd_segmap_tnr_bc_1_4*/, 0 /*smurf_tnr_bc_1_0*/, 5 /*tnr7_bc_1_2*/, 220 /*odr_tnr_sp_bc_rs4n_1_4*/, 220 /*ifd_segmap_tnr_blend_1_4*/, 0 /*smurf_tnr_blend_1_0*/, 5 /*tnr7_blend_1_1*/, 220 /*odr_tnr_fp_yuvn_1_4*/, 0 /*tnr_scaler_fp_1_1*/, 0 /*image_upscaler_1_1*/, 220 /*odr_tnr_scale_fp_yuv4n_1_4*/, 220 /*ifd_segmap_cas_1_4*/, 0 /*smurf_cas_1_0*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/}; + uint16_t runKernelConfigOrder[62] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 4 /*rgb_ir_2_0*/, 5 /*ifd_lsc_1_4*/, 6 /*lsc_1_2*/, 7 /*gd_2_2*/, 8 /*wb_1_1*/, 26 /*bnlm_3_4*/, 27 /*bxt_demosaic*/, 28 /*vcsc_2_0_b*/, 29 /*gltm_2_0*/, 32 /*xnr_5_4*/, 33 /*vcr_3_1*/, 34 /*glim_2_0*/, 37 /*acm_1_2*/, 38 /*gammatm_v4*/, 39 /*csc_1_1*/, 40 /*b2i_ds_1_1*/, 41 /*lbff_crop_espa_1_4*/, 42 /*tnr7_spatial_1_1*/, 43 /*tnr_scaler_lb_1_1*/, 9 /*rgbs_grid_1_1*/, 12 /*odr_awb_std_1_4*/, 13 /*odr_awb_sat_1_4*/, 10 /*ccm_3a_2_0*/, 14 /*aestatistics_2_1*/, 15 /*odr_ae_1_4*/, 11 /*fr_grid_1_0*/, 16 /*odr_af_std_1_4*/, 17 /*ifd_pdaf_1_4*/, 18 /*pext_1_0*/, 19 /*pafstatistics_1_2*/, 20 /*odr_pdaf_1_4*/, 21 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 22 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 44 /*tnr7_ims_1_2*/, 47 /*tnr7_bc_1_2*/, 48 /*odr_tnr_sp_bc_rs4n_1_4*/, 23 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 51 /*tnr7_blend_1_1*/, 54 /*image_upscaler_1_1*/, 58 /*cas_1_1*/, 59 /*odr_ofs_mp_1_4*/, 60 /*b2i_ds_output_1_1*/, 61 /*odr_ofs_dp_1_4*/, 52 /*odr_tnr_fp_yuvn_1_4*/, 53 /*tnr_scaler_fp_1_1*/, 55 /*odr_tnr_scale_fp_yuv4n_1_4*/, 24 /*ifd_segmap_bnlm_1_4*/, 30 /*ifd_segmap_xnr_1_4*/, 35 /*ifd_segmap_acm_1_4*/, 45 /*ifd_segmap_tnr_bc_1_4*/, 49 /*ifd_segmap_tnr_blend_1_4*/, 56 /*ifd_segmap_cas_1_4*/, 25 /*smurf_bnlm_1_0*/, 31 /*smurf_xnr_1_0*/, 36 /*smurf_acm_1_0*/, 46 /*smurf_tnr_bc_1_0*/, 50 /*smurf_tnr_blend_1_0*/, 57 /*smurf_cas_1_0*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[26].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf2WithTnrWithSapOuterNode::Init(LbffBayerPdaf2WithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 66, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[66] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 14488 /*rgb_ir_2_0*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 22427 /*ifd_pdaf_1_4*/, 43213 /*pext_1_0*/, 44308 /*pafstatistics_1_2*/, 26892 /*odr_pdaf_1_4*/, 51073 /*ifd_gmv_1_4*/, 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 35263 /*ifd_segmap_bnlm_1_4*/, 54924 /*smurf_bnlm_1_0*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 9241 /*ifd_segmap_xnr_1_4*/, 42329 /*smurf_xnr_1_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 51914 /*ifd_segmap_acm_1_4*/, 28366 /*smurf_acm_1_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 2495 /*tnr7_spatial_1_1*/, 29996 /*tnr_scaler_lb_1_1*/, 23639 /*tnr7_ims_1_2*/, 40280 /*gmv_statistics_1_1*/, 7416 /*odr_gmv_feature_1_4*/, 41148 /*odr_gmv_match_1_4*/, 47873 /*ifd_segmap_tnr_bc_1_4*/, 13101 /*smurf_tnr_bc_1_0*/, 1502 /*tnr7_bc_1_2*/, 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, 14619 /*ifd_segmap_tnr_blend_1_4*/, 42749 /*smurf_tnr_blend_1_0*/, 20119 /*tnr7_blend_1_1*/, 5215 /*odr_tnr_fp_yuvn_1_4*/, 20623 /*tnr_scaler_fp_1_1*/, 28787 /*image_upscaler_1_1*/, 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/, 20893 /*ifd_segmap_cas_1_4*/, 37468 /*smurf_cas_1_0*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0xBF77D63187FFFE31, 0x3}; // { ifd_pipe_1_4[0], rgb_ir_2_0[4], ifd_lsc_1_4[5], rgbs_grid_1_1[9], ccm_3a_2_0[10], fr_grid_1_0[11], odr_awb_std_1_4[12], odr_awb_sat_1_4[13], aestatistics_2_1[14], odr_ae_1_4[15], odr_af_std_1_4[16], ifd_pdaf_1_4[17], pext_1_0[18], pafstatistics_1_2[19], odr_pdaf_1_4[20], ifd_gmv_1_4[21], ifd_tnr_sp_bc_yuv4nm1_1_4[22], ifd_tnr_sp_bc_rs4nm1_1_4[23], ifd_tnr_fp_blend_yuvnm1_1_4[24], ifd_segmap_bnlm_1_4[25], smurf_bnlm_1_0[26], ifd_segmap_xnr_1_4[31], smurf_xnr_1_0[32], ifd_segmap_acm_1_4[36], smurf_acm_1_0[37], b2i_ds_1_1[41], lbff_crop_espa_1_4[42], tnr_scaler_lb_1_1[44], gmv_statistics_1_1[46], odr_gmv_feature_1_4[47], odr_gmv_match_1_4[48], ifd_segmap_tnr_bc_1_4[49], smurf_tnr_bc_1_0[50], odr_tnr_sp_bc_rs4n_1_4[52], ifd_segmap_tnr_blend_1_4[53], smurf_tnr_blend_1_0[54], odr_tnr_fp_yuvn_1_4[56], tnr_scaler_fp_1_1[57], image_upscaler_1_1[58], odr_tnr_scale_fp_yuv4n_1_4[59], ifd_segmap_cas_1_4[60], smurf_cas_1_0[61], odr_ofs_mp_1_4[63], b2i_ds_output_1_1[64], odr_ofs_dp_1_4[65] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x78EFEC738FFFF062, 0x2}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgb_ir_2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sat_1_4}[5], {aestatistics_2_1}[6], {odr_ae_1_4}[7], {odr_af_std_1_4}[8], {ifd_pdaf_1_4}[9], {pext_1_0}[10], {pafstatistics_1_2}[11], {odr_pdaf_1_4}[12], {ifd_gmv_1_4}[13], {ifd_tnr_sp_bc_yuv4nm1_1_4}[14], {ifd_tnr_sp_bc_rs4nm1_1_4}[15], {ifd_tnr_fp_blend_yuvnm1_1_4}[16], {ifd_segmap_bnlm_1_4}[17], {smurf_bnlm_1_0}[18], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[19], {ifd_segmap_xnr_1_4}[20], {smurf_xnr_1_0}[21], {xnr_5_4, vcr_3_1, glim_2_0}[22], {ifd_segmap_acm_1_4}[23], {smurf_acm_1_0}[24], {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[25], {lbff_crop_espa_1_4}[26], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[27], {tnr7_ims_1_2}[28], {gmv_statistics_1_1}[29], {odr_gmv_feature_1_4}[30], {odr_gmv_match_1_4}[31], {ifd_segmap_tnr_bc_1_4}[32], {smurf_tnr_bc_1_0}[33], {tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[34], {ifd_segmap_tnr_blend_1_4}[35], {smurf_tnr_blend_1_0}[36], {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[37], {odr_tnr_scale_fp_yuv4n_1_4}[38], {ifd_segmap_cas_1_4}[39], {smurf_cas_1_0}[40], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[41], {odr_ofs_dp_1_4}[42] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0xFFFFFE738FFFFE73, 0x3}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgb_ir_2_0}[2], {ifd_lsc_1_4}[3], {lsc_1_2, gd_2_2, wb_1_1}[4], {rgbs_grid_1_1}[5], {ccm_3a_2_0}[6], {fr_grid_1_0}[7], {odr_awb_std_1_4}[8], {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], {odr_ae_1_4}[11], {odr_af_std_1_4}[12], {ifd_pdaf_1_4}[13], {pext_1_0}[14], {pafstatistics_1_2}[15], {odr_pdaf_1_4}[16], {ifd_gmv_1_4}[17], {ifd_tnr_sp_bc_yuv4nm1_1_4}[18], {ifd_tnr_sp_bc_rs4nm1_1_4}[19], {ifd_tnr_fp_blend_yuvnm1_1_4}[20], {ifd_segmap_bnlm_1_4}[21], {smurf_bnlm_1_0}[22], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[23], {ifd_segmap_xnr_1_4}[24], {smurf_xnr_1_0}[25], {xnr_5_4, vcr_3_1, glim_2_0}[26], {ifd_segmap_acm_1_4}[27], {smurf_acm_1_0}[28], {acm_1_2, gammatm_v4, csc_1_1}[29], {b2i_ds_1_1}[30], {lbff_crop_espa_1_4}[31], {tnr7_spatial_1_1}[32], {tnr_scaler_lb_1_1}[33], {tnr7_ims_1_2}[34], {gmv_statistics_1_1}[35], {odr_gmv_feature_1_4}[36], {odr_gmv_match_1_4}[37], {ifd_segmap_tnr_bc_1_4}[38], {smurf_tnr_bc_1_0}[39], {tnr7_bc_1_2}[40], {odr_tnr_sp_bc_rs4n_1_4}[41], {ifd_segmap_tnr_blend_1_4}[42], {smurf_tnr_blend_1_0}[43], {tnr7_blend_1_1}[44], {odr_tnr_fp_yuvn_1_4}[45], {tnr_scaler_fp_1_1}[46], {image_upscaler_1_1}[47], {odr_tnr_scale_fp_yuv4n_1_4}[48], {ifd_segmap_cas_1_4}[49], {smurf_cas_1_0}[50], {cas_1_1}[51], {odr_ofs_mp_1_4}[52], {b2i_ds_output_1_1}[53], {odr_ofs_dp_1_4}[54] } + uint8_t systemApisSizes[66] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 0 /*rgb_ir_2_0*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_pdaf_1_4*/, 24 /*pext_1_0*/, 8 /*pafstatistics_1_2*/, 220 /*odr_pdaf_1_4*/, 220 /*ifd_gmv_1_4*/, 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 220 /*ifd_segmap_bnlm_1_4*/, 0 /*smurf_bnlm_1_0*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 220 /*ifd_segmap_xnr_1_4*/, 0 /*smurf_xnr_1_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 220 /*ifd_segmap_acm_1_4*/, 0 /*smurf_acm_1_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*tnr7_spatial_1_1*/, 0 /*tnr_scaler_lb_1_1*/, 0 /*tnr7_ims_1_2*/, 32 /*gmv_statistics_1_1*/, 220 /*odr_gmv_feature_1_4*/, 220 /*odr_gmv_match_1_4*/, 220 /*ifd_segmap_tnr_bc_1_4*/, 0 /*smurf_tnr_bc_1_0*/, 5 /*tnr7_bc_1_2*/, 220 /*odr_tnr_sp_bc_rs4n_1_4*/, 220 /*ifd_segmap_tnr_blend_1_4*/, 0 /*smurf_tnr_blend_1_0*/, 5 /*tnr7_blend_1_1*/, 220 /*odr_tnr_fp_yuvn_1_4*/, 0 /*tnr_scaler_fp_1_1*/, 0 /*image_upscaler_1_1*/, 220 /*odr_tnr_scale_fp_yuv4n_1_4*/, 220 /*ifd_segmap_cas_1_4*/, 0 /*smurf_cas_1_0*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/}; + uint16_t runKernelConfigOrder[66] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 4 /*rgb_ir_2_0*/, 5 /*ifd_lsc_1_4*/, 6 /*lsc_1_2*/, 7 /*gd_2_2*/, 8 /*wb_1_1*/, 27 /*bnlm_3_4*/, 28 /*bxt_demosaic*/, 29 /*vcsc_2_0_b*/, 30 /*gltm_2_0*/, 33 /*xnr_5_4*/, 34 /*vcr_3_1*/, 35 /*glim_2_0*/, 38 /*acm_1_2*/, 39 /*gammatm_v4*/, 40 /*csc_1_1*/, 41 /*b2i_ds_1_1*/, 42 /*lbff_crop_espa_1_4*/, 43 /*tnr7_spatial_1_1*/, 44 /*tnr_scaler_lb_1_1*/, 9 /*rgbs_grid_1_1*/, 12 /*odr_awb_std_1_4*/, 13 /*odr_awb_sat_1_4*/, 10 /*ccm_3a_2_0*/, 14 /*aestatistics_2_1*/, 15 /*odr_ae_1_4*/, 11 /*fr_grid_1_0*/, 16 /*odr_af_std_1_4*/, 17 /*ifd_pdaf_1_4*/, 18 /*pext_1_0*/, 19 /*pafstatistics_1_2*/, 20 /*odr_pdaf_1_4*/, 21 /*ifd_gmv_1_4*/, 46 /*gmv_statistics_1_1*/, 47 /*odr_gmv_feature_1_4*/, 48 /*odr_gmv_match_1_4*/, 22 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 23 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 45 /*tnr7_ims_1_2*/, 51 /*tnr7_bc_1_2*/, 52 /*odr_tnr_sp_bc_rs4n_1_4*/, 24 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 55 /*tnr7_blend_1_1*/, 58 /*image_upscaler_1_1*/, 62 /*cas_1_1*/, 63 /*odr_ofs_mp_1_4*/, 64 /*b2i_ds_output_1_1*/, 65 /*odr_ofs_dp_1_4*/, 56 /*odr_tnr_fp_yuvn_1_4*/, 57 /*tnr_scaler_fp_1_1*/, 59 /*odr_tnr_scale_fp_yuv4n_1_4*/, 25 /*ifd_segmap_bnlm_1_4*/, 31 /*ifd_segmap_xnr_1_4*/, 36 /*ifd_segmap_acm_1_4*/, 49 /*ifd_segmap_tnr_bc_1_4*/, 53 /*ifd_segmap_tnr_blend_1_4*/, 60 /*ifd_segmap_cas_1_4*/, 26 /*smurf_bnlm_1_0*/, 32 /*smurf_xnr_1_0*/, 37 /*smurf_acm_1_0*/, 50 /*smurf_tnr_bc_1_0*/, 54 /*smurf_tnr_blend_1_0*/, 61 /*smurf_cas_1_0*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[27].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf3NoGmvWithTnrWithSapOuterNode::Init(LbffBayerPdaf3NoGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 61, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[61] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 43213 /*pext_1_0*/, 14488 /*rgb_ir_2_0*/, 44308 /*pafstatistics_1_2*/, 26892 /*odr_pdaf_1_4*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 35263 /*ifd_segmap_bnlm_1_4*/, 54924 /*smurf_bnlm_1_0*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 9241 /*ifd_segmap_xnr_1_4*/, 42329 /*smurf_xnr_1_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 51914 /*ifd_segmap_acm_1_4*/, 28366 /*smurf_acm_1_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 2495 /*tnr7_spatial_1_1*/, 29996 /*tnr_scaler_lb_1_1*/, 23639 /*tnr7_ims_1_2*/, 47873 /*ifd_segmap_tnr_bc_1_4*/, 13101 /*smurf_tnr_bc_1_0*/, 1502 /*tnr7_bc_1_2*/, 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, 14619 /*ifd_segmap_tnr_blend_1_4*/, 42749 /*smurf_tnr_blend_1_0*/, 20119 /*tnr7_blend_1_1*/, 5215 /*odr_tnr_fp_yuvn_1_4*/, 20623 /*tnr_scaler_fp_1_1*/, 28787 /*image_upscaler_1_1*/, 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/, 20893 /*ifd_segmap_cas_1_4*/, 37468 /*smurf_cas_1_0*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x1DFBB58C61FFF1F1, 0x0}; // { ifd_pipe_1_4[0], pext_1_0[4], rgb_ir_2_0[5], pafstatistics_1_2[6], odr_pdaf_1_4[7], ifd_lsc_1_4[8], rgbs_grid_1_1[12], ccm_3a_2_0[13], fr_grid_1_0[14], odr_awb_std_1_4[15], odr_awb_sat_1_4[16], aestatistics_2_1[17], odr_ae_1_4[18], odr_af_std_1_4[19], ifd_tnr_sp_bc_yuv4nm1_1_4[20], ifd_tnr_sp_bc_rs4nm1_1_4[21], ifd_tnr_fp_blend_yuvnm1_1_4[22], ifd_segmap_bnlm_1_4[23], smurf_bnlm_1_0[24], ifd_segmap_xnr_1_4[29], smurf_xnr_1_0[30], ifd_segmap_acm_1_4[34], smurf_acm_1_0[35], b2i_ds_1_1[39], lbff_crop_espa_1_4[40], tnr_scaler_lb_1_1[42], ifd_segmap_tnr_bc_1_4[44], smurf_tnr_bc_1_0[45], odr_tnr_sp_bc_rs4n_1_4[47], ifd_segmap_tnr_blend_1_4[48], smurf_tnr_blend_1_0[49], odr_tnr_fp_yuvn_1_4[51], tnr_scaler_fp_1_1[52], image_upscaler_1_1[53], odr_tnr_scale_fp_yuv4n_1_4[54], ifd_segmap_cas_1_4[55], smurf_cas_1_0[56], odr_ofs_mp_1_4[58], b2i_ds_output_1_1[59], odr_ofs_dp_1_4[60] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x13C77B1CE3FF83C2, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, pext_1_0, rgb_ir_2_0}[1], {pafstatistics_1_2}[2], {odr_pdaf_1_4}[3], {ifd_lsc_1_4}[4], {lsc_1_2, gd_2_2, wb_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0}[5], {odr_awb_std_1_4}[6], {odr_awb_sat_1_4}[7], {aestatistics_2_1}[8], {odr_ae_1_4}[9], {odr_af_std_1_4}[10], {ifd_tnr_sp_bc_yuv4nm1_1_4}[11], {ifd_tnr_sp_bc_rs4nm1_1_4}[12], {ifd_tnr_fp_blend_yuvnm1_1_4}[13], {ifd_segmap_bnlm_1_4}[14], {smurf_bnlm_1_0}[15], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[16], {ifd_segmap_xnr_1_4}[17], {smurf_xnr_1_0}[18], {xnr_5_4, vcr_3_1, glim_2_0}[19], {ifd_segmap_acm_1_4}[20], {smurf_acm_1_0}[21], {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[22], {lbff_crop_espa_1_4}[23], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[24], {tnr7_ims_1_2}[25], {ifd_segmap_tnr_bc_1_4}[26], {smurf_tnr_bc_1_0}[27], {tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[28], {ifd_segmap_tnr_blend_1_4}[29], {smurf_tnr_blend_1_0}[30], {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[31], {odr_tnr_scale_fp_yuv4n_1_4}[32], {ifd_segmap_cas_1_4}[33], {smurf_cas_1_0}[34], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[35], {odr_ofs_dp_1_4}[36] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x1FFFFF9CE3FFF3F3, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {pext_1_0}[2], {rgb_ir_2_0}[3], {pafstatistics_1_2}[4], {odr_pdaf_1_4}[5], {ifd_lsc_1_4}[6], {lsc_1_2, gd_2_2, wb_1_1}[7], {rgbs_grid_1_1}[8], {ccm_3a_2_0}[9], {fr_grid_1_0}[10], {odr_awb_std_1_4}[11], {odr_awb_sat_1_4}[12], {aestatistics_2_1}[13], {odr_ae_1_4}[14], {odr_af_std_1_4}[15], {ifd_tnr_sp_bc_yuv4nm1_1_4}[16], {ifd_tnr_sp_bc_rs4nm1_1_4}[17], {ifd_tnr_fp_blend_yuvnm1_1_4}[18], {ifd_segmap_bnlm_1_4}[19], {smurf_bnlm_1_0}[20], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[21], {ifd_segmap_xnr_1_4}[22], {smurf_xnr_1_0}[23], {xnr_5_4, vcr_3_1, glim_2_0}[24], {ifd_segmap_acm_1_4}[25], {smurf_acm_1_0}[26], {acm_1_2, gammatm_v4, csc_1_1}[27], {b2i_ds_1_1}[28], {lbff_crop_espa_1_4}[29], {tnr7_spatial_1_1}[30], {tnr_scaler_lb_1_1}[31], {tnr7_ims_1_2}[32], {ifd_segmap_tnr_bc_1_4}[33], {smurf_tnr_bc_1_0}[34], {tnr7_bc_1_2}[35], {odr_tnr_sp_bc_rs4n_1_4}[36], {ifd_segmap_tnr_blend_1_4}[37], {smurf_tnr_blend_1_0}[38], {tnr7_blend_1_1}[39], {odr_tnr_fp_yuvn_1_4}[40], {tnr_scaler_fp_1_1}[41], {image_upscaler_1_1}[42], {odr_tnr_scale_fp_yuv4n_1_4}[43], {ifd_segmap_cas_1_4}[44], {smurf_cas_1_0}[45], {cas_1_1}[46], {odr_ofs_mp_1_4}[47], {b2i_ds_output_1_1}[48], {odr_ofs_dp_1_4}[49] } + uint8_t systemApisSizes[61] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 24 /*pext_1_0*/, 0 /*rgb_ir_2_0*/, 8 /*pafstatistics_1_2*/, 220 /*odr_pdaf_1_4*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 220 /*ifd_segmap_bnlm_1_4*/, 0 /*smurf_bnlm_1_0*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 220 /*ifd_segmap_xnr_1_4*/, 0 /*smurf_xnr_1_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 220 /*ifd_segmap_acm_1_4*/, 0 /*smurf_acm_1_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*tnr7_spatial_1_1*/, 0 /*tnr_scaler_lb_1_1*/, 0 /*tnr7_ims_1_2*/, 220 /*ifd_segmap_tnr_bc_1_4*/, 0 /*smurf_tnr_bc_1_0*/, 5 /*tnr7_bc_1_2*/, 220 /*odr_tnr_sp_bc_rs4n_1_4*/, 220 /*ifd_segmap_tnr_blend_1_4*/, 0 /*smurf_tnr_blend_1_0*/, 5 /*tnr7_blend_1_1*/, 220 /*odr_tnr_fp_yuvn_1_4*/, 0 /*tnr_scaler_fp_1_1*/, 0 /*image_upscaler_1_1*/, 220 /*odr_tnr_scale_fp_yuv4n_1_4*/, 220 /*ifd_segmap_cas_1_4*/, 0 /*smurf_cas_1_0*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/}; + uint16_t runKernelConfigOrder[61] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 5 /*rgb_ir_2_0*/, 4 /*pext_1_0*/, 6 /*pafstatistics_1_2*/, 7 /*odr_pdaf_1_4*/, 8 /*ifd_lsc_1_4*/, 9 /*lsc_1_2*/, 10 /*gd_2_2*/, 11 /*wb_1_1*/, 25 /*bnlm_3_4*/, 26 /*bxt_demosaic*/, 27 /*vcsc_2_0_b*/, 28 /*gltm_2_0*/, 31 /*xnr_5_4*/, 32 /*vcr_3_1*/, 33 /*glim_2_0*/, 36 /*acm_1_2*/, 37 /*gammatm_v4*/, 38 /*csc_1_1*/, 39 /*b2i_ds_1_1*/, 40 /*lbff_crop_espa_1_4*/, 41 /*tnr7_spatial_1_1*/, 42 /*tnr_scaler_lb_1_1*/, 12 /*rgbs_grid_1_1*/, 15 /*odr_awb_std_1_4*/, 16 /*odr_awb_sat_1_4*/, 13 /*ccm_3a_2_0*/, 17 /*aestatistics_2_1*/, 18 /*odr_ae_1_4*/, 14 /*fr_grid_1_0*/, 19 /*odr_af_std_1_4*/, 20 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 21 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 43 /*tnr7_ims_1_2*/, 46 /*tnr7_bc_1_2*/, 47 /*odr_tnr_sp_bc_rs4n_1_4*/, 22 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 50 /*tnr7_blend_1_1*/, 53 /*image_upscaler_1_1*/, 57 /*cas_1_1*/, 58 /*odr_ofs_mp_1_4*/, 59 /*b2i_ds_output_1_1*/, 60 /*odr_ofs_dp_1_4*/, 51 /*odr_tnr_fp_yuvn_1_4*/, 52 /*tnr_scaler_fp_1_1*/, 54 /*odr_tnr_scale_fp_yuv4n_1_4*/, 23 /*ifd_segmap_bnlm_1_4*/, 29 /*ifd_segmap_xnr_1_4*/, 34 /*ifd_segmap_acm_1_4*/, 44 /*ifd_segmap_tnr_bc_1_4*/, 48 /*ifd_segmap_tnr_blend_1_4*/, 55 /*ifd_segmap_cas_1_4*/, 24 /*smurf_bnlm_1_0*/, 30 /*smurf_xnr_1_0*/, 35 /*smurf_acm_1_0*/, 45 /*smurf_tnr_bc_1_0*/, 49 /*smurf_tnr_blend_1_0*/, 56 /*smurf_cas_1_0*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[25].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode::Init(LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 63, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[63] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 54812 /*odr_dpc_pdaf_1_4*/, 14488 /*rgb_ir_2_0*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 22427 /*ifd_pdaf_1_4*/, 43213 /*pext_1_0*/, 44308 /*pafstatistics_1_2*/, 26892 /*odr_pdaf_1_4*/, 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 35263 /*ifd_segmap_bnlm_1_4*/, 54924 /*smurf_bnlm_1_0*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 9241 /*ifd_segmap_xnr_1_4*/, 42329 /*smurf_xnr_1_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 51914 /*ifd_segmap_acm_1_4*/, 28366 /*smurf_acm_1_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 2495 /*tnr7_spatial_1_1*/, 29996 /*tnr_scaler_lb_1_1*/, 23639 /*tnr7_ims_1_2*/, 47873 /*ifd_segmap_tnr_bc_1_4*/, 13101 /*smurf_tnr_bc_1_0*/, 1502 /*tnr7_bc_1_2*/, 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, 14619 /*ifd_segmap_tnr_blend_1_4*/, 42749 /*smurf_tnr_blend_1_0*/, 20119 /*tnr7_blend_1_1*/, 5215 /*odr_tnr_fp_yuvn_1_4*/, 20623 /*tnr_scaler_fp_1_1*/, 28787 /*image_upscaler_1_1*/, 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/, 20893 /*ifd_segmap_cas_1_4*/, 37468 /*smurf_cas_1_0*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x77EED63187FFFC71, 0x0}; // { ifd_pipe_1_4[0], odr_dpc_pdaf_1_4[4], rgb_ir_2_0[5], ifd_lsc_1_4[6], rgbs_grid_1_1[10], ccm_3a_2_0[11], fr_grid_1_0[12], odr_awb_std_1_4[13], odr_awb_sat_1_4[14], aestatistics_2_1[15], odr_ae_1_4[16], odr_af_std_1_4[17], ifd_pdaf_1_4[18], pext_1_0[19], pafstatistics_1_2[20], odr_pdaf_1_4[21], ifd_tnr_sp_bc_yuv4nm1_1_4[22], ifd_tnr_sp_bc_rs4nm1_1_4[23], ifd_tnr_fp_blend_yuvnm1_1_4[24], ifd_segmap_bnlm_1_4[25], smurf_bnlm_1_0[26], ifd_segmap_xnr_1_4[31], smurf_xnr_1_0[32], ifd_segmap_acm_1_4[36], smurf_acm_1_0[37], b2i_ds_1_1[41], lbff_crop_espa_1_4[42], tnr_scaler_lb_1_1[44], ifd_segmap_tnr_bc_1_4[46], smurf_tnr_bc_1_0[47], odr_tnr_sp_bc_rs4n_1_4[49], ifd_segmap_tnr_blend_1_4[50], smurf_tnr_blend_1_0[51], odr_tnr_fp_yuvn_1_4[53], tnr_scaler_fp_1_1[54], image_upscaler_1_1[55], odr_tnr_scale_fp_yuv4n_1_4[56], ifd_segmap_cas_1_4[57], smurf_cas_1_0[58], odr_ofs_mp_1_4[60], b2i_ds_output_1_1[61], odr_ofs_dp_1_4[62] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x4F1DEC738FFFE0C2, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, odr_dpc_pdaf_1_4, rgb_ir_2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sat_1_4}[5], {aestatistics_2_1}[6], {odr_ae_1_4}[7], {odr_af_std_1_4}[8], {ifd_pdaf_1_4}[9], {pext_1_0}[10], {pafstatistics_1_2}[11], {odr_pdaf_1_4}[12], {ifd_tnr_sp_bc_yuv4nm1_1_4}[13], {ifd_tnr_sp_bc_rs4nm1_1_4}[14], {ifd_tnr_fp_blend_yuvnm1_1_4}[15], {ifd_segmap_bnlm_1_4}[16], {smurf_bnlm_1_0}[17], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[18], {ifd_segmap_xnr_1_4}[19], {smurf_xnr_1_0}[20], {xnr_5_4, vcr_3_1, glim_2_0}[21], {ifd_segmap_acm_1_4}[22], {smurf_acm_1_0}[23], {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[24], {lbff_crop_espa_1_4}[25], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[26], {tnr7_ims_1_2}[27], {ifd_segmap_tnr_bc_1_4}[28], {smurf_tnr_bc_1_0}[29], {tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[30], {ifd_segmap_tnr_blend_1_4}[31], {smurf_tnr_blend_1_0}[32], {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[33], {odr_tnr_scale_fp_yuv4n_1_4}[34], {ifd_segmap_cas_1_4}[35], {smurf_cas_1_0}[36], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[37], {odr_ofs_dp_1_4}[38] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x7FFFFE738FFFFCF3, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {odr_dpc_pdaf_1_4}[2], {rgb_ir_2_0}[3], {ifd_lsc_1_4}[4], {lsc_1_2, gd_2_2, wb_1_1}[5], {rgbs_grid_1_1}[6], {ccm_3a_2_0}[7], {fr_grid_1_0}[8], {odr_awb_std_1_4}[9], {odr_awb_sat_1_4}[10], {aestatistics_2_1}[11], {odr_ae_1_4}[12], {odr_af_std_1_4}[13], {ifd_pdaf_1_4}[14], {pext_1_0}[15], {pafstatistics_1_2}[16], {odr_pdaf_1_4}[17], {ifd_tnr_sp_bc_yuv4nm1_1_4}[18], {ifd_tnr_sp_bc_rs4nm1_1_4}[19], {ifd_tnr_fp_blend_yuvnm1_1_4}[20], {ifd_segmap_bnlm_1_4}[21], {smurf_bnlm_1_0}[22], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[23], {ifd_segmap_xnr_1_4}[24], {smurf_xnr_1_0}[25], {xnr_5_4, vcr_3_1, glim_2_0}[26], {ifd_segmap_acm_1_4}[27], {smurf_acm_1_0}[28], {acm_1_2, gammatm_v4, csc_1_1}[29], {b2i_ds_1_1}[30], {lbff_crop_espa_1_4}[31], {tnr7_spatial_1_1}[32], {tnr_scaler_lb_1_1}[33], {tnr7_ims_1_2}[34], {ifd_segmap_tnr_bc_1_4}[35], {smurf_tnr_bc_1_0}[36], {tnr7_bc_1_2}[37], {odr_tnr_sp_bc_rs4n_1_4}[38], {ifd_segmap_tnr_blend_1_4}[39], {smurf_tnr_blend_1_0}[40], {tnr7_blend_1_1}[41], {odr_tnr_fp_yuvn_1_4}[42], {tnr_scaler_fp_1_1}[43], {image_upscaler_1_1}[44], {odr_tnr_scale_fp_yuv4n_1_4}[45], {ifd_segmap_cas_1_4}[46], {smurf_cas_1_0}[47], {cas_1_1}[48], {odr_ofs_mp_1_4}[49], {b2i_ds_output_1_1}[50], {odr_ofs_dp_1_4}[51] } + uint8_t systemApisSizes[63] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 220 /*odr_dpc_pdaf_1_4*/, 0 /*rgb_ir_2_0*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_pdaf_1_4*/, 24 /*pext_1_0*/, 8 /*pafstatistics_1_2*/, 220 /*odr_pdaf_1_4*/, 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 220 /*ifd_segmap_bnlm_1_4*/, 0 /*smurf_bnlm_1_0*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 220 /*ifd_segmap_xnr_1_4*/, 0 /*smurf_xnr_1_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 220 /*ifd_segmap_acm_1_4*/, 0 /*smurf_acm_1_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*tnr7_spatial_1_1*/, 0 /*tnr_scaler_lb_1_1*/, 0 /*tnr7_ims_1_2*/, 220 /*ifd_segmap_tnr_bc_1_4*/, 0 /*smurf_tnr_bc_1_0*/, 5 /*tnr7_bc_1_2*/, 220 /*odr_tnr_sp_bc_rs4n_1_4*/, 220 /*ifd_segmap_tnr_blend_1_4*/, 0 /*smurf_tnr_blend_1_0*/, 5 /*tnr7_blend_1_1*/, 220 /*odr_tnr_fp_yuvn_1_4*/, 0 /*tnr_scaler_fp_1_1*/, 0 /*image_upscaler_1_1*/, 220 /*odr_tnr_scale_fp_yuv4n_1_4*/, 220 /*ifd_segmap_cas_1_4*/, 0 /*smurf_cas_1_0*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/}; + uint16_t runKernelConfigOrder[63] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 5 /*rgb_ir_2_0*/, 4 /*odr_dpc_pdaf_1_4*/, 6 /*ifd_lsc_1_4*/, 7 /*lsc_1_2*/, 8 /*gd_2_2*/, 9 /*wb_1_1*/, 27 /*bnlm_3_4*/, 28 /*bxt_demosaic*/, 29 /*vcsc_2_0_b*/, 30 /*gltm_2_0*/, 33 /*xnr_5_4*/, 34 /*vcr_3_1*/, 35 /*glim_2_0*/, 38 /*acm_1_2*/, 39 /*gammatm_v4*/, 40 /*csc_1_1*/, 41 /*b2i_ds_1_1*/, 42 /*lbff_crop_espa_1_4*/, 43 /*tnr7_spatial_1_1*/, 44 /*tnr_scaler_lb_1_1*/, 10 /*rgbs_grid_1_1*/, 13 /*odr_awb_std_1_4*/, 14 /*odr_awb_sat_1_4*/, 11 /*ccm_3a_2_0*/, 15 /*aestatistics_2_1*/, 16 /*odr_ae_1_4*/, 12 /*fr_grid_1_0*/, 17 /*odr_af_std_1_4*/, 18 /*ifd_pdaf_1_4*/, 19 /*pext_1_0*/, 20 /*pafstatistics_1_2*/, 21 /*odr_pdaf_1_4*/, 22 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 23 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 45 /*tnr7_ims_1_2*/, 48 /*tnr7_bc_1_2*/, 49 /*odr_tnr_sp_bc_rs4n_1_4*/, 24 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 52 /*tnr7_blend_1_1*/, 55 /*image_upscaler_1_1*/, 59 /*cas_1_1*/, 60 /*odr_ofs_mp_1_4*/, 61 /*b2i_ds_output_1_1*/, 62 /*odr_ofs_dp_1_4*/, 53 /*odr_tnr_fp_yuvn_1_4*/, 54 /*tnr_scaler_fp_1_1*/, 56 /*odr_tnr_scale_fp_yuv4n_1_4*/, 25 /*ifd_segmap_bnlm_1_4*/, 31 /*ifd_segmap_xnr_1_4*/, 36 /*ifd_segmap_acm_1_4*/, 46 /*ifd_segmap_tnr_bc_1_4*/, 50 /*ifd_segmap_tnr_blend_1_4*/, 57 /*ifd_segmap_cas_1_4*/, 26 /*smurf_bnlm_1_0*/, 32 /*smurf_xnr_1_0*/, 37 /*smurf_acm_1_0*/, 47 /*smurf_tnr_bc_1_0*/, 51 /*smurf_tnr_blend_1_0*/, 58 /*smurf_cas_1_0*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[27].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void IsysPdaf2OuterNode::Init(IsysPdaf2OuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(2, NodeTypes::Isys, 2, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[2] = {11470 /*is_odr_a*/, 55449 /*is_odr_b*/}; + uint64_t kernelsRcbBitmap[] = {0x3, 0x0}; // { is_odr_a[0], is_odr_b[1] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x2, 0x0}; // {{is_odr_a}[0], {is_odr_b}[1] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x3, 0x0}; // {{is_odr_a}[0], {is_odr_b}[1] } + uint8_t systemApisSizes[2] = {0 /*is_odr_a*/, 0 /*is_odr_b*/}; + uint16_t runKernelConfigOrder[2] = {0 /*is_odr_a*/, 1 /*is_odr_b*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, nullptr, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf2NoGmvNoTnrNoSapOuterNode::Init(LbffBayerPdaf2NoGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 38, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[38] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 14488 /*rgb_ir_2_0*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 28787 /*image_upscaler_1_1*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 22427 /*ifd_pdaf_1_4*/, 43213 /*pext_1_0*/, 44308 /*pafstatistics_1_2*/, 26892 /*odr_pdaf_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x3FFDF80031, 0x0}; // { ifd_pipe_1_4[0], rgb_ir_2_0[4], ifd_lsc_1_4[5], rgbs_grid_1_1[19], ccm_3a_2_0[20], fr_grid_1_0[21], b2i_ds_1_1[22], lbff_crop_espa_1_4[23], image_upscaler_1_1[24], odr_ofs_mp_1_4[26], b2i_ds_output_1_1[27], odr_ofs_dp_1_4[28], odr_awb_std_1_4[29], odr_awb_sat_1_4[30], aestatistics_2_1[31], odr_ae_1_4[32], odr_af_std_1_4[33], ifd_pdaf_1_4[34], pext_1_0[35], pafstatistics_1_2[36], odr_pdaf_1_4[37] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x3FF3800062, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgb_ir_2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[3], {lbff_crop_espa_1_4}[4], {image_upscaler_1_1}[5], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[6], {odr_ofs_dp_1_4}[7], {odr_awb_std_1_4}[8], {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], {odr_ae_1_4}[11], {odr_af_std_1_4}[12], {ifd_pdaf_1_4}[13], {pext_1_0}[14], {pafstatistics_1_2}[15], {odr_pdaf_1_4}[16] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x3FFFF80073, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgb_ir_2_0}[2], {ifd_lsc_1_4}[3], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[4], {rgbs_grid_1_1}[5], {ccm_3a_2_0}[6], {fr_grid_1_0}[7], {b2i_ds_1_1}[8], {lbff_crop_espa_1_4}[9], {image_upscaler_1_1}[10], {cas_1_1}[11], {odr_ofs_mp_1_4}[12], {b2i_ds_output_1_1}[13], {odr_ofs_dp_1_4}[14], {odr_awb_std_1_4}[15], {odr_awb_sat_1_4}[16], {aestatistics_2_1}[17], {odr_ae_1_4}[18], {odr_af_std_1_4}[19], {ifd_pdaf_1_4}[20], {pext_1_0}[21], {pafstatistics_1_2}[22], {odr_pdaf_1_4}[23] } + uint8_t systemApisSizes[38] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 0 /*rgb_ir_2_0*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*image_upscaler_1_1*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_pdaf_1_4*/, 24 /*pext_1_0*/, 8 /*pafstatistics_1_2*/, 220 /*odr_pdaf_1_4*/}; + uint16_t runKernelConfigOrder[38] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 4 /*rgb_ir_2_0*/, 5 /*ifd_lsc_1_4*/, 6 /*lsc_1_2*/, 7 /*gd_2_2*/, 8 /*wb_1_1*/, 9 /*bnlm_3_4*/, 10 /*bxt_demosaic*/, 11 /*vcsc_2_0_b*/, 12 /*gltm_2_0*/, 13 /*xnr_5_4*/, 14 /*vcr_3_1*/, 15 /*glim_2_0*/, 16 /*acm_1_2*/, 17 /*gammatm_v4*/, 18 /*csc_1_1*/, 22 /*b2i_ds_1_1*/, 23 /*lbff_crop_espa_1_4*/, 24 /*image_upscaler_1_1*/, 25 /*cas_1_1*/, 26 /*odr_ofs_mp_1_4*/, 27 /*b2i_ds_output_1_1*/, 28 /*odr_ofs_dp_1_4*/, 19 /*rgbs_grid_1_1*/, 29 /*odr_awb_std_1_4*/, 30 /*odr_awb_sat_1_4*/, 20 /*ccm_3a_2_0*/, 31 /*aestatistics_2_1*/, 32 /*odr_ae_1_4*/, 21 /*fr_grid_1_0*/, 33 /*odr_af_std_1_4*/, 34 /*ifd_pdaf_1_4*/, 35 /*pext_1_0*/, 36 /*pafstatistics_1_2*/, 37 /*odr_pdaf_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[9].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf2WithGmvNoTnrNoSapOuterNode::Init(LbffBayerPdaf2WithGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 42, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[42] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 14488 /*rgb_ir_2_0*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 28787 /*image_upscaler_1_1*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 22427 /*ifd_pdaf_1_4*/, 43213 /*pext_1_0*/, 44308 /*pafstatistics_1_2*/, 26892 /*odr_pdaf_1_4*/, 51073 /*ifd_gmv_1_4*/, 40280 /*gmv_statistics_1_1*/, 7416 /*odr_gmv_feature_1_4*/, 41148 /*odr_gmv_match_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x3FFFDF80031, 0x0}; // { ifd_pipe_1_4[0], rgb_ir_2_0[4], ifd_lsc_1_4[5], rgbs_grid_1_1[19], ccm_3a_2_0[20], fr_grid_1_0[21], b2i_ds_1_1[22], lbff_crop_espa_1_4[23], image_upscaler_1_1[24], odr_ofs_mp_1_4[26], b2i_ds_output_1_1[27], odr_ofs_dp_1_4[28], odr_awb_std_1_4[29], odr_awb_sat_1_4[30], aestatistics_2_1[31], odr_ae_1_4[32], odr_af_std_1_4[33], ifd_pdaf_1_4[34], pext_1_0[35], pafstatistics_1_2[36], odr_pdaf_1_4[37], ifd_gmv_1_4[38], gmv_statistics_1_1[39], odr_gmv_feature_1_4[40], odr_gmv_match_1_4[41] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x3FFF3800062, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgb_ir_2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[3], {lbff_crop_espa_1_4}[4], {image_upscaler_1_1}[5], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[6], {odr_ofs_dp_1_4}[7], {odr_awb_std_1_4}[8], {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], {odr_ae_1_4}[11], {odr_af_std_1_4}[12], {ifd_pdaf_1_4}[13], {pext_1_0}[14], {pafstatistics_1_2}[15], {odr_pdaf_1_4}[16], {ifd_gmv_1_4}[17], {gmv_statistics_1_1}[18], {odr_gmv_feature_1_4}[19], {odr_gmv_match_1_4}[20] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x3FFFFF80073, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgb_ir_2_0}[2], {ifd_lsc_1_4}[3], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[4], {rgbs_grid_1_1}[5], {ccm_3a_2_0}[6], {fr_grid_1_0}[7], {b2i_ds_1_1}[8], {lbff_crop_espa_1_4}[9], {image_upscaler_1_1}[10], {cas_1_1}[11], {odr_ofs_mp_1_4}[12], {b2i_ds_output_1_1}[13], {odr_ofs_dp_1_4}[14], {odr_awb_std_1_4}[15], {odr_awb_sat_1_4}[16], {aestatistics_2_1}[17], {odr_ae_1_4}[18], {odr_af_std_1_4}[19], {ifd_pdaf_1_4}[20], {pext_1_0}[21], {pafstatistics_1_2}[22], {odr_pdaf_1_4}[23], {ifd_gmv_1_4}[24], {gmv_statistics_1_1}[25], {odr_gmv_feature_1_4}[26], {odr_gmv_match_1_4}[27] } + uint8_t systemApisSizes[42] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 0 /*rgb_ir_2_0*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*image_upscaler_1_1*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_pdaf_1_4*/, 24 /*pext_1_0*/, 8 /*pafstatistics_1_2*/, 220 /*odr_pdaf_1_4*/, 220 /*ifd_gmv_1_4*/, 32 /*gmv_statistics_1_1*/, 220 /*odr_gmv_feature_1_4*/, 220 /*odr_gmv_match_1_4*/}; + uint16_t runKernelConfigOrder[42] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 4 /*rgb_ir_2_0*/, 5 /*ifd_lsc_1_4*/, 6 /*lsc_1_2*/, 7 /*gd_2_2*/, 8 /*wb_1_1*/, 9 /*bnlm_3_4*/, 10 /*bxt_demosaic*/, 11 /*vcsc_2_0_b*/, 12 /*gltm_2_0*/, 13 /*xnr_5_4*/, 14 /*vcr_3_1*/, 15 /*glim_2_0*/, 16 /*acm_1_2*/, 17 /*gammatm_v4*/, 18 /*csc_1_1*/, 22 /*b2i_ds_1_1*/, 23 /*lbff_crop_espa_1_4*/, 24 /*image_upscaler_1_1*/, 25 /*cas_1_1*/, 26 /*odr_ofs_mp_1_4*/, 27 /*b2i_ds_output_1_1*/, 28 /*odr_ofs_dp_1_4*/, 19 /*rgbs_grid_1_1*/, 29 /*odr_awb_std_1_4*/, 30 /*odr_awb_sat_1_4*/, 20 /*ccm_3a_2_0*/, 31 /*aestatistics_2_1*/, 32 /*odr_ae_1_4*/, 21 /*fr_grid_1_0*/, 33 /*odr_af_std_1_4*/, 34 /*ifd_pdaf_1_4*/, 35 /*pext_1_0*/, 36 /*pafstatistics_1_2*/, 37 /*odr_pdaf_1_4*/, 38 /*ifd_gmv_1_4*/, 39 /*gmv_statistics_1_1*/, 40 /*odr_gmv_feature_1_4*/, 41 /*odr_gmv_match_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[9].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf2NoGmvWithTnrNoSapOuterNode::Init(LbffBayerPdaf2NoGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 50, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[50] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 14488 /*rgb_ir_2_0*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 2495 /*tnr7_spatial_1_1*/, 29996 /*tnr_scaler_lb_1_1*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 22427 /*ifd_pdaf_1_4*/, 43213 /*pext_1_0*/, 44308 /*pafstatistics_1_2*/, 26892 /*odr_pdaf_1_4*/, 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 23639 /*tnr7_ims_1_2*/, 1502 /*tnr7_bc_1_2*/, 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 20119 /*tnr7_blend_1_1*/, 5215 /*odr_tnr_fp_yuvn_1_4*/, 20623 /*tnr_scaler_fp_1_1*/, 28787 /*image_upscaler_1_1*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/, 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x3DD9FFEF80031, 0x0}; // { ifd_pipe_1_4[0], rgb_ir_2_0[4], ifd_lsc_1_4[5], rgbs_grid_1_1[19], ccm_3a_2_0[20], fr_grid_1_0[21], b2i_ds_1_1[22], lbff_crop_espa_1_4[23], tnr_scaler_lb_1_1[25], odr_awb_std_1_4[26], odr_awb_sat_1_4[27], aestatistics_2_1[28], odr_ae_1_4[29], odr_af_std_1_4[30], ifd_pdaf_1_4[31], pext_1_0[32], pafstatistics_1_2[33], odr_pdaf_1_4[34], ifd_tnr_sp_bc_yuv4nm1_1_4[35], ifd_tnr_sp_bc_rs4nm1_1_4[36], odr_tnr_sp_bc_rs4n_1_4[39], ifd_tnr_fp_blend_yuvnm1_1_4[40], odr_tnr_fp_yuvn_1_4[42], tnr_scaler_fp_1_1[43], image_upscaler_1_1[44], odr_ofs_mp_1_4[46], b2i_ds_output_1_1[47], odr_ofs_dp_1_4[48], odr_tnr_scale_fp_yuv4n_1_4[49] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x3233FFD800062, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgb_ir_2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[3], {lbff_crop_espa_1_4}[4], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[5], {odr_awb_std_1_4}[6], {odr_awb_sat_1_4}[7], {aestatistics_2_1}[8], {odr_ae_1_4}[9], {odr_af_std_1_4}[10], {ifd_pdaf_1_4}[11], {pext_1_0}[12], {pafstatistics_1_2}[13], {odr_pdaf_1_4}[14], {ifd_tnr_sp_bc_yuv4nm1_1_4}[15], {ifd_tnr_sp_bc_rs4nm1_1_4}[16], {tnr7_ims_1_2, tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[17], {ifd_tnr_fp_blend_yuvnm1_1_4}[18], {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[19], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[20], {odr_ofs_dp_1_4}[21], {odr_tnr_scale_fp_yuv4n_1_4}[22] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x3FFBFFFF80073, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgb_ir_2_0}[2], {ifd_lsc_1_4}[3], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[4], {rgbs_grid_1_1}[5], {ccm_3a_2_0}[6], {fr_grid_1_0}[7], {b2i_ds_1_1}[8], {lbff_crop_espa_1_4}[9], {tnr7_spatial_1_1}[10], {tnr_scaler_lb_1_1}[11], {odr_awb_std_1_4}[12], {odr_awb_sat_1_4}[13], {aestatistics_2_1}[14], {odr_ae_1_4}[15], {odr_af_std_1_4}[16], {ifd_pdaf_1_4}[17], {pext_1_0}[18], {pafstatistics_1_2}[19], {odr_pdaf_1_4}[20], {ifd_tnr_sp_bc_yuv4nm1_1_4}[21], {ifd_tnr_sp_bc_rs4nm1_1_4}[22], {tnr7_ims_1_2, tnr7_bc_1_2}[23], {odr_tnr_sp_bc_rs4n_1_4}[24], {ifd_tnr_fp_blend_yuvnm1_1_4}[25], {tnr7_blend_1_1}[26], {odr_tnr_fp_yuvn_1_4}[27], {tnr_scaler_fp_1_1}[28], {image_upscaler_1_1}[29], {cas_1_1}[30], {odr_ofs_mp_1_4}[31], {b2i_ds_output_1_1}[32], {odr_ofs_dp_1_4}[33], {odr_tnr_scale_fp_yuv4n_1_4}[34] } + uint8_t systemApisSizes[50] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 0 /*rgb_ir_2_0*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*tnr7_spatial_1_1*/, 0 /*tnr_scaler_lb_1_1*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_pdaf_1_4*/, 24 /*pext_1_0*/, 8 /*pafstatistics_1_2*/, 220 /*odr_pdaf_1_4*/, 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 0 /*tnr7_ims_1_2*/, 5 /*tnr7_bc_1_2*/, 220 /*odr_tnr_sp_bc_rs4n_1_4*/, 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 5 /*tnr7_blend_1_1*/, 220 /*odr_tnr_fp_yuvn_1_4*/, 0 /*tnr_scaler_fp_1_1*/, 0 /*image_upscaler_1_1*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/, 220 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint16_t runKernelConfigOrder[50] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 4 /*rgb_ir_2_0*/, 5 /*ifd_lsc_1_4*/, 6 /*lsc_1_2*/, 7 /*gd_2_2*/, 8 /*wb_1_1*/, 9 /*bnlm_3_4*/, 10 /*bxt_demosaic*/, 11 /*vcsc_2_0_b*/, 12 /*gltm_2_0*/, 13 /*xnr_5_4*/, 14 /*vcr_3_1*/, 15 /*glim_2_0*/, 16 /*acm_1_2*/, 17 /*gammatm_v4*/, 18 /*csc_1_1*/, 22 /*b2i_ds_1_1*/, 23 /*lbff_crop_espa_1_4*/, 24 /*tnr7_spatial_1_1*/, 25 /*tnr_scaler_lb_1_1*/, 19 /*rgbs_grid_1_1*/, 26 /*odr_awb_std_1_4*/, 27 /*odr_awb_sat_1_4*/, 20 /*ccm_3a_2_0*/, 28 /*aestatistics_2_1*/, 29 /*odr_ae_1_4*/, 21 /*fr_grid_1_0*/, 30 /*odr_af_std_1_4*/, 31 /*ifd_pdaf_1_4*/, 32 /*pext_1_0*/, 33 /*pafstatistics_1_2*/, 34 /*odr_pdaf_1_4*/, 35 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 36 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 37 /*tnr7_ims_1_2*/, 38 /*tnr7_bc_1_2*/, 39 /*odr_tnr_sp_bc_rs4n_1_4*/, 40 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 41 /*tnr7_blend_1_1*/, 44 /*image_upscaler_1_1*/, 45 /*cas_1_1*/, 46 /*odr_ofs_mp_1_4*/, 47 /*b2i_ds_output_1_1*/, 48 /*odr_ofs_dp_1_4*/, 42 /*odr_tnr_fp_yuvn_1_4*/, 43 /*tnr_scaler_fp_1_1*/, 49 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[9].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf2WithGmvWithTnrNoSapOuterNode::Init(LbffBayerPdaf2WithGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 54, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[54] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 14488 /*rgb_ir_2_0*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 2495 /*tnr7_spatial_1_1*/, 29996 /*tnr_scaler_lb_1_1*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 22427 /*ifd_pdaf_1_4*/, 43213 /*pext_1_0*/, 44308 /*pafstatistics_1_2*/, 26892 /*odr_pdaf_1_4*/, 51073 /*ifd_gmv_1_4*/, 40280 /*gmv_statistics_1_1*/, 7416 /*odr_gmv_feature_1_4*/, 41148 /*odr_gmv_match_1_4*/, 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 23639 /*tnr7_ims_1_2*/, 1502 /*tnr7_bc_1_2*/, 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 20119 /*tnr7_blend_1_1*/, 5215 /*odr_tnr_fp_yuvn_1_4*/, 20623 /*tnr_scaler_fp_1_1*/, 28787 /*image_upscaler_1_1*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/, 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x3DD9FFFEF80031, 0x0}; // { ifd_pipe_1_4[0], rgb_ir_2_0[4], ifd_lsc_1_4[5], rgbs_grid_1_1[19], ccm_3a_2_0[20], fr_grid_1_0[21], b2i_ds_1_1[22], lbff_crop_espa_1_4[23], tnr_scaler_lb_1_1[25], odr_awb_std_1_4[26], odr_awb_sat_1_4[27], aestatistics_2_1[28], odr_ae_1_4[29], odr_af_std_1_4[30], ifd_pdaf_1_4[31], pext_1_0[32], pafstatistics_1_2[33], odr_pdaf_1_4[34], ifd_gmv_1_4[35], gmv_statistics_1_1[36], odr_gmv_feature_1_4[37], odr_gmv_match_1_4[38], ifd_tnr_sp_bc_yuv4nm1_1_4[39], ifd_tnr_sp_bc_rs4nm1_1_4[40], odr_tnr_sp_bc_rs4n_1_4[43], ifd_tnr_fp_blend_yuvnm1_1_4[44], odr_tnr_fp_yuvn_1_4[46], tnr_scaler_fp_1_1[47], image_upscaler_1_1[48], odr_ofs_mp_1_4[50], b2i_ds_output_1_1[51], odr_ofs_dp_1_4[52], odr_tnr_scale_fp_yuv4n_1_4[53] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x3233FFFD800062, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgb_ir_2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[3], {lbff_crop_espa_1_4}[4], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[5], {odr_awb_std_1_4}[6], {odr_awb_sat_1_4}[7], {aestatistics_2_1}[8], {odr_ae_1_4}[9], {odr_af_std_1_4}[10], {ifd_pdaf_1_4}[11], {pext_1_0}[12], {pafstatistics_1_2}[13], {odr_pdaf_1_4}[14], {ifd_gmv_1_4}[15], {gmv_statistics_1_1}[16], {odr_gmv_feature_1_4}[17], {odr_gmv_match_1_4}[18], {ifd_tnr_sp_bc_yuv4nm1_1_4}[19], {ifd_tnr_sp_bc_rs4nm1_1_4}[20], {tnr7_ims_1_2, tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[21], {ifd_tnr_fp_blend_yuvnm1_1_4}[22], {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[23], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[24], {odr_ofs_dp_1_4}[25], {odr_tnr_scale_fp_yuv4n_1_4}[26] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x3FFBFFFFF80073, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgb_ir_2_0}[2], {ifd_lsc_1_4}[3], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[4], {rgbs_grid_1_1}[5], {ccm_3a_2_0}[6], {fr_grid_1_0}[7], {b2i_ds_1_1}[8], {lbff_crop_espa_1_4}[9], {tnr7_spatial_1_1}[10], {tnr_scaler_lb_1_1}[11], {odr_awb_std_1_4}[12], {odr_awb_sat_1_4}[13], {aestatistics_2_1}[14], {odr_ae_1_4}[15], {odr_af_std_1_4}[16], {ifd_pdaf_1_4}[17], {pext_1_0}[18], {pafstatistics_1_2}[19], {odr_pdaf_1_4}[20], {ifd_gmv_1_4}[21], {gmv_statistics_1_1}[22], {odr_gmv_feature_1_4}[23], {odr_gmv_match_1_4}[24], {ifd_tnr_sp_bc_yuv4nm1_1_4}[25], {ifd_tnr_sp_bc_rs4nm1_1_4}[26], {tnr7_ims_1_2, tnr7_bc_1_2}[27], {odr_tnr_sp_bc_rs4n_1_4}[28], {ifd_tnr_fp_blend_yuvnm1_1_4}[29], {tnr7_blend_1_1}[30], {odr_tnr_fp_yuvn_1_4}[31], {tnr_scaler_fp_1_1}[32], {image_upscaler_1_1}[33], {cas_1_1}[34], {odr_ofs_mp_1_4}[35], {b2i_ds_output_1_1}[36], {odr_ofs_dp_1_4}[37], {odr_tnr_scale_fp_yuv4n_1_4}[38] } + uint8_t systemApisSizes[54] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 0 /*rgb_ir_2_0*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*tnr7_spatial_1_1*/, 0 /*tnr_scaler_lb_1_1*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_pdaf_1_4*/, 24 /*pext_1_0*/, 8 /*pafstatistics_1_2*/, 220 /*odr_pdaf_1_4*/, 220 /*ifd_gmv_1_4*/, 32 /*gmv_statistics_1_1*/, 220 /*odr_gmv_feature_1_4*/, 220 /*odr_gmv_match_1_4*/, 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 0 /*tnr7_ims_1_2*/, 5 /*tnr7_bc_1_2*/, 220 /*odr_tnr_sp_bc_rs4n_1_4*/, 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 5 /*tnr7_blend_1_1*/, 220 /*odr_tnr_fp_yuvn_1_4*/, 0 /*tnr_scaler_fp_1_1*/, 0 /*image_upscaler_1_1*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/, 220 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint16_t runKernelConfigOrder[54] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 4 /*rgb_ir_2_0*/, 5 /*ifd_lsc_1_4*/, 6 /*lsc_1_2*/, 7 /*gd_2_2*/, 8 /*wb_1_1*/, 9 /*bnlm_3_4*/, 10 /*bxt_demosaic*/, 11 /*vcsc_2_0_b*/, 12 /*gltm_2_0*/, 13 /*xnr_5_4*/, 14 /*vcr_3_1*/, 15 /*glim_2_0*/, 16 /*acm_1_2*/, 17 /*gammatm_v4*/, 18 /*csc_1_1*/, 22 /*b2i_ds_1_1*/, 23 /*lbff_crop_espa_1_4*/, 24 /*tnr7_spatial_1_1*/, 25 /*tnr_scaler_lb_1_1*/, 19 /*rgbs_grid_1_1*/, 26 /*odr_awb_std_1_4*/, 27 /*odr_awb_sat_1_4*/, 20 /*ccm_3a_2_0*/, 28 /*aestatistics_2_1*/, 29 /*odr_ae_1_4*/, 21 /*fr_grid_1_0*/, 30 /*odr_af_std_1_4*/, 31 /*ifd_pdaf_1_4*/, 32 /*pext_1_0*/, 33 /*pafstatistics_1_2*/, 34 /*odr_pdaf_1_4*/, 35 /*ifd_gmv_1_4*/, 36 /*gmv_statistics_1_1*/, 37 /*odr_gmv_feature_1_4*/, 38 /*odr_gmv_match_1_4*/, 39 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 40 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 41 /*tnr7_ims_1_2*/, 42 /*tnr7_bc_1_2*/, 43 /*odr_tnr_sp_bc_rs4n_1_4*/, 44 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 45 /*tnr7_blend_1_1*/, 48 /*image_upscaler_1_1*/, 49 /*cas_1_1*/, 50 /*odr_ofs_mp_1_4*/, 51 /*b2i_ds_output_1_1*/, 52 /*odr_ofs_dp_1_4*/, 46 /*odr_tnr_fp_yuvn_1_4*/, 47 /*tnr_scaler_fp_1_1*/, 53 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[9].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf2WithGmvWithTnrWithSapOuterNode::Init(LbffBayerPdaf2WithGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 66, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[66] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 14488 /*rgb_ir_2_0*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 22427 /*ifd_pdaf_1_4*/, 43213 /*pext_1_0*/, 44308 /*pafstatistics_1_2*/, 26892 /*odr_pdaf_1_4*/, 51073 /*ifd_gmv_1_4*/, 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 35263 /*ifd_segmap_bnlm_1_4*/, 54924 /*smurf_bnlm_1_0*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 9241 /*ifd_segmap_xnr_1_4*/, 42329 /*smurf_xnr_1_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 51914 /*ifd_segmap_acm_1_4*/, 28366 /*smurf_acm_1_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 2495 /*tnr7_spatial_1_1*/, 29996 /*tnr_scaler_lb_1_1*/, 23639 /*tnr7_ims_1_2*/, 40280 /*gmv_statistics_1_1*/, 7416 /*odr_gmv_feature_1_4*/, 41148 /*odr_gmv_match_1_4*/, 47873 /*ifd_segmap_tnr_bc_1_4*/, 13101 /*smurf_tnr_bc_1_0*/, 1502 /*tnr7_bc_1_2*/, 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, 14619 /*ifd_segmap_tnr_blend_1_4*/, 42749 /*smurf_tnr_blend_1_0*/, 20119 /*tnr7_blend_1_1*/, 5215 /*odr_tnr_fp_yuvn_1_4*/, 20623 /*tnr_scaler_fp_1_1*/, 28787 /*image_upscaler_1_1*/, 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/, 20893 /*ifd_segmap_cas_1_4*/, 37468 /*smurf_cas_1_0*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0xBF77D63187FFFE31, 0x3}; // { ifd_pipe_1_4[0], rgb_ir_2_0[4], ifd_lsc_1_4[5], rgbs_grid_1_1[9], ccm_3a_2_0[10], fr_grid_1_0[11], odr_awb_std_1_4[12], odr_awb_sat_1_4[13], aestatistics_2_1[14], odr_ae_1_4[15], odr_af_std_1_4[16], ifd_pdaf_1_4[17], pext_1_0[18], pafstatistics_1_2[19], odr_pdaf_1_4[20], ifd_gmv_1_4[21], ifd_tnr_sp_bc_yuv4nm1_1_4[22], ifd_tnr_sp_bc_rs4nm1_1_4[23], ifd_tnr_fp_blend_yuvnm1_1_4[24], ifd_segmap_bnlm_1_4[25], smurf_bnlm_1_0[26], ifd_segmap_xnr_1_4[31], smurf_xnr_1_0[32], ifd_segmap_acm_1_4[36], smurf_acm_1_0[37], b2i_ds_1_1[41], lbff_crop_espa_1_4[42], tnr_scaler_lb_1_1[44], gmv_statistics_1_1[46], odr_gmv_feature_1_4[47], odr_gmv_match_1_4[48], ifd_segmap_tnr_bc_1_4[49], smurf_tnr_bc_1_0[50], odr_tnr_sp_bc_rs4n_1_4[52], ifd_segmap_tnr_blend_1_4[53], smurf_tnr_blend_1_0[54], odr_tnr_fp_yuvn_1_4[56], tnr_scaler_fp_1_1[57], image_upscaler_1_1[58], odr_tnr_scale_fp_yuv4n_1_4[59], ifd_segmap_cas_1_4[60], smurf_cas_1_0[61], odr_ofs_mp_1_4[63], b2i_ds_output_1_1[64], odr_ofs_dp_1_4[65] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x78EFEC738FFFF062, 0x2}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgb_ir_2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sat_1_4}[5], {aestatistics_2_1}[6], {odr_ae_1_4}[7], {odr_af_std_1_4}[8], {ifd_pdaf_1_4}[9], {pext_1_0}[10], {pafstatistics_1_2}[11], {odr_pdaf_1_4}[12], {ifd_gmv_1_4}[13], {ifd_tnr_sp_bc_yuv4nm1_1_4}[14], {ifd_tnr_sp_bc_rs4nm1_1_4}[15], {ifd_tnr_fp_blend_yuvnm1_1_4}[16], {ifd_segmap_bnlm_1_4}[17], {smurf_bnlm_1_0}[18], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[19], {ifd_segmap_xnr_1_4}[20], {smurf_xnr_1_0}[21], {xnr_5_4, vcr_3_1, glim_2_0}[22], {ifd_segmap_acm_1_4}[23], {smurf_acm_1_0}[24], {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[25], {lbff_crop_espa_1_4}[26], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[27], {tnr7_ims_1_2}[28], {gmv_statistics_1_1}[29], {odr_gmv_feature_1_4}[30], {odr_gmv_match_1_4}[31], {ifd_segmap_tnr_bc_1_4}[32], {smurf_tnr_bc_1_0}[33], {tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[34], {ifd_segmap_tnr_blend_1_4}[35], {smurf_tnr_blend_1_0}[36], {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[37], {odr_tnr_scale_fp_yuv4n_1_4}[38], {ifd_segmap_cas_1_4}[39], {smurf_cas_1_0}[40], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[41], {odr_ofs_dp_1_4}[42] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0xFFFFFE738FFFFE73, 0x3}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgb_ir_2_0}[2], {ifd_lsc_1_4}[3], {lsc_1_2, gd_2_2, wb_1_1}[4], {rgbs_grid_1_1}[5], {ccm_3a_2_0}[6], {fr_grid_1_0}[7], {odr_awb_std_1_4}[8], {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], {odr_ae_1_4}[11], {odr_af_std_1_4}[12], {ifd_pdaf_1_4}[13], {pext_1_0}[14], {pafstatistics_1_2}[15], {odr_pdaf_1_4}[16], {ifd_gmv_1_4}[17], {ifd_tnr_sp_bc_yuv4nm1_1_4}[18], {ifd_tnr_sp_bc_rs4nm1_1_4}[19], {ifd_tnr_fp_blend_yuvnm1_1_4}[20], {ifd_segmap_bnlm_1_4}[21], {smurf_bnlm_1_0}[22], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[23], {ifd_segmap_xnr_1_4}[24], {smurf_xnr_1_0}[25], {xnr_5_4, vcr_3_1, glim_2_0}[26], {ifd_segmap_acm_1_4}[27], {smurf_acm_1_0}[28], {acm_1_2, gammatm_v4, csc_1_1}[29], {b2i_ds_1_1}[30], {lbff_crop_espa_1_4}[31], {tnr7_spatial_1_1}[32], {tnr_scaler_lb_1_1}[33], {tnr7_ims_1_2}[34], {gmv_statistics_1_1}[35], {odr_gmv_feature_1_4}[36], {odr_gmv_match_1_4}[37], {ifd_segmap_tnr_bc_1_4}[38], {smurf_tnr_bc_1_0}[39], {tnr7_bc_1_2}[40], {odr_tnr_sp_bc_rs4n_1_4}[41], {ifd_segmap_tnr_blend_1_4}[42], {smurf_tnr_blend_1_0}[43], {tnr7_blend_1_1}[44], {odr_tnr_fp_yuvn_1_4}[45], {tnr_scaler_fp_1_1}[46], {image_upscaler_1_1}[47], {odr_tnr_scale_fp_yuv4n_1_4}[48], {ifd_segmap_cas_1_4}[49], {smurf_cas_1_0}[50], {cas_1_1}[51], {odr_ofs_mp_1_4}[52], {b2i_ds_output_1_1}[53], {odr_ofs_dp_1_4}[54] } + uint8_t systemApisSizes[66] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 0 /*rgb_ir_2_0*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_pdaf_1_4*/, 24 /*pext_1_0*/, 8 /*pafstatistics_1_2*/, 220 /*odr_pdaf_1_4*/, 220 /*ifd_gmv_1_4*/, 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 220 /*ifd_segmap_bnlm_1_4*/, 0 /*smurf_bnlm_1_0*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 220 /*ifd_segmap_xnr_1_4*/, 0 /*smurf_xnr_1_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 220 /*ifd_segmap_acm_1_4*/, 0 /*smurf_acm_1_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*tnr7_spatial_1_1*/, 0 /*tnr_scaler_lb_1_1*/, 0 /*tnr7_ims_1_2*/, 32 /*gmv_statistics_1_1*/, 220 /*odr_gmv_feature_1_4*/, 220 /*odr_gmv_match_1_4*/, 220 /*ifd_segmap_tnr_bc_1_4*/, 0 /*smurf_tnr_bc_1_0*/, 5 /*tnr7_bc_1_2*/, 220 /*odr_tnr_sp_bc_rs4n_1_4*/, 220 /*ifd_segmap_tnr_blend_1_4*/, 0 /*smurf_tnr_blend_1_0*/, 5 /*tnr7_blend_1_1*/, 220 /*odr_tnr_fp_yuvn_1_4*/, 0 /*tnr_scaler_fp_1_1*/, 0 /*image_upscaler_1_1*/, 220 /*odr_tnr_scale_fp_yuv4n_1_4*/, 220 /*ifd_segmap_cas_1_4*/, 0 /*smurf_cas_1_0*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/}; + uint16_t runKernelConfigOrder[66] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 4 /*rgb_ir_2_0*/, 5 /*ifd_lsc_1_4*/, 6 /*lsc_1_2*/, 7 /*gd_2_2*/, 8 /*wb_1_1*/, 27 /*bnlm_3_4*/, 28 /*bxt_demosaic*/, 29 /*vcsc_2_0_b*/, 30 /*gltm_2_0*/, 33 /*xnr_5_4*/, 34 /*vcr_3_1*/, 35 /*glim_2_0*/, 38 /*acm_1_2*/, 39 /*gammatm_v4*/, 40 /*csc_1_1*/, 41 /*b2i_ds_1_1*/, 42 /*lbff_crop_espa_1_4*/, 43 /*tnr7_spatial_1_1*/, 44 /*tnr_scaler_lb_1_1*/, 9 /*rgbs_grid_1_1*/, 12 /*odr_awb_std_1_4*/, 13 /*odr_awb_sat_1_4*/, 10 /*ccm_3a_2_0*/, 14 /*aestatistics_2_1*/, 15 /*odr_ae_1_4*/, 11 /*fr_grid_1_0*/, 16 /*odr_af_std_1_4*/, 17 /*ifd_pdaf_1_4*/, 18 /*pext_1_0*/, 19 /*pafstatistics_1_2*/, 20 /*odr_pdaf_1_4*/, 21 /*ifd_gmv_1_4*/, 46 /*gmv_statistics_1_1*/, 47 /*odr_gmv_feature_1_4*/, 48 /*odr_gmv_match_1_4*/, 22 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 23 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 45 /*tnr7_ims_1_2*/, 51 /*tnr7_bc_1_2*/, 52 /*odr_tnr_sp_bc_rs4n_1_4*/, 24 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 55 /*tnr7_blend_1_1*/, 58 /*image_upscaler_1_1*/, 62 /*cas_1_1*/, 63 /*odr_ofs_mp_1_4*/, 64 /*b2i_ds_output_1_1*/, 65 /*odr_ofs_dp_1_4*/, 56 /*odr_tnr_fp_yuvn_1_4*/, 57 /*tnr_scaler_fp_1_1*/, 59 /*odr_tnr_scale_fp_yuv4n_1_4*/, 25 /*ifd_segmap_bnlm_1_4*/, 31 /*ifd_segmap_xnr_1_4*/, 36 /*ifd_segmap_acm_1_4*/, 49 /*ifd_segmap_tnr_bc_1_4*/, 53 /*ifd_segmap_tnr_blend_1_4*/, 60 /*ifd_segmap_cas_1_4*/, 26 /*smurf_bnlm_1_0*/, 32 /*smurf_xnr_1_0*/, 37 /*smurf_acm_1_0*/, 50 /*smurf_tnr_bc_1_0*/, 54 /*smurf_tnr_blend_1_0*/, 61 /*smurf_cas_1_0*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[27].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf3NoGmvNoTnrNoSapOuterNode::Init(LbffBayerPdaf3NoGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 37, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[37] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 43213 /*pext_1_0*/, 14488 /*rgb_ir_2_0*/, 44308 /*pafstatistics_1_2*/, 26892 /*odr_pdaf_1_4*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 28787 /*image_upscaler_1_1*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x1FEFC001F1, 0x0}; // { ifd_pipe_1_4[0], pext_1_0[4], rgb_ir_2_0[5], pafstatistics_1_2[6], odr_pdaf_1_4[7], ifd_lsc_1_4[8], rgbs_grid_1_1[22], ccm_3a_2_0[23], fr_grid_1_0[24], b2i_ds_1_1[25], lbff_crop_espa_1_4[26], image_upscaler_1_1[27], odr_ofs_mp_1_4[29], b2i_ds_output_1_1[30], odr_ofs_dp_1_4[31], odr_awb_std_1_4[32], odr_awb_sat_1_4[33], aestatistics_2_1[34], odr_ae_1_4[35], odr_af_std_1_4[36] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x1F9C0003C2, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, pext_1_0, rgb_ir_2_0}[1], {pafstatistics_1_2}[2], {odr_pdaf_1_4}[3], {ifd_lsc_1_4}[4], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[5], {lbff_crop_espa_1_4}[6], {image_upscaler_1_1}[7], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[8], {odr_ofs_dp_1_4}[9], {odr_awb_std_1_4}[10], {odr_awb_sat_1_4}[11], {aestatistics_2_1}[12], {odr_ae_1_4}[13], {odr_af_std_1_4}[14] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x1FFFC003F3, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {pext_1_0}[2], {rgb_ir_2_0}[3], {pafstatistics_1_2}[4], {odr_pdaf_1_4}[5], {ifd_lsc_1_4}[6], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[7], {rgbs_grid_1_1}[8], {ccm_3a_2_0}[9], {fr_grid_1_0}[10], {b2i_ds_1_1}[11], {lbff_crop_espa_1_4}[12], {image_upscaler_1_1}[13], {cas_1_1}[14], {odr_ofs_mp_1_4}[15], {b2i_ds_output_1_1}[16], {odr_ofs_dp_1_4}[17], {odr_awb_std_1_4}[18], {odr_awb_sat_1_4}[19], {aestatistics_2_1}[20], {odr_ae_1_4}[21], {odr_af_std_1_4}[22] } + uint8_t systemApisSizes[37] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 24 /*pext_1_0*/, 0 /*rgb_ir_2_0*/, 8 /*pafstatistics_1_2*/, 220 /*odr_pdaf_1_4*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*image_upscaler_1_1*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/}; + uint16_t runKernelConfigOrder[37] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 5 /*rgb_ir_2_0*/, 4 /*pext_1_0*/, 6 /*pafstatistics_1_2*/, 7 /*odr_pdaf_1_4*/, 8 /*ifd_lsc_1_4*/, 9 /*lsc_1_2*/, 10 /*gd_2_2*/, 11 /*wb_1_1*/, 12 /*bnlm_3_4*/, 13 /*bxt_demosaic*/, 14 /*vcsc_2_0_b*/, 15 /*gltm_2_0*/, 16 /*xnr_5_4*/, 17 /*vcr_3_1*/, 18 /*glim_2_0*/, 19 /*acm_1_2*/, 20 /*gammatm_v4*/, 21 /*csc_1_1*/, 25 /*b2i_ds_1_1*/, 26 /*lbff_crop_espa_1_4*/, 27 /*image_upscaler_1_1*/, 28 /*cas_1_1*/, 29 /*odr_ofs_mp_1_4*/, 30 /*b2i_ds_output_1_1*/, 31 /*odr_ofs_dp_1_4*/, 22 /*rgbs_grid_1_1*/, 32 /*odr_awb_std_1_4*/, 33 /*odr_awb_sat_1_4*/, 23 /*ccm_3a_2_0*/, 34 /*aestatistics_2_1*/, 35 /*odr_ae_1_4*/, 24 /*fr_grid_1_0*/, 36 /*odr_af_std_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[12].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf3WithGmvNoTnrNoSapOuterNode::Init(LbffBayerPdaf3WithGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 41, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[41] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 43213 /*pext_1_0*/, 14488 /*rgb_ir_2_0*/, 44308 /*pafstatistics_1_2*/, 26892 /*odr_pdaf_1_4*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 28787 /*image_upscaler_1_1*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 51073 /*ifd_gmv_1_4*/, 40280 /*gmv_statistics_1_1*/, 7416 /*odr_gmv_feature_1_4*/, 41148 /*odr_gmv_match_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x1FFEFC001F1, 0x0}; // { ifd_pipe_1_4[0], pext_1_0[4], rgb_ir_2_0[5], pafstatistics_1_2[6], odr_pdaf_1_4[7], ifd_lsc_1_4[8], rgbs_grid_1_1[22], ccm_3a_2_0[23], fr_grid_1_0[24], b2i_ds_1_1[25], lbff_crop_espa_1_4[26], image_upscaler_1_1[27], odr_ofs_mp_1_4[29], b2i_ds_output_1_1[30], odr_ofs_dp_1_4[31], odr_awb_std_1_4[32], odr_awb_sat_1_4[33], aestatistics_2_1[34], odr_ae_1_4[35], odr_af_std_1_4[36], ifd_gmv_1_4[37], gmv_statistics_1_1[38], odr_gmv_feature_1_4[39], odr_gmv_match_1_4[40] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x1FF9C0003C2, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, pext_1_0, rgb_ir_2_0}[1], {pafstatistics_1_2}[2], {odr_pdaf_1_4}[3], {ifd_lsc_1_4}[4], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[5], {lbff_crop_espa_1_4}[6], {image_upscaler_1_1}[7], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[8], {odr_ofs_dp_1_4}[9], {odr_awb_std_1_4}[10], {odr_awb_sat_1_4}[11], {aestatistics_2_1}[12], {odr_ae_1_4}[13], {odr_af_std_1_4}[14], {ifd_gmv_1_4}[15], {gmv_statistics_1_1}[16], {odr_gmv_feature_1_4}[17], {odr_gmv_match_1_4}[18] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x1FFFFC003F3, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {pext_1_0}[2], {rgb_ir_2_0}[3], {pafstatistics_1_2}[4], {odr_pdaf_1_4}[5], {ifd_lsc_1_4}[6], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[7], {rgbs_grid_1_1}[8], {ccm_3a_2_0}[9], {fr_grid_1_0}[10], {b2i_ds_1_1}[11], {lbff_crop_espa_1_4}[12], {image_upscaler_1_1}[13], {cas_1_1}[14], {odr_ofs_mp_1_4}[15], {b2i_ds_output_1_1}[16], {odr_ofs_dp_1_4}[17], {odr_awb_std_1_4}[18], {odr_awb_sat_1_4}[19], {aestatistics_2_1}[20], {odr_ae_1_4}[21], {odr_af_std_1_4}[22], {ifd_gmv_1_4}[23], {gmv_statistics_1_1}[24], {odr_gmv_feature_1_4}[25], {odr_gmv_match_1_4}[26] } + uint8_t systemApisSizes[41] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 24 /*pext_1_0*/, 0 /*rgb_ir_2_0*/, 8 /*pafstatistics_1_2*/, 220 /*odr_pdaf_1_4*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*image_upscaler_1_1*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_gmv_1_4*/, 32 /*gmv_statistics_1_1*/, 220 /*odr_gmv_feature_1_4*/, 220 /*odr_gmv_match_1_4*/}; + uint16_t runKernelConfigOrder[41] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 5 /*rgb_ir_2_0*/, 4 /*pext_1_0*/, 6 /*pafstatistics_1_2*/, 7 /*odr_pdaf_1_4*/, 8 /*ifd_lsc_1_4*/, 9 /*lsc_1_2*/, 10 /*gd_2_2*/, 11 /*wb_1_1*/, 12 /*bnlm_3_4*/, 13 /*bxt_demosaic*/, 14 /*vcsc_2_0_b*/, 15 /*gltm_2_0*/, 16 /*xnr_5_4*/, 17 /*vcr_3_1*/, 18 /*glim_2_0*/, 19 /*acm_1_2*/, 20 /*gammatm_v4*/, 21 /*csc_1_1*/, 25 /*b2i_ds_1_1*/, 26 /*lbff_crop_espa_1_4*/, 27 /*image_upscaler_1_1*/, 28 /*cas_1_1*/, 29 /*odr_ofs_mp_1_4*/, 30 /*b2i_ds_output_1_1*/, 31 /*odr_ofs_dp_1_4*/, 22 /*rgbs_grid_1_1*/, 32 /*odr_awb_std_1_4*/, 33 /*odr_awb_sat_1_4*/, 23 /*ccm_3a_2_0*/, 34 /*aestatistics_2_1*/, 35 /*odr_ae_1_4*/, 24 /*fr_grid_1_0*/, 36 /*odr_af_std_1_4*/, 37 /*ifd_gmv_1_4*/, 38 /*gmv_statistics_1_1*/, 39 /*odr_gmv_feature_1_4*/, 40 /*odr_gmv_match_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[12].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf3NoGmvWithTnrNoSapOuterNode::Init(LbffBayerPdaf3NoGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 49, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[49] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 43213 /*pext_1_0*/, 14488 /*rgb_ir_2_0*/, 44308 /*pafstatistics_1_2*/, 26892 /*odr_pdaf_1_4*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 2495 /*tnr7_spatial_1_1*/, 29996 /*tnr_scaler_lb_1_1*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 23639 /*tnr7_ims_1_2*/, 1502 /*tnr7_bc_1_2*/, 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 20119 /*tnr7_blend_1_1*/, 5215 /*odr_tnr_fp_yuvn_1_4*/, 20623 /*tnr_scaler_fp_1_1*/, 28787 /*image_upscaler_1_1*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/, 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x1EECFF7C001F1, 0x0}; // { ifd_pipe_1_4[0], pext_1_0[4], rgb_ir_2_0[5], pafstatistics_1_2[6], odr_pdaf_1_4[7], ifd_lsc_1_4[8], rgbs_grid_1_1[22], ccm_3a_2_0[23], fr_grid_1_0[24], b2i_ds_1_1[25], lbff_crop_espa_1_4[26], tnr_scaler_lb_1_1[28], odr_awb_std_1_4[29], odr_awb_sat_1_4[30], aestatistics_2_1[31], odr_ae_1_4[32], odr_af_std_1_4[33], ifd_tnr_sp_bc_yuv4nm1_1_4[34], ifd_tnr_sp_bc_rs4nm1_1_4[35], odr_tnr_sp_bc_rs4n_1_4[38], ifd_tnr_fp_blend_yuvnm1_1_4[39], odr_tnr_fp_yuvn_1_4[41], tnr_scaler_fp_1_1[42], image_upscaler_1_1[43], odr_ofs_mp_1_4[45], b2i_ds_output_1_1[46], odr_ofs_dp_1_4[47], odr_tnr_scale_fp_yuv4n_1_4[48] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x1919FEC0003C2, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, pext_1_0, rgb_ir_2_0}[1], {pafstatistics_1_2}[2], {odr_pdaf_1_4}[3], {ifd_lsc_1_4}[4], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[5], {lbff_crop_espa_1_4}[6], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[7], {odr_awb_std_1_4}[8], {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], {odr_ae_1_4}[11], {odr_af_std_1_4}[12], {ifd_tnr_sp_bc_yuv4nm1_1_4}[13], {ifd_tnr_sp_bc_rs4nm1_1_4}[14], {tnr7_ims_1_2, tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[15], {ifd_tnr_fp_blend_yuvnm1_1_4}[16], {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[17], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[18], {odr_ofs_dp_1_4}[19], {odr_tnr_scale_fp_yuv4n_1_4}[20] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x1FFDFFFC003F3, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {pext_1_0}[2], {rgb_ir_2_0}[3], {pafstatistics_1_2}[4], {odr_pdaf_1_4}[5], {ifd_lsc_1_4}[6], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[7], {rgbs_grid_1_1}[8], {ccm_3a_2_0}[9], {fr_grid_1_0}[10], {b2i_ds_1_1}[11], {lbff_crop_espa_1_4}[12], {tnr7_spatial_1_1}[13], {tnr_scaler_lb_1_1}[14], {odr_awb_std_1_4}[15], {odr_awb_sat_1_4}[16], {aestatistics_2_1}[17], {odr_ae_1_4}[18], {odr_af_std_1_4}[19], {ifd_tnr_sp_bc_yuv4nm1_1_4}[20], {ifd_tnr_sp_bc_rs4nm1_1_4}[21], {tnr7_ims_1_2, tnr7_bc_1_2}[22], {odr_tnr_sp_bc_rs4n_1_4}[23], {ifd_tnr_fp_blend_yuvnm1_1_4}[24], {tnr7_blend_1_1}[25], {odr_tnr_fp_yuvn_1_4}[26], {tnr_scaler_fp_1_1}[27], {image_upscaler_1_1}[28], {cas_1_1}[29], {odr_ofs_mp_1_4}[30], {b2i_ds_output_1_1}[31], {odr_ofs_dp_1_4}[32], {odr_tnr_scale_fp_yuv4n_1_4}[33] } + uint8_t systemApisSizes[49] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 24 /*pext_1_0*/, 0 /*rgb_ir_2_0*/, 8 /*pafstatistics_1_2*/, 220 /*odr_pdaf_1_4*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*tnr7_spatial_1_1*/, 0 /*tnr_scaler_lb_1_1*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 0 /*tnr7_ims_1_2*/, 5 /*tnr7_bc_1_2*/, 220 /*odr_tnr_sp_bc_rs4n_1_4*/, 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 5 /*tnr7_blend_1_1*/, 220 /*odr_tnr_fp_yuvn_1_4*/, 0 /*tnr_scaler_fp_1_1*/, 0 /*image_upscaler_1_1*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/, 220 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint16_t runKernelConfigOrder[49] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 5 /*rgb_ir_2_0*/, 4 /*pext_1_0*/, 6 /*pafstatistics_1_2*/, 7 /*odr_pdaf_1_4*/, 8 /*ifd_lsc_1_4*/, 9 /*lsc_1_2*/, 10 /*gd_2_2*/, 11 /*wb_1_1*/, 12 /*bnlm_3_4*/, 13 /*bxt_demosaic*/, 14 /*vcsc_2_0_b*/, 15 /*gltm_2_0*/, 16 /*xnr_5_4*/, 17 /*vcr_3_1*/, 18 /*glim_2_0*/, 19 /*acm_1_2*/, 20 /*gammatm_v4*/, 21 /*csc_1_1*/, 25 /*b2i_ds_1_1*/, 26 /*lbff_crop_espa_1_4*/, 27 /*tnr7_spatial_1_1*/, 28 /*tnr_scaler_lb_1_1*/, 22 /*rgbs_grid_1_1*/, 29 /*odr_awb_std_1_4*/, 30 /*odr_awb_sat_1_4*/, 23 /*ccm_3a_2_0*/, 31 /*aestatistics_2_1*/, 32 /*odr_ae_1_4*/, 24 /*fr_grid_1_0*/, 33 /*odr_af_std_1_4*/, 34 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 35 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 36 /*tnr7_ims_1_2*/, 37 /*tnr7_bc_1_2*/, 38 /*odr_tnr_sp_bc_rs4n_1_4*/, 39 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 40 /*tnr7_blend_1_1*/, 43 /*image_upscaler_1_1*/, 44 /*cas_1_1*/, 45 /*odr_ofs_mp_1_4*/, 46 /*b2i_ds_output_1_1*/, 47 /*odr_ofs_dp_1_4*/, 41 /*odr_tnr_fp_yuvn_1_4*/, 42 /*tnr_scaler_fp_1_1*/, 48 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[12].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf3WithGmvWithTnrNoSapOuterNode::Init(LbffBayerPdaf3WithGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 53, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[53] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 43213 /*pext_1_0*/, 14488 /*rgb_ir_2_0*/, 44308 /*pafstatistics_1_2*/, 26892 /*odr_pdaf_1_4*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 2495 /*tnr7_spatial_1_1*/, 29996 /*tnr_scaler_lb_1_1*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 51073 /*ifd_gmv_1_4*/, 40280 /*gmv_statistics_1_1*/, 7416 /*odr_gmv_feature_1_4*/, 41148 /*odr_gmv_match_1_4*/, 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 23639 /*tnr7_ims_1_2*/, 1502 /*tnr7_bc_1_2*/, 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 20119 /*tnr7_blend_1_1*/, 5215 /*odr_tnr_fp_yuvn_1_4*/, 20623 /*tnr_scaler_fp_1_1*/, 28787 /*image_upscaler_1_1*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/, 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x1EECFFF7C001F1, 0x0}; // { ifd_pipe_1_4[0], pext_1_0[4], rgb_ir_2_0[5], pafstatistics_1_2[6], odr_pdaf_1_4[7], ifd_lsc_1_4[8], rgbs_grid_1_1[22], ccm_3a_2_0[23], fr_grid_1_0[24], b2i_ds_1_1[25], lbff_crop_espa_1_4[26], tnr_scaler_lb_1_1[28], odr_awb_std_1_4[29], odr_awb_sat_1_4[30], aestatistics_2_1[31], odr_ae_1_4[32], odr_af_std_1_4[33], ifd_gmv_1_4[34], gmv_statistics_1_1[35], odr_gmv_feature_1_4[36], odr_gmv_match_1_4[37], ifd_tnr_sp_bc_yuv4nm1_1_4[38], ifd_tnr_sp_bc_rs4nm1_1_4[39], odr_tnr_sp_bc_rs4n_1_4[42], ifd_tnr_fp_blend_yuvnm1_1_4[43], odr_tnr_fp_yuvn_1_4[45], tnr_scaler_fp_1_1[46], image_upscaler_1_1[47], odr_ofs_mp_1_4[49], b2i_ds_output_1_1[50], odr_ofs_dp_1_4[51], odr_tnr_scale_fp_yuv4n_1_4[52] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x1919FFEC0003C2, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, pext_1_0, rgb_ir_2_0}[1], {pafstatistics_1_2}[2], {odr_pdaf_1_4}[3], {ifd_lsc_1_4}[4], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[5], {lbff_crop_espa_1_4}[6], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[7], {odr_awb_std_1_4}[8], {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], {odr_ae_1_4}[11], {odr_af_std_1_4}[12], {ifd_gmv_1_4}[13], {gmv_statistics_1_1}[14], {odr_gmv_feature_1_4}[15], {odr_gmv_match_1_4}[16], {ifd_tnr_sp_bc_yuv4nm1_1_4}[17], {ifd_tnr_sp_bc_rs4nm1_1_4}[18], {tnr7_ims_1_2, tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[19], {ifd_tnr_fp_blend_yuvnm1_1_4}[20], {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[21], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[22], {odr_ofs_dp_1_4}[23], {odr_tnr_scale_fp_yuv4n_1_4}[24] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x1FFDFFFFC003F3, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {pext_1_0}[2], {rgb_ir_2_0}[3], {pafstatistics_1_2}[4], {odr_pdaf_1_4}[5], {ifd_lsc_1_4}[6], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[7], {rgbs_grid_1_1}[8], {ccm_3a_2_0}[9], {fr_grid_1_0}[10], {b2i_ds_1_1}[11], {lbff_crop_espa_1_4}[12], {tnr7_spatial_1_1}[13], {tnr_scaler_lb_1_1}[14], {odr_awb_std_1_4}[15], {odr_awb_sat_1_4}[16], {aestatistics_2_1}[17], {odr_ae_1_4}[18], {odr_af_std_1_4}[19], {ifd_gmv_1_4}[20], {gmv_statistics_1_1}[21], {odr_gmv_feature_1_4}[22], {odr_gmv_match_1_4}[23], {ifd_tnr_sp_bc_yuv4nm1_1_4}[24], {ifd_tnr_sp_bc_rs4nm1_1_4}[25], {tnr7_ims_1_2, tnr7_bc_1_2}[26], {odr_tnr_sp_bc_rs4n_1_4}[27], {ifd_tnr_fp_blend_yuvnm1_1_4}[28], {tnr7_blend_1_1}[29], {odr_tnr_fp_yuvn_1_4}[30], {tnr_scaler_fp_1_1}[31], {image_upscaler_1_1}[32], {cas_1_1}[33], {odr_ofs_mp_1_4}[34], {b2i_ds_output_1_1}[35], {odr_ofs_dp_1_4}[36], {odr_tnr_scale_fp_yuv4n_1_4}[37] } + uint8_t systemApisSizes[53] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 24 /*pext_1_0*/, 0 /*rgb_ir_2_0*/, 8 /*pafstatistics_1_2*/, 220 /*odr_pdaf_1_4*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*tnr7_spatial_1_1*/, 0 /*tnr_scaler_lb_1_1*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_gmv_1_4*/, 32 /*gmv_statistics_1_1*/, 220 /*odr_gmv_feature_1_4*/, 220 /*odr_gmv_match_1_4*/, 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 0 /*tnr7_ims_1_2*/, 5 /*tnr7_bc_1_2*/, 220 /*odr_tnr_sp_bc_rs4n_1_4*/, 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 5 /*tnr7_blend_1_1*/, 220 /*odr_tnr_fp_yuvn_1_4*/, 0 /*tnr_scaler_fp_1_1*/, 0 /*image_upscaler_1_1*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/, 220 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint16_t runKernelConfigOrder[53] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 5 /*rgb_ir_2_0*/, 4 /*pext_1_0*/, 6 /*pafstatistics_1_2*/, 7 /*odr_pdaf_1_4*/, 8 /*ifd_lsc_1_4*/, 9 /*lsc_1_2*/, 10 /*gd_2_2*/, 11 /*wb_1_1*/, 12 /*bnlm_3_4*/, 13 /*bxt_demosaic*/, 14 /*vcsc_2_0_b*/, 15 /*gltm_2_0*/, 16 /*xnr_5_4*/, 17 /*vcr_3_1*/, 18 /*glim_2_0*/, 19 /*acm_1_2*/, 20 /*gammatm_v4*/, 21 /*csc_1_1*/, 25 /*b2i_ds_1_1*/, 26 /*lbff_crop_espa_1_4*/, 27 /*tnr7_spatial_1_1*/, 28 /*tnr_scaler_lb_1_1*/, 22 /*rgbs_grid_1_1*/, 29 /*odr_awb_std_1_4*/, 30 /*odr_awb_sat_1_4*/, 23 /*ccm_3a_2_0*/, 31 /*aestatistics_2_1*/, 32 /*odr_ae_1_4*/, 24 /*fr_grid_1_0*/, 33 /*odr_af_std_1_4*/, 34 /*ifd_gmv_1_4*/, 35 /*gmv_statistics_1_1*/, 36 /*odr_gmv_feature_1_4*/, 37 /*odr_gmv_match_1_4*/, 38 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 39 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 40 /*tnr7_ims_1_2*/, 41 /*tnr7_bc_1_2*/, 42 /*odr_tnr_sp_bc_rs4n_1_4*/, 43 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 44 /*tnr7_blend_1_1*/, 47 /*image_upscaler_1_1*/, 48 /*cas_1_1*/, 49 /*odr_ofs_mp_1_4*/, 50 /*b2i_ds_output_1_1*/, 51 /*odr_ofs_dp_1_4*/, 45 /*odr_tnr_fp_yuvn_1_4*/, 46 /*tnr_scaler_fp_1_1*/, 52 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[12].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf3WithGmvWithTnrWithSapOuterNode::Init(LbffBayerPdaf3WithGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 65, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[65] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 43213 /*pext_1_0*/, 14488 /*rgb_ir_2_0*/, 44308 /*pafstatistics_1_2*/, 26892 /*odr_pdaf_1_4*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 51073 /*ifd_gmv_1_4*/, 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 35263 /*ifd_segmap_bnlm_1_4*/, 54924 /*smurf_bnlm_1_0*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 9241 /*ifd_segmap_xnr_1_4*/, 42329 /*smurf_xnr_1_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 51914 /*ifd_segmap_acm_1_4*/, 28366 /*smurf_acm_1_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 2495 /*tnr7_spatial_1_1*/, 29996 /*tnr_scaler_lb_1_1*/, 23639 /*tnr7_ims_1_2*/, 40280 /*gmv_statistics_1_1*/, 7416 /*odr_gmv_feature_1_4*/, 41148 /*odr_gmv_match_1_4*/, 47873 /*ifd_segmap_tnr_bc_1_4*/, 13101 /*smurf_tnr_bc_1_0*/, 1502 /*tnr7_bc_1_2*/, 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, 14619 /*ifd_segmap_tnr_blend_1_4*/, 42749 /*smurf_tnr_blend_1_0*/, 20119 /*tnr7_blend_1_1*/, 5215 /*odr_tnr_fp_yuvn_1_4*/, 20623 /*tnr_scaler_fp_1_1*/, 28787 /*image_upscaler_1_1*/, 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/, 20893 /*ifd_segmap_cas_1_4*/, 37468 /*smurf_cas_1_0*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0xDFBBEB18C3FFF1F1, 0x1}; // { ifd_pipe_1_4[0], pext_1_0[4], rgb_ir_2_0[5], pafstatistics_1_2[6], odr_pdaf_1_4[7], ifd_lsc_1_4[8], rgbs_grid_1_1[12], ccm_3a_2_0[13], fr_grid_1_0[14], odr_awb_std_1_4[15], odr_awb_sat_1_4[16], aestatistics_2_1[17], odr_ae_1_4[18], odr_af_std_1_4[19], ifd_gmv_1_4[20], ifd_tnr_sp_bc_yuv4nm1_1_4[21], ifd_tnr_sp_bc_rs4nm1_1_4[22], ifd_tnr_fp_blend_yuvnm1_1_4[23], ifd_segmap_bnlm_1_4[24], smurf_bnlm_1_0[25], ifd_segmap_xnr_1_4[30], smurf_xnr_1_0[31], ifd_segmap_acm_1_4[35], smurf_acm_1_0[36], b2i_ds_1_1[40], lbff_crop_espa_1_4[41], tnr_scaler_lb_1_1[43], gmv_statistics_1_1[45], odr_gmv_feature_1_4[46], odr_gmv_match_1_4[47], ifd_segmap_tnr_bc_1_4[48], smurf_tnr_bc_1_0[49], odr_tnr_sp_bc_rs4n_1_4[51], ifd_segmap_tnr_blend_1_4[52], smurf_tnr_blend_1_0[53], odr_tnr_fp_yuvn_1_4[55], tnr_scaler_fp_1_1[56], image_upscaler_1_1[57], odr_tnr_scale_fp_yuv4n_1_4[58], ifd_segmap_cas_1_4[59], smurf_cas_1_0[60], odr_ofs_mp_1_4[62], b2i_ds_output_1_1[63], odr_ofs_dp_1_4[64] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x3C77F639C7FF83C2, 0x1}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, pext_1_0, rgb_ir_2_0}[1], {pafstatistics_1_2}[2], {odr_pdaf_1_4}[3], {ifd_lsc_1_4}[4], {lsc_1_2, gd_2_2, wb_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0}[5], {odr_awb_std_1_4}[6], {odr_awb_sat_1_4}[7], {aestatistics_2_1}[8], {odr_ae_1_4}[9], {odr_af_std_1_4}[10], {ifd_gmv_1_4}[11], {ifd_tnr_sp_bc_yuv4nm1_1_4}[12], {ifd_tnr_sp_bc_rs4nm1_1_4}[13], {ifd_tnr_fp_blend_yuvnm1_1_4}[14], {ifd_segmap_bnlm_1_4}[15], {smurf_bnlm_1_0}[16], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[17], {ifd_segmap_xnr_1_4}[18], {smurf_xnr_1_0}[19], {xnr_5_4, vcr_3_1, glim_2_0}[20], {ifd_segmap_acm_1_4}[21], {smurf_acm_1_0}[22], {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[23], {lbff_crop_espa_1_4}[24], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[25], {tnr7_ims_1_2}[26], {gmv_statistics_1_1}[27], {odr_gmv_feature_1_4}[28], {odr_gmv_match_1_4}[29], {ifd_segmap_tnr_bc_1_4}[30], {smurf_tnr_bc_1_0}[31], {tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[32], {ifd_segmap_tnr_blend_1_4}[33], {smurf_tnr_blend_1_0}[34], {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[35], {odr_tnr_scale_fp_yuv4n_1_4}[36], {ifd_segmap_cas_1_4}[37], {smurf_cas_1_0}[38], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[39], {odr_ofs_dp_1_4}[40] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0xFFFFFF39C7FFF3F3, 0x1}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {pext_1_0}[2], {rgb_ir_2_0}[3], {pafstatistics_1_2}[4], {odr_pdaf_1_4}[5], {ifd_lsc_1_4}[6], {lsc_1_2, gd_2_2, wb_1_1}[7], {rgbs_grid_1_1}[8], {ccm_3a_2_0}[9], {fr_grid_1_0}[10], {odr_awb_std_1_4}[11], {odr_awb_sat_1_4}[12], {aestatistics_2_1}[13], {odr_ae_1_4}[14], {odr_af_std_1_4}[15], {ifd_gmv_1_4}[16], {ifd_tnr_sp_bc_yuv4nm1_1_4}[17], {ifd_tnr_sp_bc_rs4nm1_1_4}[18], {ifd_tnr_fp_blend_yuvnm1_1_4}[19], {ifd_segmap_bnlm_1_4}[20], {smurf_bnlm_1_0}[21], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[22], {ifd_segmap_xnr_1_4}[23], {smurf_xnr_1_0}[24], {xnr_5_4, vcr_3_1, glim_2_0}[25], {ifd_segmap_acm_1_4}[26], {smurf_acm_1_0}[27], {acm_1_2, gammatm_v4, csc_1_1}[28], {b2i_ds_1_1}[29], {lbff_crop_espa_1_4}[30], {tnr7_spatial_1_1}[31], {tnr_scaler_lb_1_1}[32], {tnr7_ims_1_2}[33], {gmv_statistics_1_1}[34], {odr_gmv_feature_1_4}[35], {odr_gmv_match_1_4}[36], {ifd_segmap_tnr_bc_1_4}[37], {smurf_tnr_bc_1_0}[38], {tnr7_bc_1_2}[39], {odr_tnr_sp_bc_rs4n_1_4}[40], {ifd_segmap_tnr_blend_1_4}[41], {smurf_tnr_blend_1_0}[42], {tnr7_blend_1_1}[43], {odr_tnr_fp_yuvn_1_4}[44], {tnr_scaler_fp_1_1}[45], {image_upscaler_1_1}[46], {odr_tnr_scale_fp_yuv4n_1_4}[47], {ifd_segmap_cas_1_4}[48], {smurf_cas_1_0}[49], {cas_1_1}[50], {odr_ofs_mp_1_4}[51], {b2i_ds_output_1_1}[52], {odr_ofs_dp_1_4}[53] } + uint8_t systemApisSizes[65] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 24 /*pext_1_0*/, 0 /*rgb_ir_2_0*/, 8 /*pafstatistics_1_2*/, 220 /*odr_pdaf_1_4*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_gmv_1_4*/, 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 220 /*ifd_segmap_bnlm_1_4*/, 0 /*smurf_bnlm_1_0*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 220 /*ifd_segmap_xnr_1_4*/, 0 /*smurf_xnr_1_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 220 /*ifd_segmap_acm_1_4*/, 0 /*smurf_acm_1_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*tnr7_spatial_1_1*/, 0 /*tnr_scaler_lb_1_1*/, 0 /*tnr7_ims_1_2*/, 32 /*gmv_statistics_1_1*/, 220 /*odr_gmv_feature_1_4*/, 220 /*odr_gmv_match_1_4*/, 220 /*ifd_segmap_tnr_bc_1_4*/, 0 /*smurf_tnr_bc_1_0*/, 5 /*tnr7_bc_1_2*/, 220 /*odr_tnr_sp_bc_rs4n_1_4*/, 220 /*ifd_segmap_tnr_blend_1_4*/, 0 /*smurf_tnr_blend_1_0*/, 5 /*tnr7_blend_1_1*/, 220 /*odr_tnr_fp_yuvn_1_4*/, 0 /*tnr_scaler_fp_1_1*/, 0 /*image_upscaler_1_1*/, 220 /*odr_tnr_scale_fp_yuv4n_1_4*/, 220 /*ifd_segmap_cas_1_4*/, 0 /*smurf_cas_1_0*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/}; + uint16_t runKernelConfigOrder[65] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 5 /*rgb_ir_2_0*/, 4 /*pext_1_0*/, 6 /*pafstatistics_1_2*/, 7 /*odr_pdaf_1_4*/, 8 /*ifd_lsc_1_4*/, 9 /*lsc_1_2*/, 10 /*gd_2_2*/, 11 /*wb_1_1*/, 26 /*bnlm_3_4*/, 27 /*bxt_demosaic*/, 28 /*vcsc_2_0_b*/, 29 /*gltm_2_0*/, 32 /*xnr_5_4*/, 33 /*vcr_3_1*/, 34 /*glim_2_0*/, 37 /*acm_1_2*/, 38 /*gammatm_v4*/, 39 /*csc_1_1*/, 40 /*b2i_ds_1_1*/, 41 /*lbff_crop_espa_1_4*/, 42 /*tnr7_spatial_1_1*/, 43 /*tnr_scaler_lb_1_1*/, 12 /*rgbs_grid_1_1*/, 15 /*odr_awb_std_1_4*/, 16 /*odr_awb_sat_1_4*/, 13 /*ccm_3a_2_0*/, 17 /*aestatistics_2_1*/, 18 /*odr_ae_1_4*/, 14 /*fr_grid_1_0*/, 19 /*odr_af_std_1_4*/, 20 /*ifd_gmv_1_4*/, 45 /*gmv_statistics_1_1*/, 46 /*odr_gmv_feature_1_4*/, 47 /*odr_gmv_match_1_4*/, 21 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 22 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 44 /*tnr7_ims_1_2*/, 50 /*tnr7_bc_1_2*/, 51 /*odr_tnr_sp_bc_rs4n_1_4*/, 23 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 54 /*tnr7_blend_1_1*/, 57 /*image_upscaler_1_1*/, 61 /*cas_1_1*/, 62 /*odr_ofs_mp_1_4*/, 63 /*b2i_ds_output_1_1*/, 64 /*odr_ofs_dp_1_4*/, 55 /*odr_tnr_fp_yuvn_1_4*/, 56 /*tnr_scaler_fp_1_1*/, 58 /*odr_tnr_scale_fp_yuv4n_1_4*/, 24 /*ifd_segmap_bnlm_1_4*/, 30 /*ifd_segmap_xnr_1_4*/, 35 /*ifd_segmap_acm_1_4*/, 48 /*ifd_segmap_tnr_bc_1_4*/, 52 /*ifd_segmap_tnr_blend_1_4*/, 59 /*ifd_segmap_cas_1_4*/, 25 /*smurf_bnlm_1_0*/, 31 /*smurf_xnr_1_0*/, 36 /*smurf_acm_1_0*/, 49 /*smurf_tnr_bc_1_0*/, 53 /*smurf_tnr_blend_1_0*/, 60 /*smurf_cas_1_0*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[26].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void IsysDolOuterNode::Init(IsysDolOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(2, NodeTypes::Isys, 2, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[2] = {11470 /*is_odr_a*/, 50407 /*is_odr_c*/}; + uint64_t kernelsRcbBitmap[] = {0x3, 0x0}; // { is_odr_a[0], is_odr_c[1] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x2, 0x0}; // {{is_odr_a}[0], {is_odr_c}[1] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x3, 0x0}; // {{is_odr_a}[0], {is_odr_c}[1] } + uint8_t systemApisSizes[2] = {0 /*is_odr_a*/, 0 /*is_odr_c*/}; + uint16_t runKernelConfigOrder[2] = {0 /*is_odr_a*/, 1 /*is_odr_c*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, nullptr, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // set default inner Node + setInnerNode(None); +} + +void LbffDol2InputsNoGmvNoTnrNoSapOuterNode::Init(LbffDol2InputsNoGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 37, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[37] = {52446 /*ifd_pipe_1_4*/, 24678 /*ifd_pipe_long_1_4*/, 54871 /*dol_lite_1_2*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 14488 /*rgb_ir_2_0*/, 38544 /*odr_awb_std_1_4*/, 53430 /*odr_awb_sve_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 26958 /*fr_grid_1_0*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 28787 /*image_upscaler_1_1*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/, 59136 /*odr_af_std_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x1EF0007FC3, 0x0}; // { ifd_pipe_1_4[0], ifd_pipe_long_1_4[1], rgbs_grid_1_1[6], ccm_3a_2_0[7], rgb_ir_2_0[8], odr_awb_std_1_4[9], odr_awb_sve_1_4[10], odr_awb_sat_1_4[11], aestatistics_2_1[12], odr_ae_1_4[13], ifd_lsc_1_4[14], fr_grid_1_0[28], b2i_ds_1_1[29], lbff_crop_espa_1_4[30], image_upscaler_1_1[31], odr_ofs_mp_1_4[33], b2i_ds_output_1_1[34], odr_ofs_dp_1_4[35], odr_af_std_1_4[36] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x19C000FE06, 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2, rgbs_grid_1_1, ccm_3a_2_0, rgb_ir_2_0}[2], {odr_awb_std_1_4}[3], {odr_awb_sve_1_4}[4], {odr_awb_sat_1_4}[5], {aestatistics_2_1}[6], {odr_ae_1_4}[7], {ifd_lsc_1_4}[8], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, fr_grid_1_0, b2i_ds_1_1}[9], {lbff_crop_espa_1_4}[10], {image_upscaler_1_1}[11], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[12], {odr_ofs_dp_1_4}[13], {odr_af_std_1_4}[14] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x1FF000FFC7, 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2}[2], {rgbs_grid_1_1}[3], {ccm_3a_2_0}[4], {rgb_ir_2_0}[5], {odr_awb_std_1_4}[6], {odr_awb_sve_1_4}[7], {odr_awb_sat_1_4}[8], {aestatistics_2_1}[9], {odr_ae_1_4}[10], {ifd_lsc_1_4}[11], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[12], {fr_grid_1_0}[13], {b2i_ds_1_1}[14], {lbff_crop_espa_1_4}[15], {image_upscaler_1_1}[16], {cas_1_1}[17], {odr_ofs_mp_1_4}[18], {b2i_ds_output_1_1}[19], {odr_ofs_dp_1_4}[20], {odr_af_std_1_4}[21] } + uint8_t systemApisSizes[37] = {220 /*ifd_pipe_1_4*/, 220 /*ifd_pipe_long_1_4*/, 5 /*dol_lite_1_2*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 0 /*rgb_ir_2_0*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sve_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 20 /*fr_grid_1_0*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*image_upscaler_1_1*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/, 220 /*odr_af_std_1_4*/}; + uint16_t runKernelConfigOrder[37] = {0 /*ifd_pipe_1_4*/, 1 /*ifd_pipe_long_1_4*/, 2 /*dol_lite_1_2*/, 3 /*bxt_blc*/, 4 /*linearization2_0*/, 5 /*dpc_2_2*/, 8 /*rgb_ir_2_0*/, 6 /*rgbs_grid_1_1*/, 9 /*odr_awb_std_1_4*/, 10 /*odr_awb_sve_1_4*/, 11 /*odr_awb_sat_1_4*/, 7 /*ccm_3a_2_0*/, 12 /*aestatistics_2_1*/, 13 /*odr_ae_1_4*/, 14 /*ifd_lsc_1_4*/, 15 /*lsc_1_2*/, 16 /*gd_2_2*/, 17 /*wb_1_1*/, 18 /*bnlm_3_4*/, 19 /*bxt_demosaic*/, 20 /*vcsc_2_0_b*/, 21 /*gltm_2_0*/, 22 /*xnr_5_4*/, 23 /*vcr_3_1*/, 24 /*glim_2_0*/, 25 /*acm_1_2*/, 26 /*gammatm_v4*/, 27 /*csc_1_1*/, 29 /*b2i_ds_1_1*/, 30 /*lbff_crop_espa_1_4*/, 31 /*image_upscaler_1_1*/, 32 /*cas_1_1*/, 33 /*odr_ofs_mp_1_4*/, 34 /*b2i_ds_output_1_1*/, 35 /*odr_ofs_dp_1_4*/, 28 /*fr_grid_1_0*/, 36 /*odr_af_std_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[18].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffDol2InputsWithGmvNoTnrNoSapOuterNode::Init(LbffDol2InputsWithGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 41, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[41] = {52446 /*ifd_pipe_1_4*/, 24678 /*ifd_pipe_long_1_4*/, 54871 /*dol_lite_1_2*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 14488 /*rgb_ir_2_0*/, 38544 /*odr_awb_std_1_4*/, 53430 /*odr_awb_sve_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 26958 /*fr_grid_1_0*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 28787 /*image_upscaler_1_1*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/, 59136 /*odr_af_std_1_4*/, 51073 /*ifd_gmv_1_4*/, 40280 /*gmv_statistics_1_1*/, 7416 /*odr_gmv_feature_1_4*/, 41148 /*odr_gmv_match_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x1FEF0007FC3, 0x0}; // { ifd_pipe_1_4[0], ifd_pipe_long_1_4[1], rgbs_grid_1_1[6], ccm_3a_2_0[7], rgb_ir_2_0[8], odr_awb_std_1_4[9], odr_awb_sve_1_4[10], odr_awb_sat_1_4[11], aestatistics_2_1[12], odr_ae_1_4[13], ifd_lsc_1_4[14], fr_grid_1_0[28], b2i_ds_1_1[29], lbff_crop_espa_1_4[30], image_upscaler_1_1[31], odr_ofs_mp_1_4[33], b2i_ds_output_1_1[34], odr_ofs_dp_1_4[35], odr_af_std_1_4[36], ifd_gmv_1_4[37], gmv_statistics_1_1[38], odr_gmv_feature_1_4[39], odr_gmv_match_1_4[40] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x1F9C000FE06, 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2, rgbs_grid_1_1, ccm_3a_2_0, rgb_ir_2_0}[2], {odr_awb_std_1_4}[3], {odr_awb_sve_1_4}[4], {odr_awb_sat_1_4}[5], {aestatistics_2_1}[6], {odr_ae_1_4}[7], {ifd_lsc_1_4}[8], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, fr_grid_1_0, b2i_ds_1_1}[9], {lbff_crop_espa_1_4}[10], {image_upscaler_1_1}[11], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[12], {odr_ofs_dp_1_4}[13], {odr_af_std_1_4}[14], {ifd_gmv_1_4}[15], {gmv_statistics_1_1}[16], {odr_gmv_feature_1_4}[17], {odr_gmv_match_1_4}[18] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x1FFF000FFC7, 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2}[2], {rgbs_grid_1_1}[3], {ccm_3a_2_0}[4], {rgb_ir_2_0}[5], {odr_awb_std_1_4}[6], {odr_awb_sve_1_4}[7], {odr_awb_sat_1_4}[8], {aestatistics_2_1}[9], {odr_ae_1_4}[10], {ifd_lsc_1_4}[11], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[12], {fr_grid_1_0}[13], {b2i_ds_1_1}[14], {lbff_crop_espa_1_4}[15], {image_upscaler_1_1}[16], {cas_1_1}[17], {odr_ofs_mp_1_4}[18], {b2i_ds_output_1_1}[19], {odr_ofs_dp_1_4}[20], {odr_af_std_1_4}[21], {ifd_gmv_1_4}[22], {gmv_statistics_1_1}[23], {odr_gmv_feature_1_4}[24], {odr_gmv_match_1_4}[25] } + uint8_t systemApisSizes[41] = {220 /*ifd_pipe_1_4*/, 220 /*ifd_pipe_long_1_4*/, 5 /*dol_lite_1_2*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 0 /*rgb_ir_2_0*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sve_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 20 /*fr_grid_1_0*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*image_upscaler_1_1*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_gmv_1_4*/, 32 /*gmv_statistics_1_1*/, 220 /*odr_gmv_feature_1_4*/, 220 /*odr_gmv_match_1_4*/}; + uint16_t runKernelConfigOrder[41] = {0 /*ifd_pipe_1_4*/, 1 /*ifd_pipe_long_1_4*/, 2 /*dol_lite_1_2*/, 3 /*bxt_blc*/, 4 /*linearization2_0*/, 5 /*dpc_2_2*/, 8 /*rgb_ir_2_0*/, 6 /*rgbs_grid_1_1*/, 9 /*odr_awb_std_1_4*/, 10 /*odr_awb_sve_1_4*/, 11 /*odr_awb_sat_1_4*/, 7 /*ccm_3a_2_0*/, 12 /*aestatistics_2_1*/, 13 /*odr_ae_1_4*/, 14 /*ifd_lsc_1_4*/, 15 /*lsc_1_2*/, 16 /*gd_2_2*/, 17 /*wb_1_1*/, 18 /*bnlm_3_4*/, 19 /*bxt_demosaic*/, 20 /*vcsc_2_0_b*/, 21 /*gltm_2_0*/, 22 /*xnr_5_4*/, 23 /*vcr_3_1*/, 24 /*glim_2_0*/, 25 /*acm_1_2*/, 26 /*gammatm_v4*/, 27 /*csc_1_1*/, 29 /*b2i_ds_1_1*/, 30 /*lbff_crop_espa_1_4*/, 31 /*image_upscaler_1_1*/, 32 /*cas_1_1*/, 33 /*odr_ofs_mp_1_4*/, 34 /*b2i_ds_output_1_1*/, 35 /*odr_ofs_dp_1_4*/, 28 /*fr_grid_1_0*/, 36 /*odr_af_std_1_4*/, 37 /*ifd_gmv_1_4*/, 38 /*gmv_statistics_1_1*/, 39 /*odr_gmv_feature_1_4*/, 40 /*odr_gmv_match_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[18].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffDol2InputsNoGmvWithTnrNoSapOuterNode::Init(LbffDol2InputsNoGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 49, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[49] = {52446 /*ifd_pipe_1_4*/, 24678 /*ifd_pipe_long_1_4*/, 54871 /*dol_lite_1_2*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 14488 /*rgb_ir_2_0*/, 38544 /*odr_awb_std_1_4*/, 53430 /*odr_awb_sve_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 26958 /*fr_grid_1_0*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 2495 /*tnr7_spatial_1_1*/, 29996 /*tnr_scaler_lb_1_1*/, 59136 /*odr_af_std_1_4*/, 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 23639 /*tnr7_ims_1_2*/, 1502 /*tnr7_bc_1_2*/, 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 20119 /*tnr7_blend_1_1*/, 5215 /*odr_tnr_fp_yuvn_1_4*/, 20623 /*tnr_scaler_fp_1_1*/, 28787 /*image_upscaler_1_1*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/, 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x1EECF70007FC3, 0x0}; // { ifd_pipe_1_4[0], ifd_pipe_long_1_4[1], rgbs_grid_1_1[6], ccm_3a_2_0[7], rgb_ir_2_0[8], odr_awb_std_1_4[9], odr_awb_sve_1_4[10], odr_awb_sat_1_4[11], aestatistics_2_1[12], odr_ae_1_4[13], ifd_lsc_1_4[14], fr_grid_1_0[28], b2i_ds_1_1[29], lbff_crop_espa_1_4[30], tnr_scaler_lb_1_1[32], odr_af_std_1_4[33], ifd_tnr_sp_bc_yuv4nm1_1_4[34], ifd_tnr_sp_bc_rs4nm1_1_4[35], odr_tnr_sp_bc_rs4n_1_4[38], ifd_tnr_fp_blend_yuvnm1_1_4[39], odr_tnr_fp_yuvn_1_4[41], tnr_scaler_fp_1_1[42], image_upscaler_1_1[43], odr_ofs_mp_1_4[45], b2i_ds_output_1_1[46], odr_ofs_dp_1_4[47], odr_tnr_scale_fp_yuv4n_1_4[48] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x1919EC000FE06, 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2, rgbs_grid_1_1, ccm_3a_2_0, rgb_ir_2_0}[2], {odr_awb_std_1_4}[3], {odr_awb_sve_1_4}[4], {odr_awb_sat_1_4}[5], {aestatistics_2_1}[6], {odr_ae_1_4}[7], {ifd_lsc_1_4}[8], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, fr_grid_1_0, b2i_ds_1_1}[9], {lbff_crop_espa_1_4}[10], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[11], {odr_af_std_1_4}[12], {ifd_tnr_sp_bc_yuv4nm1_1_4}[13], {ifd_tnr_sp_bc_rs4nm1_1_4}[14], {tnr7_ims_1_2, tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[15], {ifd_tnr_fp_blend_yuvnm1_1_4}[16], {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[17], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[18], {odr_ofs_dp_1_4}[19], {odr_tnr_scale_fp_yuv4n_1_4}[20] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x1FFDFF000FFC7, 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2}[2], {rgbs_grid_1_1}[3], {ccm_3a_2_0}[4], {rgb_ir_2_0}[5], {odr_awb_std_1_4}[6], {odr_awb_sve_1_4}[7], {odr_awb_sat_1_4}[8], {aestatistics_2_1}[9], {odr_ae_1_4}[10], {ifd_lsc_1_4}[11], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[12], {fr_grid_1_0}[13], {b2i_ds_1_1}[14], {lbff_crop_espa_1_4}[15], {tnr7_spatial_1_1}[16], {tnr_scaler_lb_1_1}[17], {odr_af_std_1_4}[18], {ifd_tnr_sp_bc_yuv4nm1_1_4}[19], {ifd_tnr_sp_bc_rs4nm1_1_4}[20], {tnr7_ims_1_2, tnr7_bc_1_2}[21], {odr_tnr_sp_bc_rs4n_1_4}[22], {ifd_tnr_fp_blend_yuvnm1_1_4}[23], {tnr7_blend_1_1}[24], {odr_tnr_fp_yuvn_1_4}[25], {tnr_scaler_fp_1_1}[26], {image_upscaler_1_1}[27], {cas_1_1}[28], {odr_ofs_mp_1_4}[29], {b2i_ds_output_1_1}[30], {odr_ofs_dp_1_4}[31], {odr_tnr_scale_fp_yuv4n_1_4}[32] } + uint8_t systemApisSizes[49] = {220 /*ifd_pipe_1_4*/, 220 /*ifd_pipe_long_1_4*/, 5 /*dol_lite_1_2*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 0 /*rgb_ir_2_0*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sve_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 20 /*fr_grid_1_0*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*tnr7_spatial_1_1*/, 0 /*tnr_scaler_lb_1_1*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 0 /*tnr7_ims_1_2*/, 5 /*tnr7_bc_1_2*/, 220 /*odr_tnr_sp_bc_rs4n_1_4*/, 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 5 /*tnr7_blend_1_1*/, 220 /*odr_tnr_fp_yuvn_1_4*/, 0 /*tnr_scaler_fp_1_1*/, 0 /*image_upscaler_1_1*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/, 220 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint16_t runKernelConfigOrder[49] = {0 /*ifd_pipe_1_4*/, 1 /*ifd_pipe_long_1_4*/, 2 /*dol_lite_1_2*/, 3 /*bxt_blc*/, 4 /*linearization2_0*/, 5 /*dpc_2_2*/, 8 /*rgb_ir_2_0*/, 6 /*rgbs_grid_1_1*/, 9 /*odr_awb_std_1_4*/, 10 /*odr_awb_sve_1_4*/, 11 /*odr_awb_sat_1_4*/, 7 /*ccm_3a_2_0*/, 12 /*aestatistics_2_1*/, 13 /*odr_ae_1_4*/, 14 /*ifd_lsc_1_4*/, 15 /*lsc_1_2*/, 16 /*gd_2_2*/, 17 /*wb_1_1*/, 18 /*bnlm_3_4*/, 19 /*bxt_demosaic*/, 20 /*vcsc_2_0_b*/, 21 /*gltm_2_0*/, 22 /*xnr_5_4*/, 23 /*vcr_3_1*/, 24 /*glim_2_0*/, 25 /*acm_1_2*/, 26 /*gammatm_v4*/, 27 /*csc_1_1*/, 29 /*b2i_ds_1_1*/, 30 /*lbff_crop_espa_1_4*/, 31 /*tnr7_spatial_1_1*/, 32 /*tnr_scaler_lb_1_1*/, 28 /*fr_grid_1_0*/, 33 /*odr_af_std_1_4*/, 34 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 35 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 36 /*tnr7_ims_1_2*/, 37 /*tnr7_bc_1_2*/, 38 /*odr_tnr_sp_bc_rs4n_1_4*/, 39 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 40 /*tnr7_blend_1_1*/, 43 /*image_upscaler_1_1*/, 44 /*cas_1_1*/, 45 /*odr_ofs_mp_1_4*/, 46 /*b2i_ds_output_1_1*/, 47 /*odr_ofs_dp_1_4*/, 41 /*odr_tnr_fp_yuvn_1_4*/, 42 /*tnr_scaler_fp_1_1*/, 48 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[18].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffDol2InputsWithGmvWithTnrNoSapOuterNode::Init(LbffDol2InputsWithGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 53, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[53] = {52446 /*ifd_pipe_1_4*/, 24678 /*ifd_pipe_long_1_4*/, 54871 /*dol_lite_1_2*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 14488 /*rgb_ir_2_0*/, 38544 /*odr_awb_std_1_4*/, 53430 /*odr_awb_sve_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 26958 /*fr_grid_1_0*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 2495 /*tnr7_spatial_1_1*/, 29996 /*tnr_scaler_lb_1_1*/, 59136 /*odr_af_std_1_4*/, 51073 /*ifd_gmv_1_4*/, 40280 /*gmv_statistics_1_1*/, 7416 /*odr_gmv_feature_1_4*/, 41148 /*odr_gmv_match_1_4*/, 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 23639 /*tnr7_ims_1_2*/, 1502 /*tnr7_bc_1_2*/, 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 20119 /*tnr7_blend_1_1*/, 5215 /*odr_tnr_fp_yuvn_1_4*/, 20623 /*tnr_scaler_fp_1_1*/, 28787 /*image_upscaler_1_1*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/, 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x1EECFF70007FC3, 0x0}; // { ifd_pipe_1_4[0], ifd_pipe_long_1_4[1], rgbs_grid_1_1[6], ccm_3a_2_0[7], rgb_ir_2_0[8], odr_awb_std_1_4[9], odr_awb_sve_1_4[10], odr_awb_sat_1_4[11], aestatistics_2_1[12], odr_ae_1_4[13], ifd_lsc_1_4[14], fr_grid_1_0[28], b2i_ds_1_1[29], lbff_crop_espa_1_4[30], tnr_scaler_lb_1_1[32], odr_af_std_1_4[33], ifd_gmv_1_4[34], gmv_statistics_1_1[35], odr_gmv_feature_1_4[36], odr_gmv_match_1_4[37], ifd_tnr_sp_bc_yuv4nm1_1_4[38], ifd_tnr_sp_bc_rs4nm1_1_4[39], odr_tnr_sp_bc_rs4n_1_4[42], ifd_tnr_fp_blend_yuvnm1_1_4[43], odr_tnr_fp_yuvn_1_4[45], tnr_scaler_fp_1_1[46], image_upscaler_1_1[47], odr_ofs_mp_1_4[49], b2i_ds_output_1_1[50], odr_ofs_dp_1_4[51], odr_tnr_scale_fp_yuv4n_1_4[52] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x1919FEC000FE06, 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2, rgbs_grid_1_1, ccm_3a_2_0, rgb_ir_2_0}[2], {odr_awb_std_1_4}[3], {odr_awb_sve_1_4}[4], {odr_awb_sat_1_4}[5], {aestatistics_2_1}[6], {odr_ae_1_4}[7], {ifd_lsc_1_4}[8], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, fr_grid_1_0, b2i_ds_1_1}[9], {lbff_crop_espa_1_4}[10], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[11], {odr_af_std_1_4}[12], {ifd_gmv_1_4}[13], {gmv_statistics_1_1}[14], {odr_gmv_feature_1_4}[15], {odr_gmv_match_1_4}[16], {ifd_tnr_sp_bc_yuv4nm1_1_4}[17], {ifd_tnr_sp_bc_rs4nm1_1_4}[18], {tnr7_ims_1_2, tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[19], {ifd_tnr_fp_blend_yuvnm1_1_4}[20], {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[21], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[22], {odr_ofs_dp_1_4}[23], {odr_tnr_scale_fp_yuv4n_1_4}[24] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x1FFDFFF000FFC7, 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2}[2], {rgbs_grid_1_1}[3], {ccm_3a_2_0}[4], {rgb_ir_2_0}[5], {odr_awb_std_1_4}[6], {odr_awb_sve_1_4}[7], {odr_awb_sat_1_4}[8], {aestatistics_2_1}[9], {odr_ae_1_4}[10], {ifd_lsc_1_4}[11], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[12], {fr_grid_1_0}[13], {b2i_ds_1_1}[14], {lbff_crop_espa_1_4}[15], {tnr7_spatial_1_1}[16], {tnr_scaler_lb_1_1}[17], {odr_af_std_1_4}[18], {ifd_gmv_1_4}[19], {gmv_statistics_1_1}[20], {odr_gmv_feature_1_4}[21], {odr_gmv_match_1_4}[22], {ifd_tnr_sp_bc_yuv4nm1_1_4}[23], {ifd_tnr_sp_bc_rs4nm1_1_4}[24], {tnr7_ims_1_2, tnr7_bc_1_2}[25], {odr_tnr_sp_bc_rs4n_1_4}[26], {ifd_tnr_fp_blend_yuvnm1_1_4}[27], {tnr7_blend_1_1}[28], {odr_tnr_fp_yuvn_1_4}[29], {tnr_scaler_fp_1_1}[30], {image_upscaler_1_1}[31], {cas_1_1}[32], {odr_ofs_mp_1_4}[33], {b2i_ds_output_1_1}[34], {odr_ofs_dp_1_4}[35], {odr_tnr_scale_fp_yuv4n_1_4}[36] } + uint8_t systemApisSizes[53] = {220 /*ifd_pipe_1_4*/, 220 /*ifd_pipe_long_1_4*/, 5 /*dol_lite_1_2*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 0 /*rgb_ir_2_0*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sve_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 20 /*fr_grid_1_0*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*tnr7_spatial_1_1*/, 0 /*tnr_scaler_lb_1_1*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_gmv_1_4*/, 32 /*gmv_statistics_1_1*/, 220 /*odr_gmv_feature_1_4*/, 220 /*odr_gmv_match_1_4*/, 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 0 /*tnr7_ims_1_2*/, 5 /*tnr7_bc_1_2*/, 220 /*odr_tnr_sp_bc_rs4n_1_4*/, 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 5 /*tnr7_blend_1_1*/, 220 /*odr_tnr_fp_yuvn_1_4*/, 0 /*tnr_scaler_fp_1_1*/, 0 /*image_upscaler_1_1*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/, 220 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint16_t runKernelConfigOrder[53] = {0 /*ifd_pipe_1_4*/, 1 /*ifd_pipe_long_1_4*/, 2 /*dol_lite_1_2*/, 3 /*bxt_blc*/, 4 /*linearization2_0*/, 5 /*dpc_2_2*/, 8 /*rgb_ir_2_0*/, 6 /*rgbs_grid_1_1*/, 9 /*odr_awb_std_1_4*/, 10 /*odr_awb_sve_1_4*/, 11 /*odr_awb_sat_1_4*/, 7 /*ccm_3a_2_0*/, 12 /*aestatistics_2_1*/, 13 /*odr_ae_1_4*/, 14 /*ifd_lsc_1_4*/, 15 /*lsc_1_2*/, 16 /*gd_2_2*/, 17 /*wb_1_1*/, 18 /*bnlm_3_4*/, 19 /*bxt_demosaic*/, 20 /*vcsc_2_0_b*/, 21 /*gltm_2_0*/, 22 /*xnr_5_4*/, 23 /*vcr_3_1*/, 24 /*glim_2_0*/, 25 /*acm_1_2*/, 26 /*gammatm_v4*/, 27 /*csc_1_1*/, 29 /*b2i_ds_1_1*/, 30 /*lbff_crop_espa_1_4*/, 31 /*tnr7_spatial_1_1*/, 32 /*tnr_scaler_lb_1_1*/, 28 /*fr_grid_1_0*/, 33 /*odr_af_std_1_4*/, 34 /*ifd_gmv_1_4*/, 35 /*gmv_statistics_1_1*/, 36 /*odr_gmv_feature_1_4*/, 37 /*odr_gmv_match_1_4*/, 38 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 39 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 40 /*tnr7_ims_1_2*/, 41 /*tnr7_bc_1_2*/, 42 /*odr_tnr_sp_bc_rs4n_1_4*/, 43 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 44 /*tnr7_blend_1_1*/, 47 /*image_upscaler_1_1*/, 48 /*cas_1_1*/, 49 /*odr_ofs_mp_1_4*/, 50 /*b2i_ds_output_1_1*/, 51 /*odr_ofs_dp_1_4*/, 45 /*odr_tnr_fp_yuvn_1_4*/, 46 /*tnr_scaler_fp_1_1*/, 52 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[18].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffDolSmoothOuterNode::Init(LbffDolSmoothOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 8, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[8] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 45146 /*bnlm_3_4*/, 53535 /*odr_bnlm_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x81, 0x0}; // { ifd_pipe_1_4[0], odr_bnlm_1_4[7] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x2, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, gd_2_2, wb_1_1, bnlm_3_4, odr_bnlm_1_4}[1] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x83, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, gd_2_2, wb_1_1, bnlm_3_4}[1], {odr_bnlm_1_4}[2] } + uint8_t systemApisSizes[8] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 6 /*bnlm_3_4*/, 220 /*odr_bnlm_1_4*/}; + uint16_t runKernelConfigOrder[8] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 4 /*gd_2_2*/, 5 /*wb_1_1*/, 6 /*bnlm_3_4*/, 7 /*odr_bnlm_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[6].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffDol3InputsNoGmvNoTnrNoSapOuterNode::Init(LbffDol3InputsNoGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 38, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[38] = {52446 /*ifd_pipe_1_4*/, 24678 /*ifd_pipe_long_1_4*/, 4386 /*ifd_pipe_short_smth_1_4*/, 54871 /*dol_lite_1_2*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 14488 /*rgb_ir_2_0*/, 38544 /*odr_awb_std_1_4*/, 53430 /*odr_awb_sve_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 26958 /*fr_grid_1_0*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 28787 /*image_upscaler_1_1*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/, 59136 /*odr_af_std_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x3DE000FF87, 0x0}; // { ifd_pipe_1_4[0], ifd_pipe_long_1_4[1], ifd_pipe_short_smth_1_4[2], rgbs_grid_1_1[7], ccm_3a_2_0[8], rgb_ir_2_0[9], odr_awb_std_1_4[10], odr_awb_sve_1_4[11], odr_awb_sat_1_4[12], aestatistics_2_1[13], odr_ae_1_4[14], ifd_lsc_1_4[15], fr_grid_1_0[29], b2i_ds_1_1[30], lbff_crop_espa_1_4[31], image_upscaler_1_1[32], odr_ofs_mp_1_4[34], b2i_ds_output_1_1[35], odr_ofs_dp_1_4[36], odr_af_std_1_4[37] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x338001FC0E, 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {ifd_pipe_short_smth_1_4}[2], {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2, rgbs_grid_1_1, ccm_3a_2_0, rgb_ir_2_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sve_1_4}[5], {odr_awb_sat_1_4}[6], {aestatistics_2_1}[7], {odr_ae_1_4}[8], {ifd_lsc_1_4}[9], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, fr_grid_1_0, b2i_ds_1_1}[10], {lbff_crop_espa_1_4}[11], {image_upscaler_1_1}[12], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[13], {odr_ofs_dp_1_4}[14], {odr_af_std_1_4}[15] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x3FE001FF8F, 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {ifd_pipe_short_smth_1_4}[2], {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2}[3], {rgbs_grid_1_1}[4], {ccm_3a_2_0}[5], {rgb_ir_2_0}[6], {odr_awb_std_1_4}[7], {odr_awb_sve_1_4}[8], {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], {odr_ae_1_4}[11], {ifd_lsc_1_4}[12], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[13], {fr_grid_1_0}[14], {b2i_ds_1_1}[15], {lbff_crop_espa_1_4}[16], {image_upscaler_1_1}[17], {cas_1_1}[18], {odr_ofs_mp_1_4}[19], {b2i_ds_output_1_1}[20], {odr_ofs_dp_1_4}[21], {odr_af_std_1_4}[22] } + uint8_t systemApisSizes[38] = {220 /*ifd_pipe_1_4*/, 220 /*ifd_pipe_long_1_4*/, 220 /*ifd_pipe_short_smth_1_4*/, 5 /*dol_lite_1_2*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 0 /*rgb_ir_2_0*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sve_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 20 /*fr_grid_1_0*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*image_upscaler_1_1*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/, 220 /*odr_af_std_1_4*/}; + uint16_t runKernelConfigOrder[38] = {0 /*ifd_pipe_1_4*/, 1 /*ifd_pipe_long_1_4*/, 2 /*ifd_pipe_short_smth_1_4*/, 3 /*dol_lite_1_2*/, 4 /*bxt_blc*/, 5 /*linearization2_0*/, 6 /*dpc_2_2*/, 9 /*rgb_ir_2_0*/, 7 /*rgbs_grid_1_1*/, 10 /*odr_awb_std_1_4*/, 11 /*odr_awb_sve_1_4*/, 12 /*odr_awb_sat_1_4*/, 8 /*ccm_3a_2_0*/, 13 /*aestatistics_2_1*/, 14 /*odr_ae_1_4*/, 15 /*ifd_lsc_1_4*/, 16 /*lsc_1_2*/, 17 /*gd_2_2*/, 18 /*wb_1_1*/, 19 /*bnlm_3_4*/, 20 /*bxt_demosaic*/, 21 /*vcsc_2_0_b*/, 22 /*gltm_2_0*/, 23 /*xnr_5_4*/, 24 /*vcr_3_1*/, 25 /*glim_2_0*/, 26 /*acm_1_2*/, 27 /*gammatm_v4*/, 28 /*csc_1_1*/, 30 /*b2i_ds_1_1*/, 31 /*lbff_crop_espa_1_4*/, 32 /*image_upscaler_1_1*/, 33 /*cas_1_1*/, 34 /*odr_ofs_mp_1_4*/, 35 /*b2i_ds_output_1_1*/, 36 /*odr_ofs_dp_1_4*/, 29 /*fr_grid_1_0*/, 37 /*odr_af_std_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[19].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffDol3InputsWithGmvNoTnrNoSapOuterNode::Init(LbffDol3InputsWithGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 42, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[42] = {52446 /*ifd_pipe_1_4*/, 24678 /*ifd_pipe_long_1_4*/, 4386 /*ifd_pipe_short_smth_1_4*/, 54871 /*dol_lite_1_2*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 14488 /*rgb_ir_2_0*/, 38544 /*odr_awb_std_1_4*/, 53430 /*odr_awb_sve_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 26958 /*fr_grid_1_0*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 28787 /*image_upscaler_1_1*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/, 59136 /*odr_af_std_1_4*/, 51073 /*ifd_gmv_1_4*/, 40280 /*gmv_statistics_1_1*/, 7416 /*odr_gmv_feature_1_4*/, 41148 /*odr_gmv_match_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x3FDE000FF87, 0x0}; // { ifd_pipe_1_4[0], ifd_pipe_long_1_4[1], ifd_pipe_short_smth_1_4[2], rgbs_grid_1_1[7], ccm_3a_2_0[8], rgb_ir_2_0[9], odr_awb_std_1_4[10], odr_awb_sve_1_4[11], odr_awb_sat_1_4[12], aestatistics_2_1[13], odr_ae_1_4[14], ifd_lsc_1_4[15], fr_grid_1_0[29], b2i_ds_1_1[30], lbff_crop_espa_1_4[31], image_upscaler_1_1[32], odr_ofs_mp_1_4[34], b2i_ds_output_1_1[35], odr_ofs_dp_1_4[36], odr_af_std_1_4[37], ifd_gmv_1_4[38], gmv_statistics_1_1[39], odr_gmv_feature_1_4[40], odr_gmv_match_1_4[41] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x3F38001FC0E, 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {ifd_pipe_short_smth_1_4}[2], {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2, rgbs_grid_1_1, ccm_3a_2_0, rgb_ir_2_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sve_1_4}[5], {odr_awb_sat_1_4}[6], {aestatistics_2_1}[7], {odr_ae_1_4}[8], {ifd_lsc_1_4}[9], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, fr_grid_1_0, b2i_ds_1_1}[10], {lbff_crop_espa_1_4}[11], {image_upscaler_1_1}[12], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[13], {odr_ofs_dp_1_4}[14], {odr_af_std_1_4}[15], {ifd_gmv_1_4}[16], {gmv_statistics_1_1}[17], {odr_gmv_feature_1_4}[18], {odr_gmv_match_1_4}[19] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x3FFE001FF8F, 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {ifd_pipe_short_smth_1_4}[2], {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2}[3], {rgbs_grid_1_1}[4], {ccm_3a_2_0}[5], {rgb_ir_2_0}[6], {odr_awb_std_1_4}[7], {odr_awb_sve_1_4}[8], {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], {odr_ae_1_4}[11], {ifd_lsc_1_4}[12], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[13], {fr_grid_1_0}[14], {b2i_ds_1_1}[15], {lbff_crop_espa_1_4}[16], {image_upscaler_1_1}[17], {cas_1_1}[18], {odr_ofs_mp_1_4}[19], {b2i_ds_output_1_1}[20], {odr_ofs_dp_1_4}[21], {odr_af_std_1_4}[22], {ifd_gmv_1_4}[23], {gmv_statistics_1_1}[24], {odr_gmv_feature_1_4}[25], {odr_gmv_match_1_4}[26] } + uint8_t systemApisSizes[42] = {220 /*ifd_pipe_1_4*/, 220 /*ifd_pipe_long_1_4*/, 220 /*ifd_pipe_short_smth_1_4*/, 5 /*dol_lite_1_2*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 0 /*rgb_ir_2_0*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sve_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 20 /*fr_grid_1_0*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*image_upscaler_1_1*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_gmv_1_4*/, 32 /*gmv_statistics_1_1*/, 220 /*odr_gmv_feature_1_4*/, 220 /*odr_gmv_match_1_4*/}; + uint16_t runKernelConfigOrder[42] = {0 /*ifd_pipe_1_4*/, 1 /*ifd_pipe_long_1_4*/, 2 /*ifd_pipe_short_smth_1_4*/, 3 /*dol_lite_1_2*/, 4 /*bxt_blc*/, 5 /*linearization2_0*/, 6 /*dpc_2_2*/, 9 /*rgb_ir_2_0*/, 7 /*rgbs_grid_1_1*/, 10 /*odr_awb_std_1_4*/, 11 /*odr_awb_sve_1_4*/, 12 /*odr_awb_sat_1_4*/, 8 /*ccm_3a_2_0*/, 13 /*aestatistics_2_1*/, 14 /*odr_ae_1_4*/, 15 /*ifd_lsc_1_4*/, 16 /*lsc_1_2*/, 17 /*gd_2_2*/, 18 /*wb_1_1*/, 19 /*bnlm_3_4*/, 20 /*bxt_demosaic*/, 21 /*vcsc_2_0_b*/, 22 /*gltm_2_0*/, 23 /*xnr_5_4*/, 24 /*vcr_3_1*/, 25 /*glim_2_0*/, 26 /*acm_1_2*/, 27 /*gammatm_v4*/, 28 /*csc_1_1*/, 30 /*b2i_ds_1_1*/, 31 /*lbff_crop_espa_1_4*/, 32 /*image_upscaler_1_1*/, 33 /*cas_1_1*/, 34 /*odr_ofs_mp_1_4*/, 35 /*b2i_ds_output_1_1*/, 36 /*odr_ofs_dp_1_4*/, 29 /*fr_grid_1_0*/, 37 /*odr_af_std_1_4*/, 38 /*ifd_gmv_1_4*/, 39 /*gmv_statistics_1_1*/, 40 /*odr_gmv_feature_1_4*/, 41 /*odr_gmv_match_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[19].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffDol3InputsNoGmvWithTnrNoSapOuterNode::Init(LbffDol3InputsNoGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 50, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[50] = {52446 /*ifd_pipe_1_4*/, 24678 /*ifd_pipe_long_1_4*/, 4386 /*ifd_pipe_short_smth_1_4*/, 54871 /*dol_lite_1_2*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 14488 /*rgb_ir_2_0*/, 38544 /*odr_awb_std_1_4*/, 53430 /*odr_awb_sve_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 26958 /*fr_grid_1_0*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 2495 /*tnr7_spatial_1_1*/, 29996 /*tnr_scaler_lb_1_1*/, 59136 /*odr_af_std_1_4*/, 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 23639 /*tnr7_ims_1_2*/, 1502 /*tnr7_bc_1_2*/, 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 20119 /*tnr7_blend_1_1*/, 5215 /*odr_tnr_fp_yuvn_1_4*/, 20623 /*tnr_scaler_fp_1_1*/, 28787 /*image_upscaler_1_1*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/, 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x3DD9EE000FF87, 0x0}; // { ifd_pipe_1_4[0], ifd_pipe_long_1_4[1], ifd_pipe_short_smth_1_4[2], rgbs_grid_1_1[7], ccm_3a_2_0[8], rgb_ir_2_0[9], odr_awb_std_1_4[10], odr_awb_sve_1_4[11], odr_awb_sat_1_4[12], aestatistics_2_1[13], odr_ae_1_4[14], ifd_lsc_1_4[15], fr_grid_1_0[29], b2i_ds_1_1[30], lbff_crop_espa_1_4[31], tnr_scaler_lb_1_1[33], odr_af_std_1_4[34], ifd_tnr_sp_bc_yuv4nm1_1_4[35], ifd_tnr_sp_bc_rs4nm1_1_4[36], odr_tnr_sp_bc_rs4n_1_4[39], ifd_tnr_fp_blend_yuvnm1_1_4[40], odr_tnr_fp_yuvn_1_4[42], tnr_scaler_fp_1_1[43], image_upscaler_1_1[44], odr_ofs_mp_1_4[46], b2i_ds_output_1_1[47], odr_ofs_dp_1_4[48], odr_tnr_scale_fp_yuv4n_1_4[49] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x3233D8001FC0E, 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {ifd_pipe_short_smth_1_4}[2], {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2, rgbs_grid_1_1, ccm_3a_2_0, rgb_ir_2_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sve_1_4}[5], {odr_awb_sat_1_4}[6], {aestatistics_2_1}[7], {odr_ae_1_4}[8], {ifd_lsc_1_4}[9], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, fr_grid_1_0, b2i_ds_1_1}[10], {lbff_crop_espa_1_4}[11], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[12], {odr_af_std_1_4}[13], {ifd_tnr_sp_bc_yuv4nm1_1_4}[14], {ifd_tnr_sp_bc_rs4nm1_1_4}[15], {tnr7_ims_1_2, tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[16], {ifd_tnr_fp_blend_yuvnm1_1_4}[17], {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[18], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[19], {odr_ofs_dp_1_4}[20], {odr_tnr_scale_fp_yuv4n_1_4}[21] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x3FFBFE001FF8F, 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {ifd_pipe_short_smth_1_4}[2], {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2}[3], {rgbs_grid_1_1}[4], {ccm_3a_2_0}[5], {rgb_ir_2_0}[6], {odr_awb_std_1_4}[7], {odr_awb_sve_1_4}[8], {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], {odr_ae_1_4}[11], {ifd_lsc_1_4}[12], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[13], {fr_grid_1_0}[14], {b2i_ds_1_1}[15], {lbff_crop_espa_1_4}[16], {tnr7_spatial_1_1}[17], {tnr_scaler_lb_1_1}[18], {odr_af_std_1_4}[19], {ifd_tnr_sp_bc_yuv4nm1_1_4}[20], {ifd_tnr_sp_bc_rs4nm1_1_4}[21], {tnr7_ims_1_2, tnr7_bc_1_2}[22], {odr_tnr_sp_bc_rs4n_1_4}[23], {ifd_tnr_fp_blend_yuvnm1_1_4}[24], {tnr7_blend_1_1}[25], {odr_tnr_fp_yuvn_1_4}[26], {tnr_scaler_fp_1_1}[27], {image_upscaler_1_1}[28], {cas_1_1}[29], {odr_ofs_mp_1_4}[30], {b2i_ds_output_1_1}[31], {odr_ofs_dp_1_4}[32], {odr_tnr_scale_fp_yuv4n_1_4}[33] } + uint8_t systemApisSizes[50] = {220 /*ifd_pipe_1_4*/, 220 /*ifd_pipe_long_1_4*/, 220 /*ifd_pipe_short_smth_1_4*/, 5 /*dol_lite_1_2*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 0 /*rgb_ir_2_0*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sve_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 20 /*fr_grid_1_0*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*tnr7_spatial_1_1*/, 0 /*tnr_scaler_lb_1_1*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 0 /*tnr7_ims_1_2*/, 5 /*tnr7_bc_1_2*/, 220 /*odr_tnr_sp_bc_rs4n_1_4*/, 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 5 /*tnr7_blend_1_1*/, 220 /*odr_tnr_fp_yuvn_1_4*/, 0 /*tnr_scaler_fp_1_1*/, 0 /*image_upscaler_1_1*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/, 220 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint16_t runKernelConfigOrder[50] = {0 /*ifd_pipe_1_4*/, 1 /*ifd_pipe_long_1_4*/, 2 /*ifd_pipe_short_smth_1_4*/, 3 /*dol_lite_1_2*/, 4 /*bxt_blc*/, 5 /*linearization2_0*/, 6 /*dpc_2_2*/, 9 /*rgb_ir_2_0*/, 7 /*rgbs_grid_1_1*/, 10 /*odr_awb_std_1_4*/, 11 /*odr_awb_sve_1_4*/, 12 /*odr_awb_sat_1_4*/, 8 /*ccm_3a_2_0*/, 13 /*aestatistics_2_1*/, 14 /*odr_ae_1_4*/, 15 /*ifd_lsc_1_4*/, 16 /*lsc_1_2*/, 17 /*gd_2_2*/, 18 /*wb_1_1*/, 19 /*bnlm_3_4*/, 20 /*bxt_demosaic*/, 21 /*vcsc_2_0_b*/, 22 /*gltm_2_0*/, 23 /*xnr_5_4*/, 24 /*vcr_3_1*/, 25 /*glim_2_0*/, 26 /*acm_1_2*/, 27 /*gammatm_v4*/, 28 /*csc_1_1*/, 30 /*b2i_ds_1_1*/, 31 /*lbff_crop_espa_1_4*/, 32 /*tnr7_spatial_1_1*/, 33 /*tnr_scaler_lb_1_1*/, 29 /*fr_grid_1_0*/, 34 /*odr_af_std_1_4*/, 35 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 36 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 37 /*tnr7_ims_1_2*/, 38 /*tnr7_bc_1_2*/, 39 /*odr_tnr_sp_bc_rs4n_1_4*/, 40 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 41 /*tnr7_blend_1_1*/, 44 /*image_upscaler_1_1*/, 45 /*cas_1_1*/, 46 /*odr_ofs_mp_1_4*/, 47 /*b2i_ds_output_1_1*/, 48 /*odr_ofs_dp_1_4*/, 42 /*odr_tnr_fp_yuvn_1_4*/, 43 /*tnr_scaler_fp_1_1*/, 49 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[19].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffDol3InputsWithGmvWithTnrNoSapOuterNode::Init(LbffDol3InputsWithGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 54, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[54] = {52446 /*ifd_pipe_1_4*/, 24678 /*ifd_pipe_long_1_4*/, 4386 /*ifd_pipe_short_smth_1_4*/, 54871 /*dol_lite_1_2*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 14488 /*rgb_ir_2_0*/, 38544 /*odr_awb_std_1_4*/, 53430 /*odr_awb_sve_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 26958 /*fr_grid_1_0*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 2495 /*tnr7_spatial_1_1*/, 29996 /*tnr_scaler_lb_1_1*/, 59136 /*odr_af_std_1_4*/, 51073 /*ifd_gmv_1_4*/, 40280 /*gmv_statistics_1_1*/, 7416 /*odr_gmv_feature_1_4*/, 41148 /*odr_gmv_match_1_4*/, 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 23639 /*tnr7_ims_1_2*/, 1502 /*tnr7_bc_1_2*/, 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 20119 /*tnr7_blend_1_1*/, 5215 /*odr_tnr_fp_yuvn_1_4*/, 20623 /*tnr_scaler_fp_1_1*/, 28787 /*image_upscaler_1_1*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/, 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x3DD9FEE000FF87, 0x0}; // { ifd_pipe_1_4[0], ifd_pipe_long_1_4[1], ifd_pipe_short_smth_1_4[2], rgbs_grid_1_1[7], ccm_3a_2_0[8], rgb_ir_2_0[9], odr_awb_std_1_4[10], odr_awb_sve_1_4[11], odr_awb_sat_1_4[12], aestatistics_2_1[13], odr_ae_1_4[14], ifd_lsc_1_4[15], fr_grid_1_0[29], b2i_ds_1_1[30], lbff_crop_espa_1_4[31], tnr_scaler_lb_1_1[33], odr_af_std_1_4[34], ifd_gmv_1_4[35], gmv_statistics_1_1[36], odr_gmv_feature_1_4[37], odr_gmv_match_1_4[38], ifd_tnr_sp_bc_yuv4nm1_1_4[39], ifd_tnr_sp_bc_rs4nm1_1_4[40], odr_tnr_sp_bc_rs4n_1_4[43], ifd_tnr_fp_blend_yuvnm1_1_4[44], odr_tnr_fp_yuvn_1_4[46], tnr_scaler_fp_1_1[47], image_upscaler_1_1[48], odr_ofs_mp_1_4[50], b2i_ds_output_1_1[51], odr_ofs_dp_1_4[52], odr_tnr_scale_fp_yuv4n_1_4[53] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x3233FD8001FC0E, 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {ifd_pipe_short_smth_1_4}[2], {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2, rgbs_grid_1_1, ccm_3a_2_0, rgb_ir_2_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sve_1_4}[5], {odr_awb_sat_1_4}[6], {aestatistics_2_1}[7], {odr_ae_1_4}[8], {ifd_lsc_1_4}[9], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, fr_grid_1_0, b2i_ds_1_1}[10], {lbff_crop_espa_1_4}[11], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[12], {odr_af_std_1_4}[13], {ifd_gmv_1_4}[14], {gmv_statistics_1_1}[15], {odr_gmv_feature_1_4}[16], {odr_gmv_match_1_4}[17], {ifd_tnr_sp_bc_yuv4nm1_1_4}[18], {ifd_tnr_sp_bc_rs4nm1_1_4}[19], {tnr7_ims_1_2, tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[20], {ifd_tnr_fp_blend_yuvnm1_1_4}[21], {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[22], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[23], {odr_ofs_dp_1_4}[24], {odr_tnr_scale_fp_yuv4n_1_4}[25] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x3FFBFFE001FF8F, 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {ifd_pipe_short_smth_1_4}[2], {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2}[3], {rgbs_grid_1_1}[4], {ccm_3a_2_0}[5], {rgb_ir_2_0}[6], {odr_awb_std_1_4}[7], {odr_awb_sve_1_4}[8], {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], {odr_ae_1_4}[11], {ifd_lsc_1_4}[12], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[13], {fr_grid_1_0}[14], {b2i_ds_1_1}[15], {lbff_crop_espa_1_4}[16], {tnr7_spatial_1_1}[17], {tnr_scaler_lb_1_1}[18], {odr_af_std_1_4}[19], {ifd_gmv_1_4}[20], {gmv_statistics_1_1}[21], {odr_gmv_feature_1_4}[22], {odr_gmv_match_1_4}[23], {ifd_tnr_sp_bc_yuv4nm1_1_4}[24], {ifd_tnr_sp_bc_rs4nm1_1_4}[25], {tnr7_ims_1_2, tnr7_bc_1_2}[26], {odr_tnr_sp_bc_rs4n_1_4}[27], {ifd_tnr_fp_blend_yuvnm1_1_4}[28], {tnr7_blend_1_1}[29], {odr_tnr_fp_yuvn_1_4}[30], {tnr_scaler_fp_1_1}[31], {image_upscaler_1_1}[32], {cas_1_1}[33], {odr_ofs_mp_1_4}[34], {b2i_ds_output_1_1}[35], {odr_ofs_dp_1_4}[36], {odr_tnr_scale_fp_yuv4n_1_4}[37] } + uint8_t systemApisSizes[54] = {220 /*ifd_pipe_1_4*/, 220 /*ifd_pipe_long_1_4*/, 220 /*ifd_pipe_short_smth_1_4*/, 5 /*dol_lite_1_2*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 0 /*rgb_ir_2_0*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sve_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 20 /*fr_grid_1_0*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*tnr7_spatial_1_1*/, 0 /*tnr_scaler_lb_1_1*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_gmv_1_4*/, 32 /*gmv_statistics_1_1*/, 220 /*odr_gmv_feature_1_4*/, 220 /*odr_gmv_match_1_4*/, 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 0 /*tnr7_ims_1_2*/, 5 /*tnr7_bc_1_2*/, 220 /*odr_tnr_sp_bc_rs4n_1_4*/, 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 5 /*tnr7_blend_1_1*/, 220 /*odr_tnr_fp_yuvn_1_4*/, 0 /*tnr_scaler_fp_1_1*/, 0 /*image_upscaler_1_1*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/, 220 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint16_t runKernelConfigOrder[54] = {0 /*ifd_pipe_1_4*/, 1 /*ifd_pipe_long_1_4*/, 2 /*ifd_pipe_short_smth_1_4*/, 3 /*dol_lite_1_2*/, 4 /*bxt_blc*/, 5 /*linearization2_0*/, 6 /*dpc_2_2*/, 9 /*rgb_ir_2_0*/, 7 /*rgbs_grid_1_1*/, 10 /*odr_awb_std_1_4*/, 11 /*odr_awb_sve_1_4*/, 12 /*odr_awb_sat_1_4*/, 8 /*ccm_3a_2_0*/, 13 /*aestatistics_2_1*/, 14 /*odr_ae_1_4*/, 15 /*ifd_lsc_1_4*/, 16 /*lsc_1_2*/, 17 /*gd_2_2*/, 18 /*wb_1_1*/, 19 /*bnlm_3_4*/, 20 /*bxt_demosaic*/, 21 /*vcsc_2_0_b*/, 22 /*gltm_2_0*/, 23 /*xnr_5_4*/, 24 /*vcr_3_1*/, 25 /*glim_2_0*/, 26 /*acm_1_2*/, 27 /*gammatm_v4*/, 28 /*csc_1_1*/, 30 /*b2i_ds_1_1*/, 31 /*lbff_crop_espa_1_4*/, 32 /*tnr7_spatial_1_1*/, 33 /*tnr_scaler_lb_1_1*/, 29 /*fr_grid_1_0*/, 34 /*odr_af_std_1_4*/, 35 /*ifd_gmv_1_4*/, 36 /*gmv_statistics_1_1*/, 37 /*odr_gmv_feature_1_4*/, 38 /*odr_gmv_match_1_4*/, 39 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 40 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 41 /*tnr7_ims_1_2*/, 42 /*tnr7_bc_1_2*/, 43 /*odr_tnr_sp_bc_rs4n_1_4*/, 44 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 45 /*tnr7_blend_1_1*/, 48 /*image_upscaler_1_1*/, 49 /*cas_1_1*/, 50 /*odr_ofs_mp_1_4*/, 51 /*b2i_ds_output_1_1*/, 52 /*odr_ofs_dp_1_4*/, 46 /*odr_tnr_fp_yuvn_1_4*/, 47 /*tnr_scaler_fp_1_1*/, 53 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[19].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffRgbIrNoGmvNoTnrNoSapOuterNode::Init(LbffRgbIrNoGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 36, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[36] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 15021 /*rgbs_grid_1_1*/, 14488 /*rgb_ir_2_0*/, 60297 /*odr_ir_1_4*/, 38544 /*odr_awb_std_1_4*/, 53430 /*odr_awb_sve_1_4*/, 1248 /*odr_awb_sat_1_4*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 28787 /*image_upscaler_1_1*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0xFDF0007F1, 0x0}; // { ifd_pipe_1_4[0], rgbs_grid_1_1[4], rgb_ir_2_0[5], odr_ir_1_4[6], odr_awb_std_1_4[7], odr_awb_sve_1_4[8], odr_awb_sat_1_4[9], ifd_lsc_1_4[10], ccm_3a_2_0[24], fr_grid_1_0[25], b2i_ds_1_1[26], lbff_crop_espa_1_4[27], image_upscaler_1_1[28], odr_ofs_mp_1_4[30], b2i_ds_output_1_1[31], odr_ofs_dp_1_4[32], aestatistics_2_1[33], odr_ae_1_4[34], odr_af_std_1_4[35] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0xF38000FC2, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgbs_grid_1_1, rgb_ir_2_0}[1], {odr_ir_1_4}[2], {odr_awb_std_1_4}[3], {odr_awb_sve_1_4}[4], {odr_awb_sat_1_4}[5], {ifd_lsc_1_4}[6], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[7], {lbff_crop_espa_1_4}[8], {image_upscaler_1_1}[9], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[10], {odr_ofs_dp_1_4}[11], {aestatistics_2_1}[12], {odr_ae_1_4}[13], {odr_af_std_1_4}[14] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0xFFF000FF3, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgbs_grid_1_1}[2], {rgb_ir_2_0}[3], {odr_ir_1_4}[4], {odr_awb_std_1_4}[5], {odr_awb_sve_1_4}[6], {odr_awb_sat_1_4}[7], {ifd_lsc_1_4}[8], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[9], {ccm_3a_2_0}[10], {fr_grid_1_0}[11], {b2i_ds_1_1}[12], {lbff_crop_espa_1_4}[13], {image_upscaler_1_1}[14], {cas_1_1}[15], {odr_ofs_mp_1_4}[16], {b2i_ds_output_1_1}[17], {odr_ofs_dp_1_4}[18], {aestatistics_2_1}[19], {odr_ae_1_4}[20], {odr_af_std_1_4}[21] } + uint8_t systemApisSizes[36] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 24 /*rgbs_grid_1_1*/, 0 /*rgb_ir_2_0*/, 220 /*odr_ir_1_4*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sve_1_4*/, 220 /*odr_awb_sat_1_4*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*image_upscaler_1_1*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/}; + uint16_t runKernelConfigOrder[36] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 5 /*rgb_ir_2_0*/, 6 /*odr_ir_1_4*/, 4 /*rgbs_grid_1_1*/, 7 /*odr_awb_std_1_4*/, 8 /*odr_awb_sve_1_4*/, 9 /*odr_awb_sat_1_4*/, 10 /*ifd_lsc_1_4*/, 11 /*lsc_1_2*/, 12 /*gd_2_2*/, 13 /*wb_1_1*/, 14 /*bnlm_3_4*/, 15 /*bxt_demosaic*/, 16 /*vcsc_2_0_b*/, 17 /*gltm_2_0*/, 18 /*xnr_5_4*/, 19 /*vcr_3_1*/, 20 /*glim_2_0*/, 21 /*acm_1_2*/, 22 /*gammatm_v4*/, 23 /*csc_1_1*/, 26 /*b2i_ds_1_1*/, 27 /*lbff_crop_espa_1_4*/, 28 /*image_upscaler_1_1*/, 29 /*cas_1_1*/, 30 /*odr_ofs_mp_1_4*/, 31 /*b2i_ds_output_1_1*/, 32 /*odr_ofs_dp_1_4*/, 24 /*ccm_3a_2_0*/, 33 /*aestatistics_2_1*/, 34 /*odr_ae_1_4*/, 25 /*fr_grid_1_0*/, 35 /*odr_af_std_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[14].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffRgbIrIrNoGmvNoTnrNoSapOuterNode::Init(LbffRgbIrIrNoGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 32, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[32] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 28787 /*image_upscaler_1_1*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0xFF7E0009, 0x0}; // { ifd_pipe_1_4[0], ifd_lsc_1_4[3], rgbs_grid_1_1[17], ccm_3a_2_0[18], fr_grid_1_0[19], b2i_ds_1_1[20], lbff_crop_espa_1_4[21], image_upscaler_1_1[22], odr_ofs_mp_1_4[24], b2i_ds_output_1_1[25], odr_ofs_dp_1_4[26], odr_awb_std_1_4[27], odr_awb_sat_1_4[28], aestatistics_2_1[29], odr_ae_1_4[30], odr_af_std_1_4[31] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0xFCE0001A, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[3], {lbff_crop_espa_1_4}[4], {image_upscaler_1_1}[5], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[6], {odr_ofs_dp_1_4}[7], {odr_awb_std_1_4}[8], {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], {odr_ae_1_4}[11], {odr_af_std_1_4}[12] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0xFFFE001B, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[3], {rgbs_grid_1_1}[4], {ccm_3a_2_0}[5], {fr_grid_1_0}[6], {b2i_ds_1_1}[7], {lbff_crop_espa_1_4}[8], {image_upscaler_1_1}[9], {cas_1_1}[10], {odr_ofs_mp_1_4}[11], {b2i_ds_output_1_1}[12], {odr_ofs_dp_1_4}[13], {odr_awb_std_1_4}[14], {odr_awb_sat_1_4}[15], {aestatistics_2_1}[16], {odr_ae_1_4}[17], {odr_af_std_1_4}[18] } + uint8_t systemApisSizes[32] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*image_upscaler_1_1*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/}; + uint16_t runKernelConfigOrder[32] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*ifd_lsc_1_4*/, 4 /*lsc_1_2*/, 5 /*gd_2_2*/, 6 /*wb_1_1*/, 7 /*bnlm_3_4*/, 8 /*bxt_demosaic*/, 9 /*vcsc_2_0_b*/, 10 /*gltm_2_0*/, 11 /*xnr_5_4*/, 12 /*vcr_3_1*/, 13 /*glim_2_0*/, 14 /*acm_1_2*/, 15 /*gammatm_v4*/, 16 /*csc_1_1*/, 20 /*b2i_ds_1_1*/, 21 /*lbff_crop_espa_1_4*/, 22 /*image_upscaler_1_1*/, 23 /*cas_1_1*/, 24 /*odr_ofs_mp_1_4*/, 25 /*b2i_ds_output_1_1*/, 26 /*odr_ofs_dp_1_4*/, 17 /*rgbs_grid_1_1*/, 27 /*odr_awb_std_1_4*/, 28 /*odr_awb_sat_1_4*/, 18 /*ccm_3a_2_0*/, 29 /*aestatistics_2_1*/, 30 /*odr_ae_1_4*/, 19 /*fr_grid_1_0*/, 31 /*odr_af_std_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[7].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffRgbIrWithGmvNoTnrNoSapOuterNode::Init(LbffRgbIrWithGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 40, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[40] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 15021 /*rgbs_grid_1_1*/, 14488 /*rgb_ir_2_0*/, 60297 /*odr_ir_1_4*/, 38544 /*odr_awb_std_1_4*/, 53430 /*odr_awb_sve_1_4*/, 1248 /*odr_awb_sat_1_4*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 28787 /*image_upscaler_1_1*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 51073 /*ifd_gmv_1_4*/, 40280 /*gmv_statistics_1_1*/, 7416 /*odr_gmv_feature_1_4*/, 41148 /*odr_gmv_match_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0xFFDF0007F1, 0x0}; // { ifd_pipe_1_4[0], rgbs_grid_1_1[4], rgb_ir_2_0[5], odr_ir_1_4[6], odr_awb_std_1_4[7], odr_awb_sve_1_4[8], odr_awb_sat_1_4[9], ifd_lsc_1_4[10], ccm_3a_2_0[24], fr_grid_1_0[25], b2i_ds_1_1[26], lbff_crop_espa_1_4[27], image_upscaler_1_1[28], odr_ofs_mp_1_4[30], b2i_ds_output_1_1[31], odr_ofs_dp_1_4[32], aestatistics_2_1[33], odr_ae_1_4[34], odr_af_std_1_4[35], ifd_gmv_1_4[36], gmv_statistics_1_1[37], odr_gmv_feature_1_4[38], odr_gmv_match_1_4[39] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0xFF38000FC2, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgbs_grid_1_1, rgb_ir_2_0}[1], {odr_ir_1_4}[2], {odr_awb_std_1_4}[3], {odr_awb_sve_1_4}[4], {odr_awb_sat_1_4}[5], {ifd_lsc_1_4}[6], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[7], {lbff_crop_espa_1_4}[8], {image_upscaler_1_1}[9], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[10], {odr_ofs_dp_1_4}[11], {aestatistics_2_1}[12], {odr_ae_1_4}[13], {odr_af_std_1_4}[14], {ifd_gmv_1_4}[15], {gmv_statistics_1_1}[16], {odr_gmv_feature_1_4}[17], {odr_gmv_match_1_4}[18] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0xFFFF000FF3, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgbs_grid_1_1}[2], {rgb_ir_2_0}[3], {odr_ir_1_4}[4], {odr_awb_std_1_4}[5], {odr_awb_sve_1_4}[6], {odr_awb_sat_1_4}[7], {ifd_lsc_1_4}[8], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[9], {ccm_3a_2_0}[10], {fr_grid_1_0}[11], {b2i_ds_1_1}[12], {lbff_crop_espa_1_4}[13], {image_upscaler_1_1}[14], {cas_1_1}[15], {odr_ofs_mp_1_4}[16], {b2i_ds_output_1_1}[17], {odr_ofs_dp_1_4}[18], {aestatistics_2_1}[19], {odr_ae_1_4}[20], {odr_af_std_1_4}[21], {ifd_gmv_1_4}[22], {gmv_statistics_1_1}[23], {odr_gmv_feature_1_4}[24], {odr_gmv_match_1_4}[25] } + uint8_t systemApisSizes[40] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 24 /*rgbs_grid_1_1*/, 0 /*rgb_ir_2_0*/, 220 /*odr_ir_1_4*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sve_1_4*/, 220 /*odr_awb_sat_1_4*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*image_upscaler_1_1*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_gmv_1_4*/, 32 /*gmv_statistics_1_1*/, 220 /*odr_gmv_feature_1_4*/, 220 /*odr_gmv_match_1_4*/}; + uint16_t runKernelConfigOrder[40] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 5 /*rgb_ir_2_0*/, 6 /*odr_ir_1_4*/, 4 /*rgbs_grid_1_1*/, 7 /*odr_awb_std_1_4*/, 8 /*odr_awb_sve_1_4*/, 9 /*odr_awb_sat_1_4*/, 10 /*ifd_lsc_1_4*/, 11 /*lsc_1_2*/, 12 /*gd_2_2*/, 13 /*wb_1_1*/, 14 /*bnlm_3_4*/, 15 /*bxt_demosaic*/, 16 /*vcsc_2_0_b*/, 17 /*gltm_2_0*/, 18 /*xnr_5_4*/, 19 /*vcr_3_1*/, 20 /*glim_2_0*/, 21 /*acm_1_2*/, 22 /*gammatm_v4*/, 23 /*csc_1_1*/, 26 /*b2i_ds_1_1*/, 27 /*lbff_crop_espa_1_4*/, 28 /*image_upscaler_1_1*/, 29 /*cas_1_1*/, 30 /*odr_ofs_mp_1_4*/, 31 /*b2i_ds_output_1_1*/, 32 /*odr_ofs_dp_1_4*/, 24 /*ccm_3a_2_0*/, 33 /*aestatistics_2_1*/, 34 /*odr_ae_1_4*/, 25 /*fr_grid_1_0*/, 35 /*odr_af_std_1_4*/, 36 /*ifd_gmv_1_4*/, 37 /*gmv_statistics_1_1*/, 38 /*odr_gmv_feature_1_4*/, 39 /*odr_gmv_match_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[14].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffRgbIrNoGmvWithTnrNoSapOuterNode::Init(LbffRgbIrNoGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 48, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[48] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 15021 /*rgbs_grid_1_1*/, 14488 /*rgb_ir_2_0*/, 60297 /*odr_ir_1_4*/, 38544 /*odr_awb_std_1_4*/, 53430 /*odr_awb_sve_1_4*/, 1248 /*odr_awb_sat_1_4*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 2495 /*tnr7_spatial_1_1*/, 29996 /*tnr_scaler_lb_1_1*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 23639 /*tnr7_ims_1_2*/, 1502 /*tnr7_bc_1_2*/, 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 20119 /*tnr7_blend_1_1*/, 5215 /*odr_tnr_fp_yuvn_1_4*/, 20623 /*tnr_scaler_fp_1_1*/, 28787 /*image_upscaler_1_1*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/, 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0xF767EF0007F1, 0x0}; // { ifd_pipe_1_4[0], rgbs_grid_1_1[4], rgb_ir_2_0[5], odr_ir_1_4[6], odr_awb_std_1_4[7], odr_awb_sve_1_4[8], odr_awb_sat_1_4[9], ifd_lsc_1_4[10], ccm_3a_2_0[24], fr_grid_1_0[25], b2i_ds_1_1[26], lbff_crop_espa_1_4[27], tnr_scaler_lb_1_1[29], aestatistics_2_1[30], odr_ae_1_4[31], odr_af_std_1_4[32], ifd_tnr_sp_bc_yuv4nm1_1_4[33], ifd_tnr_sp_bc_rs4nm1_1_4[34], odr_tnr_sp_bc_rs4n_1_4[37], ifd_tnr_fp_blend_yuvnm1_1_4[38], odr_tnr_fp_yuvn_1_4[40], tnr_scaler_fp_1_1[41], image_upscaler_1_1[42], odr_ofs_mp_1_4[44], b2i_ds_output_1_1[45], odr_ofs_dp_1_4[46], odr_tnr_scale_fp_yuv4n_1_4[47] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0xC8CFD8000FC2, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgbs_grid_1_1, rgb_ir_2_0}[1], {odr_ir_1_4}[2], {odr_awb_std_1_4}[3], {odr_awb_sve_1_4}[4], {odr_awb_sat_1_4}[5], {ifd_lsc_1_4}[6], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[7], {lbff_crop_espa_1_4}[8], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[9], {aestatistics_2_1}[10], {odr_ae_1_4}[11], {odr_af_std_1_4}[12], {ifd_tnr_sp_bc_yuv4nm1_1_4}[13], {ifd_tnr_sp_bc_rs4nm1_1_4}[14], {tnr7_ims_1_2, tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[15], {ifd_tnr_fp_blend_yuvnm1_1_4}[16], {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[17], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[18], {odr_ofs_dp_1_4}[19], {odr_tnr_scale_fp_yuv4n_1_4}[20] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0xFFEFFF000FF3, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgbs_grid_1_1}[2], {rgb_ir_2_0}[3], {odr_ir_1_4}[4], {odr_awb_std_1_4}[5], {odr_awb_sve_1_4}[6], {odr_awb_sat_1_4}[7], {ifd_lsc_1_4}[8], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[9], {ccm_3a_2_0}[10], {fr_grid_1_0}[11], {b2i_ds_1_1}[12], {lbff_crop_espa_1_4}[13], {tnr7_spatial_1_1}[14], {tnr_scaler_lb_1_1}[15], {aestatistics_2_1}[16], {odr_ae_1_4}[17], {odr_af_std_1_4}[18], {ifd_tnr_sp_bc_yuv4nm1_1_4}[19], {ifd_tnr_sp_bc_rs4nm1_1_4}[20], {tnr7_ims_1_2, tnr7_bc_1_2}[21], {odr_tnr_sp_bc_rs4n_1_4}[22], {ifd_tnr_fp_blend_yuvnm1_1_4}[23], {tnr7_blend_1_1}[24], {odr_tnr_fp_yuvn_1_4}[25], {tnr_scaler_fp_1_1}[26], {image_upscaler_1_1}[27], {cas_1_1}[28], {odr_ofs_mp_1_4}[29], {b2i_ds_output_1_1}[30], {odr_ofs_dp_1_4}[31], {odr_tnr_scale_fp_yuv4n_1_4}[32] } + uint8_t systemApisSizes[48] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 24 /*rgbs_grid_1_1*/, 0 /*rgb_ir_2_0*/, 220 /*odr_ir_1_4*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sve_1_4*/, 220 /*odr_awb_sat_1_4*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*tnr7_spatial_1_1*/, 0 /*tnr_scaler_lb_1_1*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 0 /*tnr7_ims_1_2*/, 5 /*tnr7_bc_1_2*/, 220 /*odr_tnr_sp_bc_rs4n_1_4*/, 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 5 /*tnr7_blend_1_1*/, 220 /*odr_tnr_fp_yuvn_1_4*/, 0 /*tnr_scaler_fp_1_1*/, 0 /*image_upscaler_1_1*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/, 220 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint16_t runKernelConfigOrder[48] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 5 /*rgb_ir_2_0*/, 6 /*odr_ir_1_4*/, 4 /*rgbs_grid_1_1*/, 7 /*odr_awb_std_1_4*/, 8 /*odr_awb_sve_1_4*/, 9 /*odr_awb_sat_1_4*/, 10 /*ifd_lsc_1_4*/, 11 /*lsc_1_2*/, 12 /*gd_2_2*/, 13 /*wb_1_1*/, 14 /*bnlm_3_4*/, 15 /*bxt_demosaic*/, 16 /*vcsc_2_0_b*/, 17 /*gltm_2_0*/, 18 /*xnr_5_4*/, 19 /*vcr_3_1*/, 20 /*glim_2_0*/, 21 /*acm_1_2*/, 22 /*gammatm_v4*/, 23 /*csc_1_1*/, 26 /*b2i_ds_1_1*/, 27 /*lbff_crop_espa_1_4*/, 28 /*tnr7_spatial_1_1*/, 29 /*tnr_scaler_lb_1_1*/, 24 /*ccm_3a_2_0*/, 30 /*aestatistics_2_1*/, 31 /*odr_ae_1_4*/, 25 /*fr_grid_1_0*/, 32 /*odr_af_std_1_4*/, 33 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 34 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 35 /*tnr7_ims_1_2*/, 36 /*tnr7_bc_1_2*/, 37 /*odr_tnr_sp_bc_rs4n_1_4*/, 38 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 39 /*tnr7_blend_1_1*/, 42 /*image_upscaler_1_1*/, 43 /*cas_1_1*/, 44 /*odr_ofs_mp_1_4*/, 45 /*b2i_ds_output_1_1*/, 46 /*odr_ofs_dp_1_4*/, 40 /*odr_tnr_fp_yuvn_1_4*/, 41 /*tnr_scaler_fp_1_1*/, 47 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[14].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffRgbIrIrNoGmvWithTnrNoSapOuterNode::Init(LbffRgbIrIrNoGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 44, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[44] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 2495 /*tnr7_spatial_1_1*/, 29996 /*tnr_scaler_lb_1_1*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 23639 /*tnr7_ims_1_2*/, 1502 /*tnr7_bc_1_2*/, 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 20119 /*tnr7_blend_1_1*/, 5215 /*odr_tnr_fp_yuvn_1_4*/, 20623 /*tnr_scaler_fp_1_1*/, 28787 /*image_upscaler_1_1*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/, 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0xF767FBE0009, 0x0}; // { ifd_pipe_1_4[0], ifd_lsc_1_4[3], rgbs_grid_1_1[17], ccm_3a_2_0[18], fr_grid_1_0[19], b2i_ds_1_1[20], lbff_crop_espa_1_4[21], tnr_scaler_lb_1_1[23], odr_awb_std_1_4[24], odr_awb_sat_1_4[25], aestatistics_2_1[26], odr_ae_1_4[27], odr_af_std_1_4[28], ifd_tnr_sp_bc_yuv4nm1_1_4[29], ifd_tnr_sp_bc_rs4nm1_1_4[30], odr_tnr_sp_bc_rs4n_1_4[33], ifd_tnr_fp_blend_yuvnm1_1_4[34], odr_tnr_fp_yuvn_1_4[36], tnr_scaler_fp_1_1[37], image_upscaler_1_1[38], odr_ofs_mp_1_4[40], b2i_ds_output_1_1[41], odr_ofs_dp_1_4[42], odr_tnr_scale_fp_yuv4n_1_4[43] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0xC8CFF60001A, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[3], {lbff_crop_espa_1_4}[4], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[5], {odr_awb_std_1_4}[6], {odr_awb_sat_1_4}[7], {aestatistics_2_1}[8], {odr_ae_1_4}[9], {odr_af_std_1_4}[10], {ifd_tnr_sp_bc_yuv4nm1_1_4}[11], {ifd_tnr_sp_bc_rs4nm1_1_4}[12], {tnr7_ims_1_2, tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[13], {ifd_tnr_fp_blend_yuvnm1_1_4}[14], {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[15], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[16], {odr_ofs_dp_1_4}[17], {odr_tnr_scale_fp_yuv4n_1_4}[18] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0xFFEFFFE001B, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[3], {rgbs_grid_1_1}[4], {ccm_3a_2_0}[5], {fr_grid_1_0}[6], {b2i_ds_1_1}[7], {lbff_crop_espa_1_4}[8], {tnr7_spatial_1_1}[9], {tnr_scaler_lb_1_1}[10], {odr_awb_std_1_4}[11], {odr_awb_sat_1_4}[12], {aestatistics_2_1}[13], {odr_ae_1_4}[14], {odr_af_std_1_4}[15], {ifd_tnr_sp_bc_yuv4nm1_1_4}[16], {ifd_tnr_sp_bc_rs4nm1_1_4}[17], {tnr7_ims_1_2, tnr7_bc_1_2}[18], {odr_tnr_sp_bc_rs4n_1_4}[19], {ifd_tnr_fp_blend_yuvnm1_1_4}[20], {tnr7_blend_1_1}[21], {odr_tnr_fp_yuvn_1_4}[22], {tnr_scaler_fp_1_1}[23], {image_upscaler_1_1}[24], {cas_1_1}[25], {odr_ofs_mp_1_4}[26], {b2i_ds_output_1_1}[27], {odr_ofs_dp_1_4}[28], {odr_tnr_scale_fp_yuv4n_1_4}[29] } + uint8_t systemApisSizes[44] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*tnr7_spatial_1_1*/, 0 /*tnr_scaler_lb_1_1*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 0 /*tnr7_ims_1_2*/, 5 /*tnr7_bc_1_2*/, 220 /*odr_tnr_sp_bc_rs4n_1_4*/, 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 5 /*tnr7_blend_1_1*/, 220 /*odr_tnr_fp_yuvn_1_4*/, 0 /*tnr_scaler_fp_1_1*/, 0 /*image_upscaler_1_1*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/, 220 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint16_t runKernelConfigOrder[44] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*ifd_lsc_1_4*/, 4 /*lsc_1_2*/, 5 /*gd_2_2*/, 6 /*wb_1_1*/, 7 /*bnlm_3_4*/, 8 /*bxt_demosaic*/, 9 /*vcsc_2_0_b*/, 10 /*gltm_2_0*/, 11 /*xnr_5_4*/, 12 /*vcr_3_1*/, 13 /*glim_2_0*/, 14 /*acm_1_2*/, 15 /*gammatm_v4*/, 16 /*csc_1_1*/, 20 /*b2i_ds_1_1*/, 21 /*lbff_crop_espa_1_4*/, 22 /*tnr7_spatial_1_1*/, 23 /*tnr_scaler_lb_1_1*/, 17 /*rgbs_grid_1_1*/, 24 /*odr_awb_std_1_4*/, 25 /*odr_awb_sat_1_4*/, 18 /*ccm_3a_2_0*/, 26 /*aestatistics_2_1*/, 27 /*odr_ae_1_4*/, 19 /*fr_grid_1_0*/, 28 /*odr_af_std_1_4*/, 29 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 30 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 31 /*tnr7_ims_1_2*/, 32 /*tnr7_bc_1_2*/, 33 /*odr_tnr_sp_bc_rs4n_1_4*/, 34 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 35 /*tnr7_blend_1_1*/, 38 /*image_upscaler_1_1*/, 39 /*cas_1_1*/, 40 /*odr_ofs_mp_1_4*/, 41 /*b2i_ds_output_1_1*/, 42 /*odr_ofs_dp_1_4*/, 36 /*odr_tnr_fp_yuvn_1_4*/, 37 /*tnr_scaler_fp_1_1*/, 43 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[7].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffRgbIrWithGmvWithTnrNoSapOuterNode::Init(LbffRgbIrWithGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 52, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[52] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 15021 /*rgbs_grid_1_1*/, 14488 /*rgb_ir_2_0*/, 60297 /*odr_ir_1_4*/, 38544 /*odr_awb_std_1_4*/, 53430 /*odr_awb_sve_1_4*/, 1248 /*odr_awb_sat_1_4*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 2495 /*tnr7_spatial_1_1*/, 29996 /*tnr_scaler_lb_1_1*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 51073 /*ifd_gmv_1_4*/, 40280 /*gmv_statistics_1_1*/, 7416 /*odr_gmv_feature_1_4*/, 41148 /*odr_gmv_match_1_4*/, 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 23639 /*tnr7_ims_1_2*/, 1502 /*tnr7_bc_1_2*/, 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 20119 /*tnr7_blend_1_1*/, 5215 /*odr_tnr_fp_yuvn_1_4*/, 20623 /*tnr_scaler_fp_1_1*/, 28787 /*image_upscaler_1_1*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/, 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0xF767FEF0007F1, 0x0}; // { ifd_pipe_1_4[0], rgbs_grid_1_1[4], rgb_ir_2_0[5], odr_ir_1_4[6], odr_awb_std_1_4[7], odr_awb_sve_1_4[8], odr_awb_sat_1_4[9], ifd_lsc_1_4[10], ccm_3a_2_0[24], fr_grid_1_0[25], b2i_ds_1_1[26], lbff_crop_espa_1_4[27], tnr_scaler_lb_1_1[29], aestatistics_2_1[30], odr_ae_1_4[31], odr_af_std_1_4[32], ifd_gmv_1_4[33], gmv_statistics_1_1[34], odr_gmv_feature_1_4[35], odr_gmv_match_1_4[36], ifd_tnr_sp_bc_yuv4nm1_1_4[37], ifd_tnr_sp_bc_rs4nm1_1_4[38], odr_tnr_sp_bc_rs4n_1_4[41], ifd_tnr_fp_blend_yuvnm1_1_4[42], odr_tnr_fp_yuvn_1_4[44], tnr_scaler_fp_1_1[45], image_upscaler_1_1[46], odr_ofs_mp_1_4[48], b2i_ds_output_1_1[49], odr_ofs_dp_1_4[50], odr_tnr_scale_fp_yuv4n_1_4[51] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0xC8CFFD8000FC2, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgbs_grid_1_1, rgb_ir_2_0}[1], {odr_ir_1_4}[2], {odr_awb_std_1_4}[3], {odr_awb_sve_1_4}[4], {odr_awb_sat_1_4}[5], {ifd_lsc_1_4}[6], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[7], {lbff_crop_espa_1_4}[8], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[9], {aestatistics_2_1}[10], {odr_ae_1_4}[11], {odr_af_std_1_4}[12], {ifd_gmv_1_4}[13], {gmv_statistics_1_1}[14], {odr_gmv_feature_1_4}[15], {odr_gmv_match_1_4}[16], {ifd_tnr_sp_bc_yuv4nm1_1_4}[17], {ifd_tnr_sp_bc_rs4nm1_1_4}[18], {tnr7_ims_1_2, tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[19], {ifd_tnr_fp_blend_yuvnm1_1_4}[20], {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[21], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[22], {odr_ofs_dp_1_4}[23], {odr_tnr_scale_fp_yuv4n_1_4}[24] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0xFFEFFFF000FF3, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgbs_grid_1_1}[2], {rgb_ir_2_0}[3], {odr_ir_1_4}[4], {odr_awb_std_1_4}[5], {odr_awb_sve_1_4}[6], {odr_awb_sat_1_4}[7], {ifd_lsc_1_4}[8], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[9], {ccm_3a_2_0}[10], {fr_grid_1_0}[11], {b2i_ds_1_1}[12], {lbff_crop_espa_1_4}[13], {tnr7_spatial_1_1}[14], {tnr_scaler_lb_1_1}[15], {aestatistics_2_1}[16], {odr_ae_1_4}[17], {odr_af_std_1_4}[18], {ifd_gmv_1_4}[19], {gmv_statistics_1_1}[20], {odr_gmv_feature_1_4}[21], {odr_gmv_match_1_4}[22], {ifd_tnr_sp_bc_yuv4nm1_1_4}[23], {ifd_tnr_sp_bc_rs4nm1_1_4}[24], {tnr7_ims_1_2, tnr7_bc_1_2}[25], {odr_tnr_sp_bc_rs4n_1_4}[26], {ifd_tnr_fp_blend_yuvnm1_1_4}[27], {tnr7_blend_1_1}[28], {odr_tnr_fp_yuvn_1_4}[29], {tnr_scaler_fp_1_1}[30], {image_upscaler_1_1}[31], {cas_1_1}[32], {odr_ofs_mp_1_4}[33], {b2i_ds_output_1_1}[34], {odr_ofs_dp_1_4}[35], {odr_tnr_scale_fp_yuv4n_1_4}[36] } + uint8_t systemApisSizes[52] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 24 /*rgbs_grid_1_1*/, 0 /*rgb_ir_2_0*/, 220 /*odr_ir_1_4*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sve_1_4*/, 220 /*odr_awb_sat_1_4*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*tnr7_spatial_1_1*/, 0 /*tnr_scaler_lb_1_1*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_gmv_1_4*/, 32 /*gmv_statistics_1_1*/, 220 /*odr_gmv_feature_1_4*/, 220 /*odr_gmv_match_1_4*/, 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 0 /*tnr7_ims_1_2*/, 5 /*tnr7_bc_1_2*/, 220 /*odr_tnr_sp_bc_rs4n_1_4*/, 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 5 /*tnr7_blend_1_1*/, 220 /*odr_tnr_fp_yuvn_1_4*/, 0 /*tnr_scaler_fp_1_1*/, 0 /*image_upscaler_1_1*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/, 220 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint16_t runKernelConfigOrder[52] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 5 /*rgb_ir_2_0*/, 6 /*odr_ir_1_4*/, 4 /*rgbs_grid_1_1*/, 7 /*odr_awb_std_1_4*/, 8 /*odr_awb_sve_1_4*/, 9 /*odr_awb_sat_1_4*/, 10 /*ifd_lsc_1_4*/, 11 /*lsc_1_2*/, 12 /*gd_2_2*/, 13 /*wb_1_1*/, 14 /*bnlm_3_4*/, 15 /*bxt_demosaic*/, 16 /*vcsc_2_0_b*/, 17 /*gltm_2_0*/, 18 /*xnr_5_4*/, 19 /*vcr_3_1*/, 20 /*glim_2_0*/, 21 /*acm_1_2*/, 22 /*gammatm_v4*/, 23 /*csc_1_1*/, 26 /*b2i_ds_1_1*/, 27 /*lbff_crop_espa_1_4*/, 28 /*tnr7_spatial_1_1*/, 29 /*tnr_scaler_lb_1_1*/, 24 /*ccm_3a_2_0*/, 30 /*aestatistics_2_1*/, 31 /*odr_ae_1_4*/, 25 /*fr_grid_1_0*/, 32 /*odr_af_std_1_4*/, 33 /*ifd_gmv_1_4*/, 34 /*gmv_statistics_1_1*/, 35 /*odr_gmv_feature_1_4*/, 36 /*odr_gmv_match_1_4*/, 37 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 38 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 39 /*tnr7_ims_1_2*/, 40 /*tnr7_bc_1_2*/, 41 /*odr_tnr_sp_bc_rs4n_1_4*/, 42 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 43 /*tnr7_blend_1_1*/, 46 /*image_upscaler_1_1*/, 47 /*cas_1_1*/, 48 /*odr_ofs_mp_1_4*/, 49 /*b2i_ds_output_1_1*/, 50 /*odr_ofs_dp_1_4*/, 44 /*odr_tnr_fp_yuvn_1_4*/, 45 /*tnr_scaler_fp_1_1*/, 51 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[14].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffIrNoGmvNoTnrNoSapOuterNode::Init(LbffIrNoGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 33, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[33] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 33184 /*dpc_2_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 28787 /*image_upscaler_1_1*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x1FEFC0009, 0x0}; // { ifd_pipe_1_4[0], ifd_lsc_1_4[3], rgbs_grid_1_1[18], ccm_3a_2_0[19], fr_grid_1_0[20], b2i_ds_1_1[21], lbff_crop_espa_1_4[22], image_upscaler_1_1[23], odr_ofs_mp_1_4[25], b2i_ds_output_1_1[26], odr_ofs_dp_1_4[27], odr_awb_std_1_4[28], odr_awb_sat_1_4[29], aestatistics_2_1[30], odr_ae_1_4[31], odr_af_std_1_4[32] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x1F9C0001A, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, dpc_2_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[3], {lbff_crop_espa_1_4}[4], {image_upscaler_1_1}[5], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[6], {odr_ofs_dp_1_4}[7], {odr_awb_std_1_4}[8], {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], {odr_ae_1_4}[11], {odr_af_std_1_4}[12] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x1FFFC001B, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, dpc_2_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[3], {rgbs_grid_1_1}[4], {ccm_3a_2_0}[5], {fr_grid_1_0}[6], {b2i_ds_1_1}[7], {lbff_crop_espa_1_4}[8], {image_upscaler_1_1}[9], {cas_1_1}[10], {odr_ofs_mp_1_4}[11], {b2i_ds_output_1_1}[12], {odr_ofs_dp_1_4}[13], {odr_awb_std_1_4}[14], {odr_awb_sat_1_4}[15], {aestatistics_2_1}[16], {odr_ae_1_4}[17], {odr_af_std_1_4}[18] } + uint8_t systemApisSizes[33] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 20 /*dpc_2_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*image_upscaler_1_1*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/}; + uint16_t runKernelConfigOrder[33] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*ifd_lsc_1_4*/, 4 /*lsc_1_2*/, 5 /*dpc_2_2*/, 6 /*gd_2_2*/, 7 /*wb_1_1*/, 8 /*bnlm_3_4*/, 9 /*bxt_demosaic*/, 10 /*vcsc_2_0_b*/, 11 /*gltm_2_0*/, 12 /*xnr_5_4*/, 13 /*vcr_3_1*/, 14 /*glim_2_0*/, 15 /*acm_1_2*/, 16 /*gammatm_v4*/, 17 /*csc_1_1*/, 21 /*b2i_ds_1_1*/, 22 /*lbff_crop_espa_1_4*/, 23 /*image_upscaler_1_1*/, 24 /*cas_1_1*/, 25 /*odr_ofs_mp_1_4*/, 26 /*b2i_ds_output_1_1*/, 27 /*odr_ofs_dp_1_4*/, 18 /*rgbs_grid_1_1*/, 28 /*odr_awb_std_1_4*/, 29 /*odr_awb_sat_1_4*/, 19 /*ccm_3a_2_0*/, 30 /*aestatistics_2_1*/, 31 /*odr_ae_1_4*/, 20 /*fr_grid_1_0*/, 32 /*odr_af_std_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[8].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffIrWithGmvNoTnrNoSapOuterNode::Init(LbffIrWithGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 37, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[37] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 33184 /*dpc_2_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 28787 /*image_upscaler_1_1*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 51073 /*ifd_gmv_1_4*/, 40280 /*gmv_statistics_1_1*/, 7416 /*odr_gmv_feature_1_4*/, 41148 /*odr_gmv_match_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x1FFEFC0009, 0x0}; // { ifd_pipe_1_4[0], ifd_lsc_1_4[3], rgbs_grid_1_1[18], ccm_3a_2_0[19], fr_grid_1_0[20], b2i_ds_1_1[21], lbff_crop_espa_1_4[22], image_upscaler_1_1[23], odr_ofs_mp_1_4[25], b2i_ds_output_1_1[26], odr_ofs_dp_1_4[27], odr_awb_std_1_4[28], odr_awb_sat_1_4[29], aestatistics_2_1[30], odr_ae_1_4[31], odr_af_std_1_4[32], ifd_gmv_1_4[33], gmv_statistics_1_1[34], odr_gmv_feature_1_4[35], odr_gmv_match_1_4[36] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x1FF9C0001A, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, dpc_2_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[3], {lbff_crop_espa_1_4}[4], {image_upscaler_1_1}[5], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[6], {odr_ofs_dp_1_4}[7], {odr_awb_std_1_4}[8], {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], {odr_ae_1_4}[11], {odr_af_std_1_4}[12], {ifd_gmv_1_4}[13], {gmv_statistics_1_1}[14], {odr_gmv_feature_1_4}[15], {odr_gmv_match_1_4}[16] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x1FFFFC001B, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, dpc_2_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[3], {rgbs_grid_1_1}[4], {ccm_3a_2_0}[5], {fr_grid_1_0}[6], {b2i_ds_1_1}[7], {lbff_crop_espa_1_4}[8], {image_upscaler_1_1}[9], {cas_1_1}[10], {odr_ofs_mp_1_4}[11], {b2i_ds_output_1_1}[12], {odr_ofs_dp_1_4}[13], {odr_awb_std_1_4}[14], {odr_awb_sat_1_4}[15], {aestatistics_2_1}[16], {odr_ae_1_4}[17], {odr_af_std_1_4}[18], {ifd_gmv_1_4}[19], {gmv_statistics_1_1}[20], {odr_gmv_feature_1_4}[21], {odr_gmv_match_1_4}[22] } + uint8_t systemApisSizes[37] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 20 /*dpc_2_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*image_upscaler_1_1*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_gmv_1_4*/, 32 /*gmv_statistics_1_1*/, 220 /*odr_gmv_feature_1_4*/, 220 /*odr_gmv_match_1_4*/}; + uint16_t runKernelConfigOrder[37] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*ifd_lsc_1_4*/, 4 /*lsc_1_2*/, 5 /*dpc_2_2*/, 6 /*gd_2_2*/, 7 /*wb_1_1*/, 8 /*bnlm_3_4*/, 9 /*bxt_demosaic*/, 10 /*vcsc_2_0_b*/, 11 /*gltm_2_0*/, 12 /*xnr_5_4*/, 13 /*vcr_3_1*/, 14 /*glim_2_0*/, 15 /*acm_1_2*/, 16 /*gammatm_v4*/, 17 /*csc_1_1*/, 21 /*b2i_ds_1_1*/, 22 /*lbff_crop_espa_1_4*/, 23 /*image_upscaler_1_1*/, 24 /*cas_1_1*/, 25 /*odr_ofs_mp_1_4*/, 26 /*b2i_ds_output_1_1*/, 27 /*odr_ofs_dp_1_4*/, 18 /*rgbs_grid_1_1*/, 28 /*odr_awb_std_1_4*/, 29 /*odr_awb_sat_1_4*/, 19 /*ccm_3a_2_0*/, 30 /*aestatistics_2_1*/, 31 /*odr_ae_1_4*/, 20 /*fr_grid_1_0*/, 32 /*odr_af_std_1_4*/, 33 /*ifd_gmv_1_4*/, 34 /*gmv_statistics_1_1*/, 35 /*odr_gmv_feature_1_4*/, 36 /*odr_gmv_match_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[8].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffIrNoGmvWithTnrNoSapOuterNode::Init(LbffIrNoGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 45, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[45] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 33184 /*dpc_2_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 2495 /*tnr7_spatial_1_1*/, 29996 /*tnr_scaler_lb_1_1*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 23639 /*tnr7_ims_1_2*/, 1502 /*tnr7_bc_1_2*/, 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 20119 /*tnr7_blend_1_1*/, 5215 /*odr_tnr_fp_yuvn_1_4*/, 20623 /*tnr_scaler_fp_1_1*/, 28787 /*image_upscaler_1_1*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/, 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x1EECFF7C0009, 0x0}; // { ifd_pipe_1_4[0], ifd_lsc_1_4[3], rgbs_grid_1_1[18], ccm_3a_2_0[19], fr_grid_1_0[20], b2i_ds_1_1[21], lbff_crop_espa_1_4[22], tnr_scaler_lb_1_1[24], odr_awb_std_1_4[25], odr_awb_sat_1_4[26], aestatistics_2_1[27], odr_ae_1_4[28], odr_af_std_1_4[29], ifd_tnr_sp_bc_yuv4nm1_1_4[30], ifd_tnr_sp_bc_rs4nm1_1_4[31], odr_tnr_sp_bc_rs4n_1_4[34], ifd_tnr_fp_blend_yuvnm1_1_4[35], odr_tnr_fp_yuvn_1_4[37], tnr_scaler_fp_1_1[38], image_upscaler_1_1[39], odr_ofs_mp_1_4[41], b2i_ds_output_1_1[42], odr_ofs_dp_1_4[43], odr_tnr_scale_fp_yuv4n_1_4[44] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x1919FEC0001A, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, dpc_2_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[3], {lbff_crop_espa_1_4}[4], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[5], {odr_awb_std_1_4}[6], {odr_awb_sat_1_4}[7], {aestatistics_2_1}[8], {odr_ae_1_4}[9], {odr_af_std_1_4}[10], {ifd_tnr_sp_bc_yuv4nm1_1_4}[11], {ifd_tnr_sp_bc_rs4nm1_1_4}[12], {tnr7_ims_1_2, tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[13], {ifd_tnr_fp_blend_yuvnm1_1_4}[14], {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[15], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[16], {odr_ofs_dp_1_4}[17], {odr_tnr_scale_fp_yuv4n_1_4}[18] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x1FFDFFFC001B, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, dpc_2_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[3], {rgbs_grid_1_1}[4], {ccm_3a_2_0}[5], {fr_grid_1_0}[6], {b2i_ds_1_1}[7], {lbff_crop_espa_1_4}[8], {tnr7_spatial_1_1}[9], {tnr_scaler_lb_1_1}[10], {odr_awb_std_1_4}[11], {odr_awb_sat_1_4}[12], {aestatistics_2_1}[13], {odr_ae_1_4}[14], {odr_af_std_1_4}[15], {ifd_tnr_sp_bc_yuv4nm1_1_4}[16], {ifd_tnr_sp_bc_rs4nm1_1_4}[17], {tnr7_ims_1_2, tnr7_bc_1_2}[18], {odr_tnr_sp_bc_rs4n_1_4}[19], {ifd_tnr_fp_blend_yuvnm1_1_4}[20], {tnr7_blend_1_1}[21], {odr_tnr_fp_yuvn_1_4}[22], {tnr_scaler_fp_1_1}[23], {image_upscaler_1_1}[24], {cas_1_1}[25], {odr_ofs_mp_1_4}[26], {b2i_ds_output_1_1}[27], {odr_ofs_dp_1_4}[28], {odr_tnr_scale_fp_yuv4n_1_4}[29] } + uint8_t systemApisSizes[45] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 20 /*dpc_2_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*tnr7_spatial_1_1*/, 0 /*tnr_scaler_lb_1_1*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 0 /*tnr7_ims_1_2*/, 5 /*tnr7_bc_1_2*/, 220 /*odr_tnr_sp_bc_rs4n_1_4*/, 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 5 /*tnr7_blend_1_1*/, 220 /*odr_tnr_fp_yuvn_1_4*/, 0 /*tnr_scaler_fp_1_1*/, 0 /*image_upscaler_1_1*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/, 220 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint16_t runKernelConfigOrder[45] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*ifd_lsc_1_4*/, 4 /*lsc_1_2*/, 5 /*dpc_2_2*/, 6 /*gd_2_2*/, 7 /*wb_1_1*/, 8 /*bnlm_3_4*/, 9 /*bxt_demosaic*/, 10 /*vcsc_2_0_b*/, 11 /*gltm_2_0*/, 12 /*xnr_5_4*/, 13 /*vcr_3_1*/, 14 /*glim_2_0*/, 15 /*acm_1_2*/, 16 /*gammatm_v4*/, 17 /*csc_1_1*/, 21 /*b2i_ds_1_1*/, 22 /*lbff_crop_espa_1_4*/, 23 /*tnr7_spatial_1_1*/, 24 /*tnr_scaler_lb_1_1*/, 18 /*rgbs_grid_1_1*/, 25 /*odr_awb_std_1_4*/, 26 /*odr_awb_sat_1_4*/, 19 /*ccm_3a_2_0*/, 27 /*aestatistics_2_1*/, 28 /*odr_ae_1_4*/, 20 /*fr_grid_1_0*/, 29 /*odr_af_std_1_4*/, 30 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 31 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 32 /*tnr7_ims_1_2*/, 33 /*tnr7_bc_1_2*/, 34 /*odr_tnr_sp_bc_rs4n_1_4*/, 35 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 36 /*tnr7_blend_1_1*/, 39 /*image_upscaler_1_1*/, 40 /*cas_1_1*/, 41 /*odr_ofs_mp_1_4*/, 42 /*b2i_ds_output_1_1*/, 43 /*odr_ofs_dp_1_4*/, 37 /*odr_tnr_fp_yuvn_1_4*/, 38 /*tnr_scaler_fp_1_1*/, 44 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[8].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffIrWithGmvWithTnrNoSapOuterNode::Init(LbffIrWithGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 49, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[49] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 33184 /*dpc_2_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 2495 /*tnr7_spatial_1_1*/, 29996 /*tnr_scaler_lb_1_1*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 51073 /*ifd_gmv_1_4*/, 40280 /*gmv_statistics_1_1*/, 7416 /*odr_gmv_feature_1_4*/, 41148 /*odr_gmv_match_1_4*/, 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 23639 /*tnr7_ims_1_2*/, 1502 /*tnr7_bc_1_2*/, 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 20119 /*tnr7_blend_1_1*/, 5215 /*odr_tnr_fp_yuvn_1_4*/, 20623 /*tnr_scaler_fp_1_1*/, 28787 /*image_upscaler_1_1*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/, 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x1EECFFF7C0009, 0x0}; // { ifd_pipe_1_4[0], ifd_lsc_1_4[3], rgbs_grid_1_1[18], ccm_3a_2_0[19], fr_grid_1_0[20], b2i_ds_1_1[21], lbff_crop_espa_1_4[22], tnr_scaler_lb_1_1[24], odr_awb_std_1_4[25], odr_awb_sat_1_4[26], aestatistics_2_1[27], odr_ae_1_4[28], odr_af_std_1_4[29], ifd_gmv_1_4[30], gmv_statistics_1_1[31], odr_gmv_feature_1_4[32], odr_gmv_match_1_4[33], ifd_tnr_sp_bc_yuv4nm1_1_4[34], ifd_tnr_sp_bc_rs4nm1_1_4[35], odr_tnr_sp_bc_rs4n_1_4[38], ifd_tnr_fp_blend_yuvnm1_1_4[39], odr_tnr_fp_yuvn_1_4[41], tnr_scaler_fp_1_1[42], image_upscaler_1_1[43], odr_ofs_mp_1_4[45], b2i_ds_output_1_1[46], odr_ofs_dp_1_4[47], odr_tnr_scale_fp_yuv4n_1_4[48] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x1919FFEC0001A, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, dpc_2_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[3], {lbff_crop_espa_1_4}[4], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[5], {odr_awb_std_1_4}[6], {odr_awb_sat_1_4}[7], {aestatistics_2_1}[8], {odr_ae_1_4}[9], {odr_af_std_1_4}[10], {ifd_gmv_1_4}[11], {gmv_statistics_1_1}[12], {odr_gmv_feature_1_4}[13], {odr_gmv_match_1_4}[14], {ifd_tnr_sp_bc_yuv4nm1_1_4}[15], {ifd_tnr_sp_bc_rs4nm1_1_4}[16], {tnr7_ims_1_2, tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[17], {ifd_tnr_fp_blend_yuvnm1_1_4}[18], {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[19], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[20], {odr_ofs_dp_1_4}[21], {odr_tnr_scale_fp_yuv4n_1_4}[22] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x1FFDFFFFC001B, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, dpc_2_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[3], {rgbs_grid_1_1}[4], {ccm_3a_2_0}[5], {fr_grid_1_0}[6], {b2i_ds_1_1}[7], {lbff_crop_espa_1_4}[8], {tnr7_spatial_1_1}[9], {tnr_scaler_lb_1_1}[10], {odr_awb_std_1_4}[11], {odr_awb_sat_1_4}[12], {aestatistics_2_1}[13], {odr_ae_1_4}[14], {odr_af_std_1_4}[15], {ifd_gmv_1_4}[16], {gmv_statistics_1_1}[17], {odr_gmv_feature_1_4}[18], {odr_gmv_match_1_4}[19], {ifd_tnr_sp_bc_yuv4nm1_1_4}[20], {ifd_tnr_sp_bc_rs4nm1_1_4}[21], {tnr7_ims_1_2, tnr7_bc_1_2}[22], {odr_tnr_sp_bc_rs4n_1_4}[23], {ifd_tnr_fp_blend_yuvnm1_1_4}[24], {tnr7_blend_1_1}[25], {odr_tnr_fp_yuvn_1_4}[26], {tnr_scaler_fp_1_1}[27], {image_upscaler_1_1}[28], {cas_1_1}[29], {odr_ofs_mp_1_4}[30], {b2i_ds_output_1_1}[31], {odr_ofs_dp_1_4}[32], {odr_tnr_scale_fp_yuv4n_1_4}[33] } + uint8_t systemApisSizes[49] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 20 /*dpc_2_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*tnr7_spatial_1_1*/, 0 /*tnr_scaler_lb_1_1*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_gmv_1_4*/, 32 /*gmv_statistics_1_1*/, 220 /*odr_gmv_feature_1_4*/, 220 /*odr_gmv_match_1_4*/, 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 0 /*tnr7_ims_1_2*/, 5 /*tnr7_bc_1_2*/, 220 /*odr_tnr_sp_bc_rs4n_1_4*/, 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 5 /*tnr7_blend_1_1*/, 220 /*odr_tnr_fp_yuvn_1_4*/, 0 /*tnr_scaler_fp_1_1*/, 0 /*image_upscaler_1_1*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/, 220 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint16_t runKernelConfigOrder[49] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*ifd_lsc_1_4*/, 4 /*lsc_1_2*/, 5 /*dpc_2_2*/, 6 /*gd_2_2*/, 7 /*wb_1_1*/, 8 /*bnlm_3_4*/, 9 /*bxt_demosaic*/, 10 /*vcsc_2_0_b*/, 11 /*gltm_2_0*/, 12 /*xnr_5_4*/, 13 /*vcr_3_1*/, 14 /*glim_2_0*/, 15 /*acm_1_2*/, 16 /*gammatm_v4*/, 17 /*csc_1_1*/, 21 /*b2i_ds_1_1*/, 22 /*lbff_crop_espa_1_4*/, 23 /*tnr7_spatial_1_1*/, 24 /*tnr_scaler_lb_1_1*/, 18 /*rgbs_grid_1_1*/, 25 /*odr_awb_std_1_4*/, 26 /*odr_awb_sat_1_4*/, 19 /*ccm_3a_2_0*/, 27 /*aestatistics_2_1*/, 28 /*odr_ae_1_4*/, 20 /*fr_grid_1_0*/, 29 /*odr_af_std_1_4*/, 30 /*ifd_gmv_1_4*/, 31 /*gmv_statistics_1_1*/, 32 /*odr_gmv_feature_1_4*/, 33 /*odr_gmv_match_1_4*/, 34 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 35 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 36 /*tnr7_ims_1_2*/, 37 /*tnr7_bc_1_2*/, 38 /*odr_tnr_sp_bc_rs4n_1_4*/, 39 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 40 /*tnr7_blend_1_1*/, 43 /*image_upscaler_1_1*/, 44 /*cas_1_1*/, 45 /*odr_ofs_mp_1_4*/, 46 /*b2i_ds_output_1_1*/, 47 /*odr_ofs_dp_1_4*/, 41 /*odr_tnr_fp_yuvn_1_4*/, 42 /*tnr_scaler_fp_1_1*/, 48 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[8].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode::Init(LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 39, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[39] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 54812 /*odr_dpc_pdaf_1_4*/, 14488 /*rgb_ir_2_0*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 28787 /*image_upscaler_1_1*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 22427 /*ifd_pdaf_1_4*/, 43213 /*pext_1_0*/, 44308 /*pafstatistics_1_2*/, 26892 /*odr_pdaf_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x7FFBF00071, 0x0}; // { ifd_pipe_1_4[0], odr_dpc_pdaf_1_4[4], rgb_ir_2_0[5], ifd_lsc_1_4[6], rgbs_grid_1_1[20], ccm_3a_2_0[21], fr_grid_1_0[22], b2i_ds_1_1[23], lbff_crop_espa_1_4[24], image_upscaler_1_1[25], odr_ofs_mp_1_4[27], b2i_ds_output_1_1[28], odr_ofs_dp_1_4[29], odr_awb_std_1_4[30], odr_awb_sat_1_4[31], aestatistics_2_1[32], odr_ae_1_4[33], odr_af_std_1_4[34], ifd_pdaf_1_4[35], pext_1_0[36], pafstatistics_1_2[37], odr_pdaf_1_4[38] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x7FE70000C2, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, odr_dpc_pdaf_1_4, rgb_ir_2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[3], {lbff_crop_espa_1_4}[4], {image_upscaler_1_1}[5], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[6], {odr_ofs_dp_1_4}[7], {odr_awb_std_1_4}[8], {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], {odr_ae_1_4}[11], {odr_af_std_1_4}[12], {ifd_pdaf_1_4}[13], {pext_1_0}[14], {pafstatistics_1_2}[15], {odr_pdaf_1_4}[16] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x7FFFF000F3, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {odr_dpc_pdaf_1_4}[2], {rgb_ir_2_0}[3], {ifd_lsc_1_4}[4], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[5], {rgbs_grid_1_1}[6], {ccm_3a_2_0}[7], {fr_grid_1_0}[8], {b2i_ds_1_1}[9], {lbff_crop_espa_1_4}[10], {image_upscaler_1_1}[11], {cas_1_1}[12], {odr_ofs_mp_1_4}[13], {b2i_ds_output_1_1}[14], {odr_ofs_dp_1_4}[15], {odr_awb_std_1_4}[16], {odr_awb_sat_1_4}[17], {aestatistics_2_1}[18], {odr_ae_1_4}[19], {odr_af_std_1_4}[20], {ifd_pdaf_1_4}[21], {pext_1_0}[22], {pafstatistics_1_2}[23], {odr_pdaf_1_4}[24] } + uint8_t systemApisSizes[39] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 220 /*odr_dpc_pdaf_1_4*/, 0 /*rgb_ir_2_0*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*image_upscaler_1_1*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_pdaf_1_4*/, 24 /*pext_1_0*/, 8 /*pafstatistics_1_2*/, 220 /*odr_pdaf_1_4*/}; + uint16_t runKernelConfigOrder[39] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 5 /*rgb_ir_2_0*/, 4 /*odr_dpc_pdaf_1_4*/, 6 /*ifd_lsc_1_4*/, 7 /*lsc_1_2*/, 8 /*gd_2_2*/, 9 /*wb_1_1*/, 10 /*bnlm_3_4*/, 11 /*bxt_demosaic*/, 12 /*vcsc_2_0_b*/, 13 /*gltm_2_0*/, 14 /*xnr_5_4*/, 15 /*vcr_3_1*/, 16 /*glim_2_0*/, 17 /*acm_1_2*/, 18 /*gammatm_v4*/, 19 /*csc_1_1*/, 23 /*b2i_ds_1_1*/, 24 /*lbff_crop_espa_1_4*/, 25 /*image_upscaler_1_1*/, 26 /*cas_1_1*/, 27 /*odr_ofs_mp_1_4*/, 28 /*b2i_ds_output_1_1*/, 29 /*odr_ofs_dp_1_4*/, 20 /*rgbs_grid_1_1*/, 30 /*odr_awb_std_1_4*/, 31 /*odr_awb_sat_1_4*/, 21 /*ccm_3a_2_0*/, 32 /*aestatistics_2_1*/, 33 /*odr_ae_1_4*/, 22 /*fr_grid_1_0*/, 34 /*odr_af_std_1_4*/, 35 /*ifd_pdaf_1_4*/, 36 /*pext_1_0*/, 37 /*pafstatistics_1_2*/, 38 /*odr_pdaf_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[10].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode::Init(LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 43, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[43] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 54812 /*odr_dpc_pdaf_1_4*/, 14488 /*rgb_ir_2_0*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 28787 /*image_upscaler_1_1*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 22427 /*ifd_pdaf_1_4*/, 43213 /*pext_1_0*/, 44308 /*pafstatistics_1_2*/, 26892 /*odr_pdaf_1_4*/, 51073 /*ifd_gmv_1_4*/, 40280 /*gmv_statistics_1_1*/, 7416 /*odr_gmv_feature_1_4*/, 41148 /*odr_gmv_match_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x7FFFBF00071, 0x0}; // { ifd_pipe_1_4[0], odr_dpc_pdaf_1_4[4], rgb_ir_2_0[5], ifd_lsc_1_4[6], rgbs_grid_1_1[20], ccm_3a_2_0[21], fr_grid_1_0[22], b2i_ds_1_1[23], lbff_crop_espa_1_4[24], image_upscaler_1_1[25], odr_ofs_mp_1_4[27], b2i_ds_output_1_1[28], odr_ofs_dp_1_4[29], odr_awb_std_1_4[30], odr_awb_sat_1_4[31], aestatistics_2_1[32], odr_ae_1_4[33], odr_af_std_1_4[34], ifd_pdaf_1_4[35], pext_1_0[36], pafstatistics_1_2[37], odr_pdaf_1_4[38], ifd_gmv_1_4[39], gmv_statistics_1_1[40], odr_gmv_feature_1_4[41], odr_gmv_match_1_4[42] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x7FFE70000C2, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, odr_dpc_pdaf_1_4, rgb_ir_2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[3], {lbff_crop_espa_1_4}[4], {image_upscaler_1_1}[5], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[6], {odr_ofs_dp_1_4}[7], {odr_awb_std_1_4}[8], {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], {odr_ae_1_4}[11], {odr_af_std_1_4}[12], {ifd_pdaf_1_4}[13], {pext_1_0}[14], {pafstatistics_1_2}[15], {odr_pdaf_1_4}[16], {ifd_gmv_1_4}[17], {gmv_statistics_1_1}[18], {odr_gmv_feature_1_4}[19], {odr_gmv_match_1_4}[20] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x7FFFFF000F3, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {odr_dpc_pdaf_1_4}[2], {rgb_ir_2_0}[3], {ifd_lsc_1_4}[4], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[5], {rgbs_grid_1_1}[6], {ccm_3a_2_0}[7], {fr_grid_1_0}[8], {b2i_ds_1_1}[9], {lbff_crop_espa_1_4}[10], {image_upscaler_1_1}[11], {cas_1_1}[12], {odr_ofs_mp_1_4}[13], {b2i_ds_output_1_1}[14], {odr_ofs_dp_1_4}[15], {odr_awb_std_1_4}[16], {odr_awb_sat_1_4}[17], {aestatistics_2_1}[18], {odr_ae_1_4}[19], {odr_af_std_1_4}[20], {ifd_pdaf_1_4}[21], {pext_1_0}[22], {pafstatistics_1_2}[23], {odr_pdaf_1_4}[24], {ifd_gmv_1_4}[25], {gmv_statistics_1_1}[26], {odr_gmv_feature_1_4}[27], {odr_gmv_match_1_4}[28] } + uint8_t systemApisSizes[43] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 220 /*odr_dpc_pdaf_1_4*/, 0 /*rgb_ir_2_0*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*image_upscaler_1_1*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_pdaf_1_4*/, 24 /*pext_1_0*/, 8 /*pafstatistics_1_2*/, 220 /*odr_pdaf_1_4*/, 220 /*ifd_gmv_1_4*/, 32 /*gmv_statistics_1_1*/, 220 /*odr_gmv_feature_1_4*/, 220 /*odr_gmv_match_1_4*/}; + uint16_t runKernelConfigOrder[43] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 5 /*rgb_ir_2_0*/, 4 /*odr_dpc_pdaf_1_4*/, 6 /*ifd_lsc_1_4*/, 7 /*lsc_1_2*/, 8 /*gd_2_2*/, 9 /*wb_1_1*/, 10 /*bnlm_3_4*/, 11 /*bxt_demosaic*/, 12 /*vcsc_2_0_b*/, 13 /*gltm_2_0*/, 14 /*xnr_5_4*/, 15 /*vcr_3_1*/, 16 /*glim_2_0*/, 17 /*acm_1_2*/, 18 /*gammatm_v4*/, 19 /*csc_1_1*/, 23 /*b2i_ds_1_1*/, 24 /*lbff_crop_espa_1_4*/, 25 /*image_upscaler_1_1*/, 26 /*cas_1_1*/, 27 /*odr_ofs_mp_1_4*/, 28 /*b2i_ds_output_1_1*/, 29 /*odr_ofs_dp_1_4*/, 20 /*rgbs_grid_1_1*/, 30 /*odr_awb_std_1_4*/, 31 /*odr_awb_sat_1_4*/, 21 /*ccm_3a_2_0*/, 32 /*aestatistics_2_1*/, 33 /*odr_ae_1_4*/, 22 /*fr_grid_1_0*/, 34 /*odr_af_std_1_4*/, 35 /*ifd_pdaf_1_4*/, 36 /*pext_1_0*/, 37 /*pafstatistics_1_2*/, 38 /*odr_pdaf_1_4*/, 39 /*ifd_gmv_1_4*/, 40 /*gmv_statistics_1_1*/, 41 /*odr_gmv_feature_1_4*/, 42 /*odr_gmv_match_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[10].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode::Init(LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 51, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[51] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 54812 /*odr_dpc_pdaf_1_4*/, 14488 /*rgb_ir_2_0*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 2495 /*tnr7_spatial_1_1*/, 29996 /*tnr_scaler_lb_1_1*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 22427 /*ifd_pdaf_1_4*/, 43213 /*pext_1_0*/, 44308 /*pafstatistics_1_2*/, 26892 /*odr_pdaf_1_4*/, 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 23639 /*tnr7_ims_1_2*/, 1502 /*tnr7_bc_1_2*/, 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 20119 /*tnr7_blend_1_1*/, 5215 /*odr_tnr_fp_yuvn_1_4*/, 20623 /*tnr_scaler_fp_1_1*/, 28787 /*image_upscaler_1_1*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/, 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x7BB3FFDF00071, 0x0}; // { ifd_pipe_1_4[0], odr_dpc_pdaf_1_4[4], rgb_ir_2_0[5], ifd_lsc_1_4[6], rgbs_grid_1_1[20], ccm_3a_2_0[21], fr_grid_1_0[22], b2i_ds_1_1[23], lbff_crop_espa_1_4[24], tnr_scaler_lb_1_1[26], odr_awb_std_1_4[27], odr_awb_sat_1_4[28], aestatistics_2_1[29], odr_ae_1_4[30], odr_af_std_1_4[31], ifd_pdaf_1_4[32], pext_1_0[33], pafstatistics_1_2[34], odr_pdaf_1_4[35], ifd_tnr_sp_bc_yuv4nm1_1_4[36], ifd_tnr_sp_bc_rs4nm1_1_4[37], odr_tnr_sp_bc_rs4n_1_4[40], ifd_tnr_fp_blend_yuvnm1_1_4[41], odr_tnr_fp_yuvn_1_4[43], tnr_scaler_fp_1_1[44], image_upscaler_1_1[45], odr_ofs_mp_1_4[47], b2i_ds_output_1_1[48], odr_ofs_dp_1_4[49], odr_tnr_scale_fp_yuv4n_1_4[50] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x6467FFB0000C2, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, odr_dpc_pdaf_1_4, rgb_ir_2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[3], {lbff_crop_espa_1_4}[4], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[5], {odr_awb_std_1_4}[6], {odr_awb_sat_1_4}[7], {aestatistics_2_1}[8], {odr_ae_1_4}[9], {odr_af_std_1_4}[10], {ifd_pdaf_1_4}[11], {pext_1_0}[12], {pafstatistics_1_2}[13], {odr_pdaf_1_4}[14], {ifd_tnr_sp_bc_yuv4nm1_1_4}[15], {ifd_tnr_sp_bc_rs4nm1_1_4}[16], {tnr7_ims_1_2, tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[17], {ifd_tnr_fp_blend_yuvnm1_1_4}[18], {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[19], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[20], {odr_ofs_dp_1_4}[21], {odr_tnr_scale_fp_yuv4n_1_4}[22] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x7FF7FFFF000F3, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {odr_dpc_pdaf_1_4}[2], {rgb_ir_2_0}[3], {ifd_lsc_1_4}[4], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[5], {rgbs_grid_1_1}[6], {ccm_3a_2_0}[7], {fr_grid_1_0}[8], {b2i_ds_1_1}[9], {lbff_crop_espa_1_4}[10], {tnr7_spatial_1_1}[11], {tnr_scaler_lb_1_1}[12], {odr_awb_std_1_4}[13], {odr_awb_sat_1_4}[14], {aestatistics_2_1}[15], {odr_ae_1_4}[16], {odr_af_std_1_4}[17], {ifd_pdaf_1_4}[18], {pext_1_0}[19], {pafstatistics_1_2}[20], {odr_pdaf_1_4}[21], {ifd_tnr_sp_bc_yuv4nm1_1_4}[22], {ifd_tnr_sp_bc_rs4nm1_1_4}[23], {tnr7_ims_1_2, tnr7_bc_1_2}[24], {odr_tnr_sp_bc_rs4n_1_4}[25], {ifd_tnr_fp_blend_yuvnm1_1_4}[26], {tnr7_blend_1_1}[27], {odr_tnr_fp_yuvn_1_4}[28], {tnr_scaler_fp_1_1}[29], {image_upscaler_1_1}[30], {cas_1_1}[31], {odr_ofs_mp_1_4}[32], {b2i_ds_output_1_1}[33], {odr_ofs_dp_1_4}[34], {odr_tnr_scale_fp_yuv4n_1_4}[35] } + uint8_t systemApisSizes[51] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 220 /*odr_dpc_pdaf_1_4*/, 0 /*rgb_ir_2_0*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*tnr7_spatial_1_1*/, 0 /*tnr_scaler_lb_1_1*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_pdaf_1_4*/, 24 /*pext_1_0*/, 8 /*pafstatistics_1_2*/, 220 /*odr_pdaf_1_4*/, 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 0 /*tnr7_ims_1_2*/, 5 /*tnr7_bc_1_2*/, 220 /*odr_tnr_sp_bc_rs4n_1_4*/, 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 5 /*tnr7_blend_1_1*/, 220 /*odr_tnr_fp_yuvn_1_4*/, 0 /*tnr_scaler_fp_1_1*/, 0 /*image_upscaler_1_1*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/, 220 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint16_t runKernelConfigOrder[51] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 5 /*rgb_ir_2_0*/, 4 /*odr_dpc_pdaf_1_4*/, 6 /*ifd_lsc_1_4*/, 7 /*lsc_1_2*/, 8 /*gd_2_2*/, 9 /*wb_1_1*/, 10 /*bnlm_3_4*/, 11 /*bxt_demosaic*/, 12 /*vcsc_2_0_b*/, 13 /*gltm_2_0*/, 14 /*xnr_5_4*/, 15 /*vcr_3_1*/, 16 /*glim_2_0*/, 17 /*acm_1_2*/, 18 /*gammatm_v4*/, 19 /*csc_1_1*/, 23 /*b2i_ds_1_1*/, 24 /*lbff_crop_espa_1_4*/, 25 /*tnr7_spatial_1_1*/, 26 /*tnr_scaler_lb_1_1*/, 20 /*rgbs_grid_1_1*/, 27 /*odr_awb_std_1_4*/, 28 /*odr_awb_sat_1_4*/, 21 /*ccm_3a_2_0*/, 29 /*aestatistics_2_1*/, 30 /*odr_ae_1_4*/, 22 /*fr_grid_1_0*/, 31 /*odr_af_std_1_4*/, 32 /*ifd_pdaf_1_4*/, 33 /*pext_1_0*/, 34 /*pafstatistics_1_2*/, 35 /*odr_pdaf_1_4*/, 36 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 37 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 38 /*tnr7_ims_1_2*/, 39 /*tnr7_bc_1_2*/, 40 /*odr_tnr_sp_bc_rs4n_1_4*/, 41 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 42 /*tnr7_blend_1_1*/, 45 /*image_upscaler_1_1*/, 46 /*cas_1_1*/, 47 /*odr_ofs_mp_1_4*/, 48 /*b2i_ds_output_1_1*/, 49 /*odr_ofs_dp_1_4*/, 43 /*odr_tnr_fp_yuvn_1_4*/, 44 /*tnr_scaler_fp_1_1*/, 50 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[10].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode::Init(LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 55, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[55] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 54812 /*odr_dpc_pdaf_1_4*/, 14488 /*rgb_ir_2_0*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 2495 /*tnr7_spatial_1_1*/, 29996 /*tnr_scaler_lb_1_1*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 22427 /*ifd_pdaf_1_4*/, 43213 /*pext_1_0*/, 44308 /*pafstatistics_1_2*/, 26892 /*odr_pdaf_1_4*/, 51073 /*ifd_gmv_1_4*/, 40280 /*gmv_statistics_1_1*/, 7416 /*odr_gmv_feature_1_4*/, 41148 /*odr_gmv_match_1_4*/, 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 23639 /*tnr7_ims_1_2*/, 1502 /*tnr7_bc_1_2*/, 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 20119 /*tnr7_blend_1_1*/, 5215 /*odr_tnr_fp_yuvn_1_4*/, 20623 /*tnr_scaler_fp_1_1*/, 28787 /*image_upscaler_1_1*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/, 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x7BB3FFFDF00071, 0x0}; // { ifd_pipe_1_4[0], odr_dpc_pdaf_1_4[4], rgb_ir_2_0[5], ifd_lsc_1_4[6], rgbs_grid_1_1[20], ccm_3a_2_0[21], fr_grid_1_0[22], b2i_ds_1_1[23], lbff_crop_espa_1_4[24], tnr_scaler_lb_1_1[26], odr_awb_std_1_4[27], odr_awb_sat_1_4[28], aestatistics_2_1[29], odr_ae_1_4[30], odr_af_std_1_4[31], ifd_pdaf_1_4[32], pext_1_0[33], pafstatistics_1_2[34], odr_pdaf_1_4[35], ifd_gmv_1_4[36], gmv_statistics_1_1[37], odr_gmv_feature_1_4[38], odr_gmv_match_1_4[39], ifd_tnr_sp_bc_yuv4nm1_1_4[40], ifd_tnr_sp_bc_rs4nm1_1_4[41], odr_tnr_sp_bc_rs4n_1_4[44], ifd_tnr_fp_blend_yuvnm1_1_4[45], odr_tnr_fp_yuvn_1_4[47], tnr_scaler_fp_1_1[48], image_upscaler_1_1[49], odr_ofs_mp_1_4[51], b2i_ds_output_1_1[52], odr_ofs_dp_1_4[53], odr_tnr_scale_fp_yuv4n_1_4[54] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x6467FFFB0000C2, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, odr_dpc_pdaf_1_4, rgb_ir_2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[3], {lbff_crop_espa_1_4}[4], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[5], {odr_awb_std_1_4}[6], {odr_awb_sat_1_4}[7], {aestatistics_2_1}[8], {odr_ae_1_4}[9], {odr_af_std_1_4}[10], {ifd_pdaf_1_4}[11], {pext_1_0}[12], {pafstatistics_1_2}[13], {odr_pdaf_1_4}[14], {ifd_gmv_1_4}[15], {gmv_statistics_1_1}[16], {odr_gmv_feature_1_4}[17], {odr_gmv_match_1_4}[18], {ifd_tnr_sp_bc_yuv4nm1_1_4}[19], {ifd_tnr_sp_bc_rs4nm1_1_4}[20], {tnr7_ims_1_2, tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[21], {ifd_tnr_fp_blend_yuvnm1_1_4}[22], {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[23], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[24], {odr_ofs_dp_1_4}[25], {odr_tnr_scale_fp_yuv4n_1_4}[26] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x7FF7FFFFF000F3, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {odr_dpc_pdaf_1_4}[2], {rgb_ir_2_0}[3], {ifd_lsc_1_4}[4], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[5], {rgbs_grid_1_1}[6], {ccm_3a_2_0}[7], {fr_grid_1_0}[8], {b2i_ds_1_1}[9], {lbff_crop_espa_1_4}[10], {tnr7_spatial_1_1}[11], {tnr_scaler_lb_1_1}[12], {odr_awb_std_1_4}[13], {odr_awb_sat_1_4}[14], {aestatistics_2_1}[15], {odr_ae_1_4}[16], {odr_af_std_1_4}[17], {ifd_pdaf_1_4}[18], {pext_1_0}[19], {pafstatistics_1_2}[20], {odr_pdaf_1_4}[21], {ifd_gmv_1_4}[22], {gmv_statistics_1_1}[23], {odr_gmv_feature_1_4}[24], {odr_gmv_match_1_4}[25], {ifd_tnr_sp_bc_yuv4nm1_1_4}[26], {ifd_tnr_sp_bc_rs4nm1_1_4}[27], {tnr7_ims_1_2, tnr7_bc_1_2}[28], {odr_tnr_sp_bc_rs4n_1_4}[29], {ifd_tnr_fp_blend_yuvnm1_1_4}[30], {tnr7_blend_1_1}[31], {odr_tnr_fp_yuvn_1_4}[32], {tnr_scaler_fp_1_1}[33], {image_upscaler_1_1}[34], {cas_1_1}[35], {odr_ofs_mp_1_4}[36], {b2i_ds_output_1_1}[37], {odr_ofs_dp_1_4}[38], {odr_tnr_scale_fp_yuv4n_1_4}[39] } + uint8_t systemApisSizes[55] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 220 /*odr_dpc_pdaf_1_4*/, 0 /*rgb_ir_2_0*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*tnr7_spatial_1_1*/, 0 /*tnr_scaler_lb_1_1*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_pdaf_1_4*/, 24 /*pext_1_0*/, 8 /*pafstatistics_1_2*/, 220 /*odr_pdaf_1_4*/, 220 /*ifd_gmv_1_4*/, 32 /*gmv_statistics_1_1*/, 220 /*odr_gmv_feature_1_4*/, 220 /*odr_gmv_match_1_4*/, 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 0 /*tnr7_ims_1_2*/, 5 /*tnr7_bc_1_2*/, 220 /*odr_tnr_sp_bc_rs4n_1_4*/, 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 5 /*tnr7_blend_1_1*/, 220 /*odr_tnr_fp_yuvn_1_4*/, 0 /*tnr_scaler_fp_1_1*/, 0 /*image_upscaler_1_1*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/, 220 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint16_t runKernelConfigOrder[55] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 5 /*rgb_ir_2_0*/, 4 /*odr_dpc_pdaf_1_4*/, 6 /*ifd_lsc_1_4*/, 7 /*lsc_1_2*/, 8 /*gd_2_2*/, 9 /*wb_1_1*/, 10 /*bnlm_3_4*/, 11 /*bxt_demosaic*/, 12 /*vcsc_2_0_b*/, 13 /*gltm_2_0*/, 14 /*xnr_5_4*/, 15 /*vcr_3_1*/, 16 /*glim_2_0*/, 17 /*acm_1_2*/, 18 /*gammatm_v4*/, 19 /*csc_1_1*/, 23 /*b2i_ds_1_1*/, 24 /*lbff_crop_espa_1_4*/, 25 /*tnr7_spatial_1_1*/, 26 /*tnr_scaler_lb_1_1*/, 20 /*rgbs_grid_1_1*/, 27 /*odr_awb_std_1_4*/, 28 /*odr_awb_sat_1_4*/, 21 /*ccm_3a_2_0*/, 29 /*aestatistics_2_1*/, 30 /*odr_ae_1_4*/, 22 /*fr_grid_1_0*/, 31 /*odr_af_std_1_4*/, 32 /*ifd_pdaf_1_4*/, 33 /*pext_1_0*/, 34 /*pafstatistics_1_2*/, 35 /*odr_pdaf_1_4*/, 36 /*ifd_gmv_1_4*/, 37 /*gmv_statistics_1_1*/, 38 /*odr_gmv_feature_1_4*/, 39 /*odr_gmv_match_1_4*/, 40 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 41 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 42 /*tnr7_ims_1_2*/, 43 /*tnr7_bc_1_2*/, 44 /*odr_tnr_sp_bc_rs4n_1_4*/, 45 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 46 /*tnr7_blend_1_1*/, 49 /*image_upscaler_1_1*/, 50 /*cas_1_1*/, 51 /*odr_ofs_mp_1_4*/, 52 /*b2i_ds_output_1_1*/, 53 /*odr_ofs_dp_1_4*/, 47 /*odr_tnr_fp_yuvn_1_4*/, 48 /*tnr_scaler_fp_1_1*/, 54 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[10].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode::Init(LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 67, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[67] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 54812 /*odr_dpc_pdaf_1_4*/, 14488 /*rgb_ir_2_0*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 22427 /*ifd_pdaf_1_4*/, 43213 /*pext_1_0*/, 44308 /*pafstatistics_1_2*/, 26892 /*odr_pdaf_1_4*/, 51073 /*ifd_gmv_1_4*/, 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 35263 /*ifd_segmap_bnlm_1_4*/, 54924 /*smurf_bnlm_1_0*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 9241 /*ifd_segmap_xnr_1_4*/, 42329 /*smurf_xnr_1_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 51914 /*ifd_segmap_acm_1_4*/, 28366 /*smurf_acm_1_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 2495 /*tnr7_spatial_1_1*/, 29996 /*tnr_scaler_lb_1_1*/, 23639 /*tnr7_ims_1_2*/, 40280 /*gmv_statistics_1_1*/, 7416 /*odr_gmv_feature_1_4*/, 41148 /*odr_gmv_match_1_4*/, 47873 /*ifd_segmap_tnr_bc_1_4*/, 13101 /*smurf_tnr_bc_1_0*/, 1502 /*tnr7_bc_1_2*/, 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, 14619 /*ifd_segmap_tnr_blend_1_4*/, 42749 /*smurf_tnr_blend_1_0*/, 20119 /*tnr7_blend_1_1*/, 5215 /*odr_tnr_fp_yuvn_1_4*/, 20623 /*tnr_scaler_fp_1_1*/, 28787 /*image_upscaler_1_1*/, 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/, 20893 /*ifd_segmap_cas_1_4*/, 37468 /*smurf_cas_1_0*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x7EEFAC630FFFFC71, 0x7}; // { ifd_pipe_1_4[0], odr_dpc_pdaf_1_4[4], rgb_ir_2_0[5], ifd_lsc_1_4[6], rgbs_grid_1_1[10], ccm_3a_2_0[11], fr_grid_1_0[12], odr_awb_std_1_4[13], odr_awb_sat_1_4[14], aestatistics_2_1[15], odr_ae_1_4[16], odr_af_std_1_4[17], ifd_pdaf_1_4[18], pext_1_0[19], pafstatistics_1_2[20], odr_pdaf_1_4[21], ifd_gmv_1_4[22], ifd_tnr_sp_bc_yuv4nm1_1_4[23], ifd_tnr_sp_bc_rs4nm1_1_4[24], ifd_tnr_fp_blend_yuvnm1_1_4[25], ifd_segmap_bnlm_1_4[26], smurf_bnlm_1_0[27], ifd_segmap_xnr_1_4[32], smurf_xnr_1_0[33], ifd_segmap_acm_1_4[37], smurf_acm_1_0[38], b2i_ds_1_1[42], lbff_crop_espa_1_4[43], tnr_scaler_lb_1_1[45], gmv_statistics_1_1[47], odr_gmv_feature_1_4[48], odr_gmv_match_1_4[49], ifd_segmap_tnr_bc_1_4[50], smurf_tnr_bc_1_0[51], odr_tnr_sp_bc_rs4n_1_4[53], ifd_segmap_tnr_blend_1_4[54], smurf_tnr_blend_1_0[55], odr_tnr_fp_yuvn_1_4[57], tnr_scaler_fp_1_1[58], image_upscaler_1_1[59], odr_tnr_scale_fp_yuv4n_1_4[60], ifd_segmap_cas_1_4[61], smurf_cas_1_0[62], odr_ofs_mp_1_4[64], b2i_ds_output_1_1[65], odr_ofs_dp_1_4[66] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0xF1DFD8E71FFFE0C2, 0x4}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, odr_dpc_pdaf_1_4, rgb_ir_2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sat_1_4}[5], {aestatistics_2_1}[6], {odr_ae_1_4}[7], {odr_af_std_1_4}[8], {ifd_pdaf_1_4}[9], {pext_1_0}[10], {pafstatistics_1_2}[11], {odr_pdaf_1_4}[12], {ifd_gmv_1_4}[13], {ifd_tnr_sp_bc_yuv4nm1_1_4}[14], {ifd_tnr_sp_bc_rs4nm1_1_4}[15], {ifd_tnr_fp_blend_yuvnm1_1_4}[16], {ifd_segmap_bnlm_1_4}[17], {smurf_bnlm_1_0}[18], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[19], {ifd_segmap_xnr_1_4}[20], {smurf_xnr_1_0}[21], {xnr_5_4, vcr_3_1, glim_2_0}[22], {ifd_segmap_acm_1_4}[23], {smurf_acm_1_0}[24], {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[25], {lbff_crop_espa_1_4}[26], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[27], {tnr7_ims_1_2}[28], {gmv_statistics_1_1}[29], {odr_gmv_feature_1_4}[30], {odr_gmv_match_1_4}[31], {ifd_segmap_tnr_bc_1_4}[32], {smurf_tnr_bc_1_0}[33], {tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[34], {ifd_segmap_tnr_blend_1_4}[35], {smurf_tnr_blend_1_0}[36], {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[37], {odr_tnr_scale_fp_yuv4n_1_4}[38], {ifd_segmap_cas_1_4}[39], {smurf_cas_1_0}[40], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[41], {odr_ofs_dp_1_4}[42] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0xFFFFFCE71FFFFCF3, 0x7}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {odr_dpc_pdaf_1_4}[2], {rgb_ir_2_0}[3], {ifd_lsc_1_4}[4], {lsc_1_2, gd_2_2, wb_1_1}[5], {rgbs_grid_1_1}[6], {ccm_3a_2_0}[7], {fr_grid_1_0}[8], {odr_awb_std_1_4}[9], {odr_awb_sat_1_4}[10], {aestatistics_2_1}[11], {odr_ae_1_4}[12], {odr_af_std_1_4}[13], {ifd_pdaf_1_4}[14], {pext_1_0}[15], {pafstatistics_1_2}[16], {odr_pdaf_1_4}[17], {ifd_gmv_1_4}[18], {ifd_tnr_sp_bc_yuv4nm1_1_4}[19], {ifd_tnr_sp_bc_rs4nm1_1_4}[20], {ifd_tnr_fp_blend_yuvnm1_1_4}[21], {ifd_segmap_bnlm_1_4}[22], {smurf_bnlm_1_0}[23], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[24], {ifd_segmap_xnr_1_4}[25], {smurf_xnr_1_0}[26], {xnr_5_4, vcr_3_1, glim_2_0}[27], {ifd_segmap_acm_1_4}[28], {smurf_acm_1_0}[29], {acm_1_2, gammatm_v4, csc_1_1}[30], {b2i_ds_1_1}[31], {lbff_crop_espa_1_4}[32], {tnr7_spatial_1_1}[33], {tnr_scaler_lb_1_1}[34], {tnr7_ims_1_2}[35], {gmv_statistics_1_1}[36], {odr_gmv_feature_1_4}[37], {odr_gmv_match_1_4}[38], {ifd_segmap_tnr_bc_1_4}[39], {smurf_tnr_bc_1_0}[40], {tnr7_bc_1_2}[41], {odr_tnr_sp_bc_rs4n_1_4}[42], {ifd_segmap_tnr_blend_1_4}[43], {smurf_tnr_blend_1_0}[44], {tnr7_blend_1_1}[45], {odr_tnr_fp_yuvn_1_4}[46], {tnr_scaler_fp_1_1}[47], {image_upscaler_1_1}[48], {odr_tnr_scale_fp_yuv4n_1_4}[49], {ifd_segmap_cas_1_4}[50], {smurf_cas_1_0}[51], {cas_1_1}[52], {odr_ofs_mp_1_4}[53], {b2i_ds_output_1_1}[54], {odr_ofs_dp_1_4}[55] } + uint8_t systemApisSizes[67] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 220 /*odr_dpc_pdaf_1_4*/, 0 /*rgb_ir_2_0*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_pdaf_1_4*/, 24 /*pext_1_0*/, 8 /*pafstatistics_1_2*/, 220 /*odr_pdaf_1_4*/, 220 /*ifd_gmv_1_4*/, 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 220 /*ifd_segmap_bnlm_1_4*/, 0 /*smurf_bnlm_1_0*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 220 /*ifd_segmap_xnr_1_4*/, 0 /*smurf_xnr_1_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 220 /*ifd_segmap_acm_1_4*/, 0 /*smurf_acm_1_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*tnr7_spatial_1_1*/, 0 /*tnr_scaler_lb_1_1*/, 0 /*tnr7_ims_1_2*/, 32 /*gmv_statistics_1_1*/, 220 /*odr_gmv_feature_1_4*/, 220 /*odr_gmv_match_1_4*/, 220 /*ifd_segmap_tnr_bc_1_4*/, 0 /*smurf_tnr_bc_1_0*/, 5 /*tnr7_bc_1_2*/, 220 /*odr_tnr_sp_bc_rs4n_1_4*/, 220 /*ifd_segmap_tnr_blend_1_4*/, 0 /*smurf_tnr_blend_1_0*/, 5 /*tnr7_blend_1_1*/, 220 /*odr_tnr_fp_yuvn_1_4*/, 0 /*tnr_scaler_fp_1_1*/, 0 /*image_upscaler_1_1*/, 220 /*odr_tnr_scale_fp_yuv4n_1_4*/, 220 /*ifd_segmap_cas_1_4*/, 0 /*smurf_cas_1_0*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/}; + uint16_t runKernelConfigOrder[67] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 5 /*rgb_ir_2_0*/, 4 /*odr_dpc_pdaf_1_4*/, 6 /*ifd_lsc_1_4*/, 7 /*lsc_1_2*/, 8 /*gd_2_2*/, 9 /*wb_1_1*/, 28 /*bnlm_3_4*/, 29 /*bxt_demosaic*/, 30 /*vcsc_2_0_b*/, 31 /*gltm_2_0*/, 34 /*xnr_5_4*/, 35 /*vcr_3_1*/, 36 /*glim_2_0*/, 39 /*acm_1_2*/, 40 /*gammatm_v4*/, 41 /*csc_1_1*/, 42 /*b2i_ds_1_1*/, 43 /*lbff_crop_espa_1_4*/, 44 /*tnr7_spatial_1_1*/, 45 /*tnr_scaler_lb_1_1*/, 10 /*rgbs_grid_1_1*/, 13 /*odr_awb_std_1_4*/, 14 /*odr_awb_sat_1_4*/, 11 /*ccm_3a_2_0*/, 15 /*aestatistics_2_1*/, 16 /*odr_ae_1_4*/, 12 /*fr_grid_1_0*/, 17 /*odr_af_std_1_4*/, 18 /*ifd_pdaf_1_4*/, 19 /*pext_1_0*/, 20 /*pafstatistics_1_2*/, 21 /*odr_pdaf_1_4*/, 22 /*ifd_gmv_1_4*/, 47 /*gmv_statistics_1_1*/, 48 /*odr_gmv_feature_1_4*/, 49 /*odr_gmv_match_1_4*/, 23 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 24 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 46 /*tnr7_ims_1_2*/, 52 /*tnr7_bc_1_2*/, 53 /*odr_tnr_sp_bc_rs4n_1_4*/, 25 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 56 /*tnr7_blend_1_1*/, 59 /*image_upscaler_1_1*/, 63 /*cas_1_1*/, 64 /*odr_ofs_mp_1_4*/, 65 /*b2i_ds_output_1_1*/, 66 /*odr_ofs_dp_1_4*/, 57 /*odr_tnr_fp_yuvn_1_4*/, 58 /*tnr_scaler_fp_1_1*/, 60 /*odr_tnr_scale_fp_yuv4n_1_4*/, 26 /*ifd_segmap_bnlm_1_4*/, 32 /*ifd_segmap_xnr_1_4*/, 37 /*ifd_segmap_acm_1_4*/, 50 /*ifd_segmap_tnr_bc_1_4*/, 54 /*ifd_segmap_tnr_blend_1_4*/, 61 /*ifd_segmap_cas_1_4*/, 27 /*smurf_bnlm_1_0*/, 33 /*smurf_xnr_1_0*/, 38 /*smurf_acm_1_0*/, 51 /*smurf_tnr_bc_1_0*/, 55 /*smurf_tnr_blend_1_0*/, 62 /*smurf_cas_1_0*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[28].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerNoGmvNoTnrWithSapOuterNode::Init(LbffBayerNoGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 42, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[42] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 14488 /*rgb_ir_2_0*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 35263 /*ifd_segmap_bnlm_1_4*/, 54924 /*smurf_bnlm_1_0*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 9241 /*ifd_segmap_xnr_1_4*/, 42329 /*smurf_xnr_1_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 51914 /*ifd_segmap_acm_1_4*/, 28366 /*smurf_acm_1_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 28787 /*image_upscaler_1_1*/, 20893 /*ifd_segmap_cas_1_4*/, 37468 /*smurf_cas_1_0*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x3BE3187FE31, 0x0}; // { ifd_pipe_1_4[0], rgb_ir_2_0[4], ifd_lsc_1_4[5], rgbs_grid_1_1[9], ccm_3a_2_0[10], fr_grid_1_0[11], odr_awb_std_1_4[12], odr_awb_sat_1_4[13], aestatistics_2_1[14], odr_ae_1_4[15], odr_af_std_1_4[16], ifd_segmap_bnlm_1_4[17], smurf_bnlm_1_0[18], ifd_segmap_xnr_1_4[23], smurf_xnr_1_0[24], ifd_segmap_acm_1_4[28], smurf_acm_1_0[29], b2i_ds_1_1[33], lbff_crop_espa_1_4[34], image_upscaler_1_1[35], ifd_segmap_cas_1_4[36], smurf_cas_1_0[37], odr_ofs_mp_1_4[39], b2i_ds_output_1_1[40], odr_ofs_dp_1_4[41] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x27C738FF062, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgb_ir_2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sat_1_4}[5], {aestatistics_2_1}[6], {odr_ae_1_4}[7], {odr_af_std_1_4}[8], {ifd_segmap_bnlm_1_4}[9], {smurf_bnlm_1_0}[10], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[11], {ifd_segmap_xnr_1_4}[12], {smurf_xnr_1_0}[13], {xnr_5_4, vcr_3_1, glim_2_0}[14], {ifd_segmap_acm_1_4}[15], {smurf_acm_1_0}[16], {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[17], {lbff_crop_espa_1_4}[18], {image_upscaler_1_1}[19], {ifd_segmap_cas_1_4}[20], {smurf_cas_1_0}[21], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[22], {odr_ofs_dp_1_4}[23] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x3FE738FFE73, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgb_ir_2_0}[2], {ifd_lsc_1_4}[3], {lsc_1_2, gd_2_2, wb_1_1}[4], {rgbs_grid_1_1}[5], {ccm_3a_2_0}[6], {fr_grid_1_0}[7], {odr_awb_std_1_4}[8], {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], {odr_ae_1_4}[11], {odr_af_std_1_4}[12], {ifd_segmap_bnlm_1_4}[13], {smurf_bnlm_1_0}[14], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[15], {ifd_segmap_xnr_1_4}[16], {smurf_xnr_1_0}[17], {xnr_5_4, vcr_3_1, glim_2_0}[18], {ifd_segmap_acm_1_4}[19], {smurf_acm_1_0}[20], {acm_1_2, gammatm_v4, csc_1_1}[21], {b2i_ds_1_1}[22], {lbff_crop_espa_1_4}[23], {image_upscaler_1_1}[24], {ifd_segmap_cas_1_4}[25], {smurf_cas_1_0}[26], {cas_1_1}[27], {odr_ofs_mp_1_4}[28], {b2i_ds_output_1_1}[29], {odr_ofs_dp_1_4}[30] } + uint8_t systemApisSizes[42] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 0 /*rgb_ir_2_0*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_segmap_bnlm_1_4*/, 0 /*smurf_bnlm_1_0*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 220 /*ifd_segmap_xnr_1_4*/, 0 /*smurf_xnr_1_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 220 /*ifd_segmap_acm_1_4*/, 0 /*smurf_acm_1_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*image_upscaler_1_1*/, 220 /*ifd_segmap_cas_1_4*/, 0 /*smurf_cas_1_0*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/}; + uint16_t runKernelConfigOrder[42] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 4 /*rgb_ir_2_0*/, 5 /*ifd_lsc_1_4*/, 6 /*lsc_1_2*/, 7 /*gd_2_2*/, 8 /*wb_1_1*/, 19 /*bnlm_3_4*/, 20 /*bxt_demosaic*/, 21 /*vcsc_2_0_b*/, 22 /*gltm_2_0*/, 25 /*xnr_5_4*/, 26 /*vcr_3_1*/, 27 /*glim_2_0*/, 30 /*acm_1_2*/, 31 /*gammatm_v4*/, 32 /*csc_1_1*/, 33 /*b2i_ds_1_1*/, 34 /*lbff_crop_espa_1_4*/, 35 /*image_upscaler_1_1*/, 38 /*cas_1_1*/, 39 /*odr_ofs_mp_1_4*/, 40 /*b2i_ds_output_1_1*/, 41 /*odr_ofs_dp_1_4*/, 9 /*rgbs_grid_1_1*/, 12 /*odr_awb_std_1_4*/, 13 /*odr_awb_sat_1_4*/, 10 /*ccm_3a_2_0*/, 14 /*aestatistics_2_1*/, 15 /*odr_ae_1_4*/, 11 /*fr_grid_1_0*/, 16 /*odr_af_std_1_4*/, 17 /*ifd_segmap_bnlm_1_4*/, 23 /*ifd_segmap_xnr_1_4*/, 28 /*ifd_segmap_acm_1_4*/, 36 /*ifd_segmap_cas_1_4*/, 18 /*smurf_bnlm_1_0*/, 24 /*smurf_xnr_1_0*/, 29 /*smurf_acm_1_0*/, 37 /*smurf_cas_1_0*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[19].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerWithGmvNoTnrWithSapOuterNode::Init(LbffBayerWithGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 46, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[46] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 14488 /*rgb_ir_2_0*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 51073 /*ifd_gmv_1_4*/, 35263 /*ifd_segmap_bnlm_1_4*/, 54924 /*smurf_bnlm_1_0*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 9241 /*ifd_segmap_xnr_1_4*/, 42329 /*smurf_xnr_1_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 51914 /*ifd_segmap_acm_1_4*/, 28366 /*smurf_acm_1_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 28787 /*image_upscaler_1_1*/, 40280 /*gmv_statistics_1_1*/, 7416 /*odr_gmv_feature_1_4*/, 41148 /*odr_gmv_match_1_4*/, 20893 /*ifd_segmap_cas_1_4*/, 37468 /*smurf_cas_1_0*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x3BFC630FFE31, 0x0}; // { ifd_pipe_1_4[0], rgb_ir_2_0[4], ifd_lsc_1_4[5], rgbs_grid_1_1[9], ccm_3a_2_0[10], fr_grid_1_0[11], odr_awb_std_1_4[12], odr_awb_sat_1_4[13], aestatistics_2_1[14], odr_ae_1_4[15], odr_af_std_1_4[16], ifd_gmv_1_4[17], ifd_segmap_bnlm_1_4[18], smurf_bnlm_1_0[19], ifd_segmap_xnr_1_4[24], smurf_xnr_1_0[25], ifd_segmap_acm_1_4[29], smurf_acm_1_0[30], b2i_ds_1_1[34], lbff_crop_espa_1_4[35], image_upscaler_1_1[36], gmv_statistics_1_1[37], odr_gmv_feature_1_4[38], odr_gmv_match_1_4[39], ifd_segmap_cas_1_4[40], smurf_cas_1_0[41], odr_ofs_mp_1_4[43], b2i_ds_output_1_1[44], odr_ofs_dp_1_4[45] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x27F8E71FF062, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgb_ir_2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sat_1_4}[5], {aestatistics_2_1}[6], {odr_ae_1_4}[7], {odr_af_std_1_4}[8], {ifd_gmv_1_4}[9], {ifd_segmap_bnlm_1_4}[10], {smurf_bnlm_1_0}[11], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[12], {ifd_segmap_xnr_1_4}[13], {smurf_xnr_1_0}[14], {xnr_5_4, vcr_3_1, glim_2_0}[15], {ifd_segmap_acm_1_4}[16], {smurf_acm_1_0}[17], {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[18], {lbff_crop_espa_1_4}[19], {image_upscaler_1_1}[20], {gmv_statistics_1_1}[21], {odr_gmv_feature_1_4}[22], {odr_gmv_match_1_4}[23], {ifd_segmap_cas_1_4}[24], {smurf_cas_1_0}[25], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[26], {odr_ofs_dp_1_4}[27] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x3FFCE71FFE73, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgb_ir_2_0}[2], {ifd_lsc_1_4}[3], {lsc_1_2, gd_2_2, wb_1_1}[4], {rgbs_grid_1_1}[5], {ccm_3a_2_0}[6], {fr_grid_1_0}[7], {odr_awb_std_1_4}[8], {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], {odr_ae_1_4}[11], {odr_af_std_1_4}[12], {ifd_gmv_1_4}[13], {ifd_segmap_bnlm_1_4}[14], {smurf_bnlm_1_0}[15], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[16], {ifd_segmap_xnr_1_4}[17], {smurf_xnr_1_0}[18], {xnr_5_4, vcr_3_1, glim_2_0}[19], {ifd_segmap_acm_1_4}[20], {smurf_acm_1_0}[21], {acm_1_2, gammatm_v4, csc_1_1}[22], {b2i_ds_1_1}[23], {lbff_crop_espa_1_4}[24], {image_upscaler_1_1}[25], {gmv_statistics_1_1}[26], {odr_gmv_feature_1_4}[27], {odr_gmv_match_1_4}[28], {ifd_segmap_cas_1_4}[29], {smurf_cas_1_0}[30], {cas_1_1}[31], {odr_ofs_mp_1_4}[32], {b2i_ds_output_1_1}[33], {odr_ofs_dp_1_4}[34] } + uint8_t systemApisSizes[46] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 0 /*rgb_ir_2_0*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_gmv_1_4*/, 220 /*ifd_segmap_bnlm_1_4*/, 0 /*smurf_bnlm_1_0*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 220 /*ifd_segmap_xnr_1_4*/, 0 /*smurf_xnr_1_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 220 /*ifd_segmap_acm_1_4*/, 0 /*smurf_acm_1_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*image_upscaler_1_1*/, 32 /*gmv_statistics_1_1*/, 220 /*odr_gmv_feature_1_4*/, 220 /*odr_gmv_match_1_4*/, 220 /*ifd_segmap_cas_1_4*/, 0 /*smurf_cas_1_0*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/}; + uint16_t runKernelConfigOrder[46] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 4 /*rgb_ir_2_0*/, 5 /*ifd_lsc_1_4*/, 6 /*lsc_1_2*/, 7 /*gd_2_2*/, 8 /*wb_1_1*/, 20 /*bnlm_3_4*/, 21 /*bxt_demosaic*/, 22 /*vcsc_2_0_b*/, 23 /*gltm_2_0*/, 26 /*xnr_5_4*/, 27 /*vcr_3_1*/, 28 /*glim_2_0*/, 31 /*acm_1_2*/, 32 /*gammatm_v4*/, 33 /*csc_1_1*/, 34 /*b2i_ds_1_1*/, 35 /*lbff_crop_espa_1_4*/, 36 /*image_upscaler_1_1*/, 42 /*cas_1_1*/, 43 /*odr_ofs_mp_1_4*/, 44 /*b2i_ds_output_1_1*/, 45 /*odr_ofs_dp_1_4*/, 9 /*rgbs_grid_1_1*/, 12 /*odr_awb_std_1_4*/, 13 /*odr_awb_sat_1_4*/, 10 /*ccm_3a_2_0*/, 14 /*aestatistics_2_1*/, 15 /*odr_ae_1_4*/, 11 /*fr_grid_1_0*/, 16 /*odr_af_std_1_4*/, 17 /*ifd_gmv_1_4*/, 37 /*gmv_statistics_1_1*/, 38 /*odr_gmv_feature_1_4*/, 39 /*odr_gmv_match_1_4*/, 18 /*ifd_segmap_bnlm_1_4*/, 24 /*ifd_segmap_xnr_1_4*/, 29 /*ifd_segmap_acm_1_4*/, 40 /*ifd_segmap_cas_1_4*/, 19 /*smurf_bnlm_1_0*/, 25 /*smurf_xnr_1_0*/, 30 /*smurf_acm_1_0*/, 41 /*smurf_cas_1_0*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[20].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerNoGmvWithTnrWithOpacityOuterNode::Init(LbffBayerNoGmvWithTnrWithOpacityOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 50, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[50] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 14488 /*rgb_ir_2_0*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 2495 /*tnr7_spatial_1_1*/, 29996 /*tnr_scaler_lb_1_1*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 23639 /*tnr7_ims_1_2*/, 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 47873 /*ifd_segmap_tnr_bc_1_4*/, 13101 /*smurf_tnr_bc_1_0*/, 1502 /*tnr7_bc_1_2*/, 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, 14619 /*ifd_segmap_tnr_blend_1_4*/, 42749 /*smurf_tnr_blend_1_0*/, 20119 /*tnr7_blend_1_1*/, 5215 /*odr_tnr_fp_yuvn_1_4*/, 20623 /*tnr_scaler_fp_1_1*/, 28787 /*image_upscaler_1_1*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/, 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x3DDDDFEF80031, 0x0}; // { ifd_pipe_1_4[0], rgb_ir_2_0[4], ifd_lsc_1_4[5], rgbs_grid_1_1[19], ccm_3a_2_0[20], fr_grid_1_0[21], b2i_ds_1_1[22], lbff_crop_espa_1_4[23], tnr_scaler_lb_1_1[25], odr_awb_std_1_4[26], odr_awb_sat_1_4[27], aestatistics_2_1[28], odr_ae_1_4[29], odr_af_std_1_4[30], ifd_tnr_sp_bc_yuv4nm1_1_4[31], ifd_tnr_sp_bc_rs4nm1_1_4[32], ifd_tnr_fp_blend_yuvnm1_1_4[34], ifd_segmap_tnr_bc_1_4[35], smurf_tnr_bc_1_0[36], odr_tnr_sp_bc_rs4n_1_4[38], ifd_segmap_tnr_blend_1_4[39], smurf_tnr_blend_1_0[40], odr_tnr_fp_yuvn_1_4[42], tnr_scaler_fp_1_1[43], image_upscaler_1_1[44], odr_ofs_mp_1_4[46], b2i_ds_output_1_1[47], odr_ofs_dp_1_4[48], odr_tnr_scale_fp_yuv4n_1_4[49] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x323BFFD800062, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgb_ir_2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[3], {lbff_crop_espa_1_4}[4], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[5], {odr_awb_std_1_4}[6], {odr_awb_sat_1_4}[7], {aestatistics_2_1}[8], {odr_ae_1_4}[9], {odr_af_std_1_4}[10], {ifd_tnr_sp_bc_yuv4nm1_1_4}[11], {ifd_tnr_sp_bc_rs4nm1_1_4}[12], {tnr7_ims_1_2}[13], {ifd_tnr_fp_blend_yuvnm1_1_4}[14], {ifd_segmap_tnr_bc_1_4}[15], {smurf_tnr_bc_1_0}[16], {tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[17], {ifd_segmap_tnr_blend_1_4}[18], {smurf_tnr_blend_1_0}[19], {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[20], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[21], {odr_ofs_dp_1_4}[22], {odr_tnr_scale_fp_yuv4n_1_4}[23] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x3FFFFFFF80073, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgb_ir_2_0}[2], {ifd_lsc_1_4}[3], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[4], {rgbs_grid_1_1}[5], {ccm_3a_2_0}[6], {fr_grid_1_0}[7], {b2i_ds_1_1}[8], {lbff_crop_espa_1_4}[9], {tnr7_spatial_1_1}[10], {tnr_scaler_lb_1_1}[11], {odr_awb_std_1_4}[12], {odr_awb_sat_1_4}[13], {aestatistics_2_1}[14], {odr_ae_1_4}[15], {odr_af_std_1_4}[16], {ifd_tnr_sp_bc_yuv4nm1_1_4}[17], {ifd_tnr_sp_bc_rs4nm1_1_4}[18], {tnr7_ims_1_2}[19], {ifd_tnr_fp_blend_yuvnm1_1_4}[20], {ifd_segmap_tnr_bc_1_4}[21], {smurf_tnr_bc_1_0}[22], {tnr7_bc_1_2}[23], {odr_tnr_sp_bc_rs4n_1_4}[24], {ifd_segmap_tnr_blend_1_4}[25], {smurf_tnr_blend_1_0}[26], {tnr7_blend_1_1}[27], {odr_tnr_fp_yuvn_1_4}[28], {tnr_scaler_fp_1_1}[29], {image_upscaler_1_1}[30], {cas_1_1}[31], {odr_ofs_mp_1_4}[32], {b2i_ds_output_1_1}[33], {odr_ofs_dp_1_4}[34], {odr_tnr_scale_fp_yuv4n_1_4}[35] } + uint8_t systemApisSizes[50] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 0 /*rgb_ir_2_0*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*tnr7_spatial_1_1*/, 0 /*tnr_scaler_lb_1_1*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 0 /*tnr7_ims_1_2*/, 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 220 /*ifd_segmap_tnr_bc_1_4*/, 0 /*smurf_tnr_bc_1_0*/, 5 /*tnr7_bc_1_2*/, 220 /*odr_tnr_sp_bc_rs4n_1_4*/, 220 /*ifd_segmap_tnr_blend_1_4*/, 0 /*smurf_tnr_blend_1_0*/, 5 /*tnr7_blend_1_1*/, 220 /*odr_tnr_fp_yuvn_1_4*/, 0 /*tnr_scaler_fp_1_1*/, 0 /*image_upscaler_1_1*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/, 220 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint16_t runKernelConfigOrder[50] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 4 /*rgb_ir_2_0*/, 5 /*ifd_lsc_1_4*/, 6 /*lsc_1_2*/, 7 /*gd_2_2*/, 8 /*wb_1_1*/, 9 /*bnlm_3_4*/, 10 /*bxt_demosaic*/, 11 /*vcsc_2_0_b*/, 12 /*gltm_2_0*/, 13 /*xnr_5_4*/, 14 /*vcr_3_1*/, 15 /*glim_2_0*/, 16 /*acm_1_2*/, 17 /*gammatm_v4*/, 18 /*csc_1_1*/, 22 /*b2i_ds_1_1*/, 23 /*lbff_crop_espa_1_4*/, 24 /*tnr7_spatial_1_1*/, 25 /*tnr_scaler_lb_1_1*/, 19 /*rgbs_grid_1_1*/, 26 /*odr_awb_std_1_4*/, 27 /*odr_awb_sat_1_4*/, 20 /*ccm_3a_2_0*/, 28 /*aestatistics_2_1*/, 29 /*odr_ae_1_4*/, 21 /*fr_grid_1_0*/, 30 /*odr_af_std_1_4*/, 31 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 32 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 33 /*tnr7_ims_1_2*/, 37 /*tnr7_bc_1_2*/, 38 /*odr_tnr_sp_bc_rs4n_1_4*/, 34 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 41 /*tnr7_blend_1_1*/, 44 /*image_upscaler_1_1*/, 45 /*cas_1_1*/, 46 /*odr_ofs_mp_1_4*/, 47 /*b2i_ds_output_1_1*/, 48 /*odr_ofs_dp_1_4*/, 42 /*odr_tnr_fp_yuvn_1_4*/, 43 /*tnr_scaler_fp_1_1*/, 49 /*odr_tnr_scale_fp_yuv4n_1_4*/, 35 /*ifd_segmap_tnr_bc_1_4*/, 39 /*ifd_segmap_tnr_blend_1_4*/, 36 /*smurf_tnr_bc_1_0*/, 40 /*smurf_tnr_blend_1_0*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[9].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf2NoGmvNoTnrWithSapOuterNode::Init(LbffBayerPdaf2NoGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 46, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[46] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 14488 /*rgb_ir_2_0*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 22427 /*ifd_pdaf_1_4*/, 43213 /*pext_1_0*/, 44308 /*pafstatistics_1_2*/, 26892 /*odr_pdaf_1_4*/, 35263 /*ifd_segmap_bnlm_1_4*/, 54924 /*smurf_bnlm_1_0*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 9241 /*ifd_segmap_xnr_1_4*/, 42329 /*smurf_xnr_1_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 51914 /*ifd_segmap_acm_1_4*/, 28366 /*smurf_acm_1_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 28787 /*image_upscaler_1_1*/, 20893 /*ifd_segmap_cas_1_4*/, 37468 /*smurf_cas_1_0*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x3BE3187FFE31, 0x0}; // { ifd_pipe_1_4[0], rgb_ir_2_0[4], ifd_lsc_1_4[5], rgbs_grid_1_1[9], ccm_3a_2_0[10], fr_grid_1_0[11], odr_awb_std_1_4[12], odr_awb_sat_1_4[13], aestatistics_2_1[14], odr_ae_1_4[15], odr_af_std_1_4[16], ifd_pdaf_1_4[17], pext_1_0[18], pafstatistics_1_2[19], odr_pdaf_1_4[20], ifd_segmap_bnlm_1_4[21], smurf_bnlm_1_0[22], ifd_segmap_xnr_1_4[27], smurf_xnr_1_0[28], ifd_segmap_acm_1_4[32], smurf_acm_1_0[33], b2i_ds_1_1[37], lbff_crop_espa_1_4[38], image_upscaler_1_1[39], ifd_segmap_cas_1_4[40], smurf_cas_1_0[41], odr_ofs_mp_1_4[43], b2i_ds_output_1_1[44], odr_ofs_dp_1_4[45] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x27C738FFF062, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgb_ir_2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sat_1_4}[5], {aestatistics_2_1}[6], {odr_ae_1_4}[7], {odr_af_std_1_4}[8], {ifd_pdaf_1_4}[9], {pext_1_0}[10], {pafstatistics_1_2}[11], {odr_pdaf_1_4}[12], {ifd_segmap_bnlm_1_4}[13], {smurf_bnlm_1_0}[14], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[15], {ifd_segmap_xnr_1_4}[16], {smurf_xnr_1_0}[17], {xnr_5_4, vcr_3_1, glim_2_0}[18], {ifd_segmap_acm_1_4}[19], {smurf_acm_1_0}[20], {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[21], {lbff_crop_espa_1_4}[22], {image_upscaler_1_1}[23], {ifd_segmap_cas_1_4}[24], {smurf_cas_1_0}[25], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[26], {odr_ofs_dp_1_4}[27] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x3FE738FFFE73, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgb_ir_2_0}[2], {ifd_lsc_1_4}[3], {lsc_1_2, gd_2_2, wb_1_1}[4], {rgbs_grid_1_1}[5], {ccm_3a_2_0}[6], {fr_grid_1_0}[7], {odr_awb_std_1_4}[8], {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], {odr_ae_1_4}[11], {odr_af_std_1_4}[12], {ifd_pdaf_1_4}[13], {pext_1_0}[14], {pafstatistics_1_2}[15], {odr_pdaf_1_4}[16], {ifd_segmap_bnlm_1_4}[17], {smurf_bnlm_1_0}[18], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[19], {ifd_segmap_xnr_1_4}[20], {smurf_xnr_1_0}[21], {xnr_5_4, vcr_3_1, glim_2_0}[22], {ifd_segmap_acm_1_4}[23], {smurf_acm_1_0}[24], {acm_1_2, gammatm_v4, csc_1_1}[25], {b2i_ds_1_1}[26], {lbff_crop_espa_1_4}[27], {image_upscaler_1_1}[28], {ifd_segmap_cas_1_4}[29], {smurf_cas_1_0}[30], {cas_1_1}[31], {odr_ofs_mp_1_4}[32], {b2i_ds_output_1_1}[33], {odr_ofs_dp_1_4}[34] } + uint8_t systemApisSizes[46] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 0 /*rgb_ir_2_0*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_pdaf_1_4*/, 24 /*pext_1_0*/, 8 /*pafstatistics_1_2*/, 220 /*odr_pdaf_1_4*/, 220 /*ifd_segmap_bnlm_1_4*/, 0 /*smurf_bnlm_1_0*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 220 /*ifd_segmap_xnr_1_4*/, 0 /*smurf_xnr_1_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 220 /*ifd_segmap_acm_1_4*/, 0 /*smurf_acm_1_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*image_upscaler_1_1*/, 220 /*ifd_segmap_cas_1_4*/, 0 /*smurf_cas_1_0*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/}; + uint16_t runKernelConfigOrder[46] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 4 /*rgb_ir_2_0*/, 5 /*ifd_lsc_1_4*/, 6 /*lsc_1_2*/, 7 /*gd_2_2*/, 8 /*wb_1_1*/, 23 /*bnlm_3_4*/, 24 /*bxt_demosaic*/, 25 /*vcsc_2_0_b*/, 26 /*gltm_2_0*/, 29 /*xnr_5_4*/, 30 /*vcr_3_1*/, 31 /*glim_2_0*/, 34 /*acm_1_2*/, 35 /*gammatm_v4*/, 36 /*csc_1_1*/, 37 /*b2i_ds_1_1*/, 38 /*lbff_crop_espa_1_4*/, 39 /*image_upscaler_1_1*/, 42 /*cas_1_1*/, 43 /*odr_ofs_mp_1_4*/, 44 /*b2i_ds_output_1_1*/, 45 /*odr_ofs_dp_1_4*/, 9 /*rgbs_grid_1_1*/, 12 /*odr_awb_std_1_4*/, 13 /*odr_awb_sat_1_4*/, 10 /*ccm_3a_2_0*/, 14 /*aestatistics_2_1*/, 15 /*odr_ae_1_4*/, 11 /*fr_grid_1_0*/, 16 /*odr_af_std_1_4*/, 17 /*ifd_pdaf_1_4*/, 18 /*pext_1_0*/, 19 /*pafstatistics_1_2*/, 20 /*odr_pdaf_1_4*/, 21 /*ifd_segmap_bnlm_1_4*/, 27 /*ifd_segmap_xnr_1_4*/, 32 /*ifd_segmap_acm_1_4*/, 40 /*ifd_segmap_cas_1_4*/, 22 /*smurf_bnlm_1_0*/, 28 /*smurf_xnr_1_0*/, 33 /*smurf_acm_1_0*/, 41 /*smurf_cas_1_0*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[23].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf2WithGmvNoTnrWithSapOuterNode::Init(LbffBayerPdaf2WithGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 50, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[50] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 14488 /*rgb_ir_2_0*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 22427 /*ifd_pdaf_1_4*/, 43213 /*pext_1_0*/, 44308 /*pafstatistics_1_2*/, 26892 /*odr_pdaf_1_4*/, 51073 /*ifd_gmv_1_4*/, 35263 /*ifd_segmap_bnlm_1_4*/, 54924 /*smurf_bnlm_1_0*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 9241 /*ifd_segmap_xnr_1_4*/, 42329 /*smurf_xnr_1_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 51914 /*ifd_segmap_acm_1_4*/, 28366 /*smurf_acm_1_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 28787 /*image_upscaler_1_1*/, 40280 /*gmv_statistics_1_1*/, 7416 /*odr_gmv_feature_1_4*/, 41148 /*odr_gmv_match_1_4*/, 20893 /*ifd_segmap_cas_1_4*/, 37468 /*smurf_cas_1_0*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x3BFC630FFFE31, 0x0}; // { ifd_pipe_1_4[0], rgb_ir_2_0[4], ifd_lsc_1_4[5], rgbs_grid_1_1[9], ccm_3a_2_0[10], fr_grid_1_0[11], odr_awb_std_1_4[12], odr_awb_sat_1_4[13], aestatistics_2_1[14], odr_ae_1_4[15], odr_af_std_1_4[16], ifd_pdaf_1_4[17], pext_1_0[18], pafstatistics_1_2[19], odr_pdaf_1_4[20], ifd_gmv_1_4[21], ifd_segmap_bnlm_1_4[22], smurf_bnlm_1_0[23], ifd_segmap_xnr_1_4[28], smurf_xnr_1_0[29], ifd_segmap_acm_1_4[33], smurf_acm_1_0[34], b2i_ds_1_1[38], lbff_crop_espa_1_4[39], image_upscaler_1_1[40], gmv_statistics_1_1[41], odr_gmv_feature_1_4[42], odr_gmv_match_1_4[43], ifd_segmap_cas_1_4[44], smurf_cas_1_0[45], odr_ofs_mp_1_4[47], b2i_ds_output_1_1[48], odr_ofs_dp_1_4[49] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x27F8E71FFF062, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgb_ir_2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sat_1_4}[5], {aestatistics_2_1}[6], {odr_ae_1_4}[7], {odr_af_std_1_4}[8], {ifd_pdaf_1_4}[9], {pext_1_0}[10], {pafstatistics_1_2}[11], {odr_pdaf_1_4}[12], {ifd_gmv_1_4}[13], {ifd_segmap_bnlm_1_4}[14], {smurf_bnlm_1_0}[15], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[16], {ifd_segmap_xnr_1_4}[17], {smurf_xnr_1_0}[18], {xnr_5_4, vcr_3_1, glim_2_0}[19], {ifd_segmap_acm_1_4}[20], {smurf_acm_1_0}[21], {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[22], {lbff_crop_espa_1_4}[23], {image_upscaler_1_1}[24], {gmv_statistics_1_1}[25], {odr_gmv_feature_1_4}[26], {odr_gmv_match_1_4}[27], {ifd_segmap_cas_1_4}[28], {smurf_cas_1_0}[29], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[30], {odr_ofs_dp_1_4}[31] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x3FFCE71FFFE73, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgb_ir_2_0}[2], {ifd_lsc_1_4}[3], {lsc_1_2, gd_2_2, wb_1_1}[4], {rgbs_grid_1_1}[5], {ccm_3a_2_0}[6], {fr_grid_1_0}[7], {odr_awb_std_1_4}[8], {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], {odr_ae_1_4}[11], {odr_af_std_1_4}[12], {ifd_pdaf_1_4}[13], {pext_1_0}[14], {pafstatistics_1_2}[15], {odr_pdaf_1_4}[16], {ifd_gmv_1_4}[17], {ifd_segmap_bnlm_1_4}[18], {smurf_bnlm_1_0}[19], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[20], {ifd_segmap_xnr_1_4}[21], {smurf_xnr_1_0}[22], {xnr_5_4, vcr_3_1, glim_2_0}[23], {ifd_segmap_acm_1_4}[24], {smurf_acm_1_0}[25], {acm_1_2, gammatm_v4, csc_1_1}[26], {b2i_ds_1_1}[27], {lbff_crop_espa_1_4}[28], {image_upscaler_1_1}[29], {gmv_statistics_1_1}[30], {odr_gmv_feature_1_4}[31], {odr_gmv_match_1_4}[32], {ifd_segmap_cas_1_4}[33], {smurf_cas_1_0}[34], {cas_1_1}[35], {odr_ofs_mp_1_4}[36], {b2i_ds_output_1_1}[37], {odr_ofs_dp_1_4}[38] } + uint8_t systemApisSizes[50] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 0 /*rgb_ir_2_0*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_pdaf_1_4*/, 24 /*pext_1_0*/, 8 /*pafstatistics_1_2*/, 220 /*odr_pdaf_1_4*/, 220 /*ifd_gmv_1_4*/, 220 /*ifd_segmap_bnlm_1_4*/, 0 /*smurf_bnlm_1_0*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 220 /*ifd_segmap_xnr_1_4*/, 0 /*smurf_xnr_1_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 220 /*ifd_segmap_acm_1_4*/, 0 /*smurf_acm_1_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*image_upscaler_1_1*/, 32 /*gmv_statistics_1_1*/, 220 /*odr_gmv_feature_1_4*/, 220 /*odr_gmv_match_1_4*/, 220 /*ifd_segmap_cas_1_4*/, 0 /*smurf_cas_1_0*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/}; + uint16_t runKernelConfigOrder[50] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 4 /*rgb_ir_2_0*/, 5 /*ifd_lsc_1_4*/, 6 /*lsc_1_2*/, 7 /*gd_2_2*/, 8 /*wb_1_1*/, 24 /*bnlm_3_4*/, 25 /*bxt_demosaic*/, 26 /*vcsc_2_0_b*/, 27 /*gltm_2_0*/, 30 /*xnr_5_4*/, 31 /*vcr_3_1*/, 32 /*glim_2_0*/, 35 /*acm_1_2*/, 36 /*gammatm_v4*/, 37 /*csc_1_1*/, 38 /*b2i_ds_1_1*/, 39 /*lbff_crop_espa_1_4*/, 40 /*image_upscaler_1_1*/, 46 /*cas_1_1*/, 47 /*odr_ofs_mp_1_4*/, 48 /*b2i_ds_output_1_1*/, 49 /*odr_ofs_dp_1_4*/, 9 /*rgbs_grid_1_1*/, 12 /*odr_awb_std_1_4*/, 13 /*odr_awb_sat_1_4*/, 10 /*ccm_3a_2_0*/, 14 /*aestatistics_2_1*/, 15 /*odr_ae_1_4*/, 11 /*fr_grid_1_0*/, 16 /*odr_af_std_1_4*/, 17 /*ifd_pdaf_1_4*/, 18 /*pext_1_0*/, 19 /*pafstatistics_1_2*/, 20 /*odr_pdaf_1_4*/, 21 /*ifd_gmv_1_4*/, 41 /*gmv_statistics_1_1*/, 42 /*odr_gmv_feature_1_4*/, 43 /*odr_gmv_match_1_4*/, 22 /*ifd_segmap_bnlm_1_4*/, 28 /*ifd_segmap_xnr_1_4*/, 33 /*ifd_segmap_acm_1_4*/, 44 /*ifd_segmap_cas_1_4*/, 23 /*smurf_bnlm_1_0*/, 29 /*smurf_xnr_1_0*/, 34 /*smurf_acm_1_0*/, 45 /*smurf_cas_1_0*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[24].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf3NoGmvNoTnrWithSapOuterNode::Init(LbffBayerPdaf3NoGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 45, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[45] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 43213 /*pext_1_0*/, 14488 /*rgb_ir_2_0*/, 44308 /*pafstatistics_1_2*/, 26892 /*odr_pdaf_1_4*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 35263 /*ifd_segmap_bnlm_1_4*/, 54924 /*smurf_bnlm_1_0*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 9241 /*ifd_segmap_xnr_1_4*/, 42329 /*smurf_xnr_1_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 51914 /*ifd_segmap_acm_1_4*/, 28366 /*smurf_acm_1_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 28787 /*image_upscaler_1_1*/, 20893 /*ifd_segmap_cas_1_4*/, 37468 /*smurf_cas_1_0*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x1DF18C3FF1F1, 0x0}; // { ifd_pipe_1_4[0], pext_1_0[4], rgb_ir_2_0[5], pafstatistics_1_2[6], odr_pdaf_1_4[7], ifd_lsc_1_4[8], rgbs_grid_1_1[12], ccm_3a_2_0[13], fr_grid_1_0[14], odr_awb_std_1_4[15], odr_awb_sat_1_4[16], aestatistics_2_1[17], odr_ae_1_4[18], odr_af_std_1_4[19], ifd_segmap_bnlm_1_4[20], smurf_bnlm_1_0[21], ifd_segmap_xnr_1_4[26], smurf_xnr_1_0[27], ifd_segmap_acm_1_4[31], smurf_acm_1_0[32], b2i_ds_1_1[36], lbff_crop_espa_1_4[37], image_upscaler_1_1[38], ifd_segmap_cas_1_4[39], smurf_cas_1_0[40], odr_ofs_mp_1_4[42], b2i_ds_output_1_1[43], odr_ofs_dp_1_4[44] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x13E39C7F83C2, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, pext_1_0, rgb_ir_2_0}[1], {pafstatistics_1_2}[2], {odr_pdaf_1_4}[3], {ifd_lsc_1_4}[4], {lsc_1_2, gd_2_2, wb_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0}[5], {odr_awb_std_1_4}[6], {odr_awb_sat_1_4}[7], {aestatistics_2_1}[8], {odr_ae_1_4}[9], {odr_af_std_1_4}[10], {ifd_segmap_bnlm_1_4}[11], {smurf_bnlm_1_0}[12], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[13], {ifd_segmap_xnr_1_4}[14], {smurf_xnr_1_0}[15], {xnr_5_4, vcr_3_1, glim_2_0}[16], {ifd_segmap_acm_1_4}[17], {smurf_acm_1_0}[18], {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[19], {lbff_crop_espa_1_4}[20], {image_upscaler_1_1}[21], {ifd_segmap_cas_1_4}[22], {smurf_cas_1_0}[23], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[24], {odr_ofs_dp_1_4}[25] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x1FF39C7FF3F3, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {pext_1_0}[2], {rgb_ir_2_0}[3], {pafstatistics_1_2}[4], {odr_pdaf_1_4}[5], {ifd_lsc_1_4}[6], {lsc_1_2, gd_2_2, wb_1_1}[7], {rgbs_grid_1_1}[8], {ccm_3a_2_0}[9], {fr_grid_1_0}[10], {odr_awb_std_1_4}[11], {odr_awb_sat_1_4}[12], {aestatistics_2_1}[13], {odr_ae_1_4}[14], {odr_af_std_1_4}[15], {ifd_segmap_bnlm_1_4}[16], {smurf_bnlm_1_0}[17], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[18], {ifd_segmap_xnr_1_4}[19], {smurf_xnr_1_0}[20], {xnr_5_4, vcr_3_1, glim_2_0}[21], {ifd_segmap_acm_1_4}[22], {smurf_acm_1_0}[23], {acm_1_2, gammatm_v4, csc_1_1}[24], {b2i_ds_1_1}[25], {lbff_crop_espa_1_4}[26], {image_upscaler_1_1}[27], {ifd_segmap_cas_1_4}[28], {smurf_cas_1_0}[29], {cas_1_1}[30], {odr_ofs_mp_1_4}[31], {b2i_ds_output_1_1}[32], {odr_ofs_dp_1_4}[33] } + uint8_t systemApisSizes[45] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 24 /*pext_1_0*/, 0 /*rgb_ir_2_0*/, 8 /*pafstatistics_1_2*/, 220 /*odr_pdaf_1_4*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_segmap_bnlm_1_4*/, 0 /*smurf_bnlm_1_0*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 220 /*ifd_segmap_xnr_1_4*/, 0 /*smurf_xnr_1_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 220 /*ifd_segmap_acm_1_4*/, 0 /*smurf_acm_1_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*image_upscaler_1_1*/, 220 /*ifd_segmap_cas_1_4*/, 0 /*smurf_cas_1_0*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/}; + uint16_t runKernelConfigOrder[45] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 5 /*rgb_ir_2_0*/, 4 /*pext_1_0*/, 6 /*pafstatistics_1_2*/, 7 /*odr_pdaf_1_4*/, 8 /*ifd_lsc_1_4*/, 9 /*lsc_1_2*/, 10 /*gd_2_2*/, 11 /*wb_1_1*/, 22 /*bnlm_3_4*/, 23 /*bxt_demosaic*/, 24 /*vcsc_2_0_b*/, 25 /*gltm_2_0*/, 28 /*xnr_5_4*/, 29 /*vcr_3_1*/, 30 /*glim_2_0*/, 33 /*acm_1_2*/, 34 /*gammatm_v4*/, 35 /*csc_1_1*/, 36 /*b2i_ds_1_1*/, 37 /*lbff_crop_espa_1_4*/, 38 /*image_upscaler_1_1*/, 41 /*cas_1_1*/, 42 /*odr_ofs_mp_1_4*/, 43 /*b2i_ds_output_1_1*/, 44 /*odr_ofs_dp_1_4*/, 12 /*rgbs_grid_1_1*/, 15 /*odr_awb_std_1_4*/, 16 /*odr_awb_sat_1_4*/, 13 /*ccm_3a_2_0*/, 17 /*aestatistics_2_1*/, 18 /*odr_ae_1_4*/, 14 /*fr_grid_1_0*/, 19 /*odr_af_std_1_4*/, 20 /*ifd_segmap_bnlm_1_4*/, 26 /*ifd_segmap_xnr_1_4*/, 31 /*ifd_segmap_acm_1_4*/, 39 /*ifd_segmap_cas_1_4*/, 21 /*smurf_bnlm_1_0*/, 27 /*smurf_xnr_1_0*/, 32 /*smurf_acm_1_0*/, 40 /*smurf_cas_1_0*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[22].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf3WithGmvNoTnrWithSapOuterNode::Init(LbffBayerPdaf3WithGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 49, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[49] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 43213 /*pext_1_0*/, 14488 /*rgb_ir_2_0*/, 44308 /*pafstatistics_1_2*/, 26892 /*odr_pdaf_1_4*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 51073 /*ifd_gmv_1_4*/, 35263 /*ifd_segmap_bnlm_1_4*/, 54924 /*smurf_bnlm_1_0*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 9241 /*ifd_segmap_xnr_1_4*/, 42329 /*smurf_xnr_1_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 51914 /*ifd_segmap_acm_1_4*/, 28366 /*smurf_acm_1_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 28787 /*image_upscaler_1_1*/, 40280 /*gmv_statistics_1_1*/, 7416 /*odr_gmv_feature_1_4*/, 41148 /*odr_gmv_match_1_4*/, 20893 /*ifd_segmap_cas_1_4*/, 37468 /*smurf_cas_1_0*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x1DFE3187FF1F1, 0x0}; // { ifd_pipe_1_4[0], pext_1_0[4], rgb_ir_2_0[5], pafstatistics_1_2[6], odr_pdaf_1_4[7], ifd_lsc_1_4[8], rgbs_grid_1_1[12], ccm_3a_2_0[13], fr_grid_1_0[14], odr_awb_std_1_4[15], odr_awb_sat_1_4[16], aestatistics_2_1[17], odr_ae_1_4[18], odr_af_std_1_4[19], ifd_gmv_1_4[20], ifd_segmap_bnlm_1_4[21], smurf_bnlm_1_0[22], ifd_segmap_xnr_1_4[27], smurf_xnr_1_0[28], ifd_segmap_acm_1_4[32], smurf_acm_1_0[33], b2i_ds_1_1[37], lbff_crop_espa_1_4[38], image_upscaler_1_1[39], gmv_statistics_1_1[40], odr_gmv_feature_1_4[41], odr_gmv_match_1_4[42], ifd_segmap_cas_1_4[43], smurf_cas_1_0[44], odr_ofs_mp_1_4[46], b2i_ds_output_1_1[47], odr_ofs_dp_1_4[48] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x13FC738FF83C2, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, pext_1_0, rgb_ir_2_0}[1], {pafstatistics_1_2}[2], {odr_pdaf_1_4}[3], {ifd_lsc_1_4}[4], {lsc_1_2, gd_2_2, wb_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0}[5], {odr_awb_std_1_4}[6], {odr_awb_sat_1_4}[7], {aestatistics_2_1}[8], {odr_ae_1_4}[9], {odr_af_std_1_4}[10], {ifd_gmv_1_4}[11], {ifd_segmap_bnlm_1_4}[12], {smurf_bnlm_1_0}[13], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[14], {ifd_segmap_xnr_1_4}[15], {smurf_xnr_1_0}[16], {xnr_5_4, vcr_3_1, glim_2_0}[17], {ifd_segmap_acm_1_4}[18], {smurf_acm_1_0}[19], {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[20], {lbff_crop_espa_1_4}[21], {image_upscaler_1_1}[22], {gmv_statistics_1_1}[23], {odr_gmv_feature_1_4}[24], {odr_gmv_match_1_4}[25], {ifd_segmap_cas_1_4}[26], {smurf_cas_1_0}[27], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[28], {odr_ofs_dp_1_4}[29] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x1FFE738FFF3F3, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {pext_1_0}[2], {rgb_ir_2_0}[3], {pafstatistics_1_2}[4], {odr_pdaf_1_4}[5], {ifd_lsc_1_4}[6], {lsc_1_2, gd_2_2, wb_1_1}[7], {rgbs_grid_1_1}[8], {ccm_3a_2_0}[9], {fr_grid_1_0}[10], {odr_awb_std_1_4}[11], {odr_awb_sat_1_4}[12], {aestatistics_2_1}[13], {odr_ae_1_4}[14], {odr_af_std_1_4}[15], {ifd_gmv_1_4}[16], {ifd_segmap_bnlm_1_4}[17], {smurf_bnlm_1_0}[18], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[19], {ifd_segmap_xnr_1_4}[20], {smurf_xnr_1_0}[21], {xnr_5_4, vcr_3_1, glim_2_0}[22], {ifd_segmap_acm_1_4}[23], {smurf_acm_1_0}[24], {acm_1_2, gammatm_v4, csc_1_1}[25], {b2i_ds_1_1}[26], {lbff_crop_espa_1_4}[27], {image_upscaler_1_1}[28], {gmv_statistics_1_1}[29], {odr_gmv_feature_1_4}[30], {odr_gmv_match_1_4}[31], {ifd_segmap_cas_1_4}[32], {smurf_cas_1_0}[33], {cas_1_1}[34], {odr_ofs_mp_1_4}[35], {b2i_ds_output_1_1}[36], {odr_ofs_dp_1_4}[37] } + uint8_t systemApisSizes[49] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 24 /*pext_1_0*/, 0 /*rgb_ir_2_0*/, 8 /*pafstatistics_1_2*/, 220 /*odr_pdaf_1_4*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_gmv_1_4*/, 220 /*ifd_segmap_bnlm_1_4*/, 0 /*smurf_bnlm_1_0*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 220 /*ifd_segmap_xnr_1_4*/, 0 /*smurf_xnr_1_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 220 /*ifd_segmap_acm_1_4*/, 0 /*smurf_acm_1_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*image_upscaler_1_1*/, 32 /*gmv_statistics_1_1*/, 220 /*odr_gmv_feature_1_4*/, 220 /*odr_gmv_match_1_4*/, 220 /*ifd_segmap_cas_1_4*/, 0 /*smurf_cas_1_0*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/}; + uint16_t runKernelConfigOrder[49] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 5 /*rgb_ir_2_0*/, 4 /*pext_1_0*/, 6 /*pafstatistics_1_2*/, 7 /*odr_pdaf_1_4*/, 8 /*ifd_lsc_1_4*/, 9 /*lsc_1_2*/, 10 /*gd_2_2*/, 11 /*wb_1_1*/, 23 /*bnlm_3_4*/, 24 /*bxt_demosaic*/, 25 /*vcsc_2_0_b*/, 26 /*gltm_2_0*/, 29 /*xnr_5_4*/, 30 /*vcr_3_1*/, 31 /*glim_2_0*/, 34 /*acm_1_2*/, 35 /*gammatm_v4*/, 36 /*csc_1_1*/, 37 /*b2i_ds_1_1*/, 38 /*lbff_crop_espa_1_4*/, 39 /*image_upscaler_1_1*/, 45 /*cas_1_1*/, 46 /*odr_ofs_mp_1_4*/, 47 /*b2i_ds_output_1_1*/, 48 /*odr_ofs_dp_1_4*/, 12 /*rgbs_grid_1_1*/, 15 /*odr_awb_std_1_4*/, 16 /*odr_awb_sat_1_4*/, 13 /*ccm_3a_2_0*/, 17 /*aestatistics_2_1*/, 18 /*odr_ae_1_4*/, 14 /*fr_grid_1_0*/, 19 /*odr_af_std_1_4*/, 20 /*ifd_gmv_1_4*/, 40 /*gmv_statistics_1_1*/, 41 /*odr_gmv_feature_1_4*/, 42 /*odr_gmv_match_1_4*/, 21 /*ifd_segmap_bnlm_1_4*/, 27 /*ifd_segmap_xnr_1_4*/, 32 /*ifd_segmap_acm_1_4*/, 43 /*ifd_segmap_cas_1_4*/, 22 /*smurf_bnlm_1_0*/, 28 /*smurf_xnr_1_0*/, 33 /*smurf_acm_1_0*/, 44 /*smurf_cas_1_0*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[23].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void IsysDolWithCvOuterNode::Init(IsysDolWithCvOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(2, NodeTypes::Isys, 5, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[5] = {36280 /*crop_bpp_adjust_1_0*/, 5420 /*upipe_1_0*/, 26150 /*isys_drainer_1_0*/, 11470 /*is_odr_a*/, 50407 /*is_odr_c*/}; + uint64_t kernelsRcbBitmap[] = {0x1B, 0x0}; // { crop_bpp_adjust_1_0[0], upipe_1_0[1], is_odr_a[3], is_odr_c[4] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x1E, 0x0}; // {{crop_bpp_adjust_1_0}[0], {upipe_1_0}[1], {isys_drainer_1_0}[2], {is_odr_a}[3], {is_odr_c}[4] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x1F, 0x0}; // {{crop_bpp_adjust_1_0}[0], {upipe_1_0}[1], {isys_drainer_1_0}[2], {is_odr_a}[3], {is_odr_c}[4] } + uint8_t systemApisSizes[5] = {0 /*crop_bpp_adjust_1_0*/, 34 /*upipe_1_0*/, 20 /*isys_drainer_1_0*/, 0 /*is_odr_a*/, 0 /*is_odr_c*/}; + uint16_t runKernelConfigOrder[5] = {0 /*crop_bpp_adjust_1_0*/, 1 /*upipe_1_0*/, 2 /*isys_drainer_1_0*/, 3 /*is_odr_a*/, 4 /*is_odr_c*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // set default inner Node + setInnerNode(None); +} + +void LbffDol2InputsNoGmvNoTnrWithSapOuterNode::Init(LbffDol2InputsNoGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 45, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[45] = {52446 /*ifd_pipe_1_4*/, 24678 /*ifd_pipe_long_1_4*/, 54871 /*dol_lite_1_2*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 14488 /*rgb_ir_2_0*/, 38544 /*odr_awb_std_1_4*/, 53430 /*odr_awb_sve_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 26958 /*fr_grid_1_0*/, 59136 /*odr_af_std_1_4*/, 35263 /*ifd_segmap_bnlm_1_4*/, 54924 /*smurf_bnlm_1_0*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 9241 /*ifd_segmap_xnr_1_4*/, 42329 /*smurf_xnr_1_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 51914 /*ifd_segmap_acm_1_4*/, 28366 /*smurf_acm_1_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 28787 /*image_upscaler_1_1*/, 20893 /*ifd_segmap_cas_1_4*/, 37468 /*smurf_cas_1_0*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x1DF18C3C7FC3, 0x0}; // { ifd_pipe_1_4[0], ifd_pipe_long_1_4[1], rgbs_grid_1_1[6], ccm_3a_2_0[7], rgb_ir_2_0[8], odr_awb_std_1_4[9], odr_awb_sve_1_4[10], odr_awb_sat_1_4[11], aestatistics_2_1[12], odr_ae_1_4[13], ifd_lsc_1_4[14], fr_grid_1_0[18], odr_af_std_1_4[19], ifd_segmap_bnlm_1_4[20], smurf_bnlm_1_0[21], ifd_segmap_xnr_1_4[26], smurf_xnr_1_0[27], ifd_segmap_acm_1_4[31], smurf_acm_1_0[32], b2i_ds_1_1[36], lbff_crop_espa_1_4[37], image_upscaler_1_1[38], ifd_segmap_cas_1_4[39], smurf_cas_1_0[40], odr_ofs_mp_1_4[42], b2i_ds_output_1_1[43], odr_ofs_dp_1_4[44] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x13E39C78FE06, 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2, rgbs_grid_1_1, ccm_3a_2_0, rgb_ir_2_0}[2], {odr_awb_std_1_4}[3], {odr_awb_sve_1_4}[4], {odr_awb_sat_1_4}[5], {aestatistics_2_1}[6], {odr_ae_1_4}[7], {ifd_lsc_1_4}[8], {lsc_1_2, gd_2_2, wb_1_1, fr_grid_1_0}[9], {odr_af_std_1_4}[10], {ifd_segmap_bnlm_1_4}[11], {smurf_bnlm_1_0}[12], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[13], {ifd_segmap_xnr_1_4}[14], {smurf_xnr_1_0}[15], {xnr_5_4, vcr_3_1, glim_2_0}[16], {ifd_segmap_acm_1_4}[17], {smurf_acm_1_0}[18], {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[19], {lbff_crop_espa_1_4}[20], {image_upscaler_1_1}[21], {ifd_segmap_cas_1_4}[22], {smurf_cas_1_0}[23], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[24], {odr_ofs_dp_1_4}[25] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x1FF39C7CFFC7, 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2}[2], {rgbs_grid_1_1}[3], {ccm_3a_2_0}[4], {rgb_ir_2_0}[5], {odr_awb_std_1_4}[6], {odr_awb_sve_1_4}[7], {odr_awb_sat_1_4}[8], {aestatistics_2_1}[9], {odr_ae_1_4}[10], {ifd_lsc_1_4}[11], {lsc_1_2, gd_2_2, wb_1_1}[12], {fr_grid_1_0}[13], {odr_af_std_1_4}[14], {ifd_segmap_bnlm_1_4}[15], {smurf_bnlm_1_0}[16], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[17], {ifd_segmap_xnr_1_4}[18], {smurf_xnr_1_0}[19], {xnr_5_4, vcr_3_1, glim_2_0}[20], {ifd_segmap_acm_1_4}[21], {smurf_acm_1_0}[22], {acm_1_2, gammatm_v4, csc_1_1}[23], {b2i_ds_1_1}[24], {lbff_crop_espa_1_4}[25], {image_upscaler_1_1}[26], {ifd_segmap_cas_1_4}[27], {smurf_cas_1_0}[28], {cas_1_1}[29], {odr_ofs_mp_1_4}[30], {b2i_ds_output_1_1}[31], {odr_ofs_dp_1_4}[32] } + uint8_t systemApisSizes[45] = {220 /*ifd_pipe_1_4*/, 220 /*ifd_pipe_long_1_4*/, 5 /*dol_lite_1_2*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 0 /*rgb_ir_2_0*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sve_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 20 /*fr_grid_1_0*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_segmap_bnlm_1_4*/, 0 /*smurf_bnlm_1_0*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 220 /*ifd_segmap_xnr_1_4*/, 0 /*smurf_xnr_1_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 220 /*ifd_segmap_acm_1_4*/, 0 /*smurf_acm_1_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*image_upscaler_1_1*/, 220 /*ifd_segmap_cas_1_4*/, 0 /*smurf_cas_1_0*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/}; + uint16_t runKernelConfigOrder[45] = {0 /*ifd_pipe_1_4*/, 1 /*ifd_pipe_long_1_4*/, 2 /*dol_lite_1_2*/, 3 /*bxt_blc*/, 4 /*linearization2_0*/, 5 /*dpc_2_2*/, 8 /*rgb_ir_2_0*/, 6 /*rgbs_grid_1_1*/, 9 /*odr_awb_std_1_4*/, 10 /*odr_awb_sve_1_4*/, 11 /*odr_awb_sat_1_4*/, 7 /*ccm_3a_2_0*/, 12 /*aestatistics_2_1*/, 13 /*odr_ae_1_4*/, 14 /*ifd_lsc_1_4*/, 15 /*lsc_1_2*/, 16 /*gd_2_2*/, 17 /*wb_1_1*/, 22 /*bnlm_3_4*/, 23 /*bxt_demosaic*/, 24 /*vcsc_2_0_b*/, 25 /*gltm_2_0*/, 28 /*xnr_5_4*/, 29 /*vcr_3_1*/, 30 /*glim_2_0*/, 33 /*acm_1_2*/, 34 /*gammatm_v4*/, 35 /*csc_1_1*/, 36 /*b2i_ds_1_1*/, 37 /*lbff_crop_espa_1_4*/, 38 /*image_upscaler_1_1*/, 41 /*cas_1_1*/, 42 /*odr_ofs_mp_1_4*/, 43 /*b2i_ds_output_1_1*/, 44 /*odr_ofs_dp_1_4*/, 18 /*fr_grid_1_0*/, 19 /*odr_af_std_1_4*/, 20 /*ifd_segmap_bnlm_1_4*/, 26 /*ifd_segmap_xnr_1_4*/, 31 /*ifd_segmap_acm_1_4*/, 39 /*ifd_segmap_cas_1_4*/, 21 /*smurf_bnlm_1_0*/, 27 /*smurf_xnr_1_0*/, 32 /*smurf_acm_1_0*/, 40 /*smurf_cas_1_0*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[22].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffDol2InputsWithGmvNoTnrWithSapOuterNode::Init(LbffDol2InputsWithGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 49, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[49] = {52446 /*ifd_pipe_1_4*/, 24678 /*ifd_pipe_long_1_4*/, 54871 /*dol_lite_1_2*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 14488 /*rgb_ir_2_0*/, 38544 /*odr_awb_std_1_4*/, 53430 /*odr_awb_sve_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 26958 /*fr_grid_1_0*/, 59136 /*odr_af_std_1_4*/, 51073 /*ifd_gmv_1_4*/, 35263 /*ifd_segmap_bnlm_1_4*/, 54924 /*smurf_bnlm_1_0*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 9241 /*ifd_segmap_xnr_1_4*/, 42329 /*smurf_xnr_1_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 51914 /*ifd_segmap_acm_1_4*/, 28366 /*smurf_acm_1_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 28787 /*image_upscaler_1_1*/, 40280 /*gmv_statistics_1_1*/, 7416 /*odr_gmv_feature_1_4*/, 41148 /*odr_gmv_match_1_4*/, 20893 /*ifd_segmap_cas_1_4*/, 37468 /*smurf_cas_1_0*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x1DFE3187C7FC3, 0x0}; // { ifd_pipe_1_4[0], ifd_pipe_long_1_4[1], rgbs_grid_1_1[6], ccm_3a_2_0[7], rgb_ir_2_0[8], odr_awb_std_1_4[9], odr_awb_sve_1_4[10], odr_awb_sat_1_4[11], aestatistics_2_1[12], odr_ae_1_4[13], ifd_lsc_1_4[14], fr_grid_1_0[18], odr_af_std_1_4[19], ifd_gmv_1_4[20], ifd_segmap_bnlm_1_4[21], smurf_bnlm_1_0[22], ifd_segmap_xnr_1_4[27], smurf_xnr_1_0[28], ifd_segmap_acm_1_4[32], smurf_acm_1_0[33], b2i_ds_1_1[37], lbff_crop_espa_1_4[38], image_upscaler_1_1[39], gmv_statistics_1_1[40], odr_gmv_feature_1_4[41], odr_gmv_match_1_4[42], ifd_segmap_cas_1_4[43], smurf_cas_1_0[44], odr_ofs_mp_1_4[46], b2i_ds_output_1_1[47], odr_ofs_dp_1_4[48] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x13FC738F8FE06, 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2, rgbs_grid_1_1, ccm_3a_2_0, rgb_ir_2_0}[2], {odr_awb_std_1_4}[3], {odr_awb_sve_1_4}[4], {odr_awb_sat_1_4}[5], {aestatistics_2_1}[6], {odr_ae_1_4}[7], {ifd_lsc_1_4}[8], {lsc_1_2, gd_2_2, wb_1_1, fr_grid_1_0}[9], {odr_af_std_1_4}[10], {ifd_gmv_1_4}[11], {ifd_segmap_bnlm_1_4}[12], {smurf_bnlm_1_0}[13], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[14], {ifd_segmap_xnr_1_4}[15], {smurf_xnr_1_0}[16], {xnr_5_4, vcr_3_1, glim_2_0}[17], {ifd_segmap_acm_1_4}[18], {smurf_acm_1_0}[19], {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[20], {lbff_crop_espa_1_4}[21], {image_upscaler_1_1}[22], {gmv_statistics_1_1}[23], {odr_gmv_feature_1_4}[24], {odr_gmv_match_1_4}[25], {ifd_segmap_cas_1_4}[26], {smurf_cas_1_0}[27], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[28], {odr_ofs_dp_1_4}[29] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x1FFE738FCFFC7, 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2}[2], {rgbs_grid_1_1}[3], {ccm_3a_2_0}[4], {rgb_ir_2_0}[5], {odr_awb_std_1_4}[6], {odr_awb_sve_1_4}[7], {odr_awb_sat_1_4}[8], {aestatistics_2_1}[9], {odr_ae_1_4}[10], {ifd_lsc_1_4}[11], {lsc_1_2, gd_2_2, wb_1_1}[12], {fr_grid_1_0}[13], {odr_af_std_1_4}[14], {ifd_gmv_1_4}[15], {ifd_segmap_bnlm_1_4}[16], {smurf_bnlm_1_0}[17], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[18], {ifd_segmap_xnr_1_4}[19], {smurf_xnr_1_0}[20], {xnr_5_4, vcr_3_1, glim_2_0}[21], {ifd_segmap_acm_1_4}[22], {smurf_acm_1_0}[23], {acm_1_2, gammatm_v4, csc_1_1}[24], {b2i_ds_1_1}[25], {lbff_crop_espa_1_4}[26], {image_upscaler_1_1}[27], {gmv_statistics_1_1}[28], {odr_gmv_feature_1_4}[29], {odr_gmv_match_1_4}[30], {ifd_segmap_cas_1_4}[31], {smurf_cas_1_0}[32], {cas_1_1}[33], {odr_ofs_mp_1_4}[34], {b2i_ds_output_1_1}[35], {odr_ofs_dp_1_4}[36] } + uint8_t systemApisSizes[49] = {220 /*ifd_pipe_1_4*/, 220 /*ifd_pipe_long_1_4*/, 5 /*dol_lite_1_2*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 0 /*rgb_ir_2_0*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sve_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 20 /*fr_grid_1_0*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_gmv_1_4*/, 220 /*ifd_segmap_bnlm_1_4*/, 0 /*smurf_bnlm_1_0*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 220 /*ifd_segmap_xnr_1_4*/, 0 /*smurf_xnr_1_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 220 /*ifd_segmap_acm_1_4*/, 0 /*smurf_acm_1_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*image_upscaler_1_1*/, 32 /*gmv_statistics_1_1*/, 220 /*odr_gmv_feature_1_4*/, 220 /*odr_gmv_match_1_4*/, 220 /*ifd_segmap_cas_1_4*/, 0 /*smurf_cas_1_0*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/}; + uint16_t runKernelConfigOrder[49] = {0 /*ifd_pipe_1_4*/, 1 /*ifd_pipe_long_1_4*/, 2 /*dol_lite_1_2*/, 3 /*bxt_blc*/, 4 /*linearization2_0*/, 5 /*dpc_2_2*/, 8 /*rgb_ir_2_0*/, 6 /*rgbs_grid_1_1*/, 9 /*odr_awb_std_1_4*/, 10 /*odr_awb_sve_1_4*/, 11 /*odr_awb_sat_1_4*/, 7 /*ccm_3a_2_0*/, 12 /*aestatistics_2_1*/, 13 /*odr_ae_1_4*/, 14 /*ifd_lsc_1_4*/, 15 /*lsc_1_2*/, 16 /*gd_2_2*/, 17 /*wb_1_1*/, 23 /*bnlm_3_4*/, 24 /*bxt_demosaic*/, 25 /*vcsc_2_0_b*/, 26 /*gltm_2_0*/, 29 /*xnr_5_4*/, 30 /*vcr_3_1*/, 31 /*glim_2_0*/, 34 /*acm_1_2*/, 35 /*gammatm_v4*/, 36 /*csc_1_1*/, 37 /*b2i_ds_1_1*/, 38 /*lbff_crop_espa_1_4*/, 39 /*image_upscaler_1_1*/, 45 /*cas_1_1*/, 46 /*odr_ofs_mp_1_4*/, 47 /*b2i_ds_output_1_1*/, 48 /*odr_ofs_dp_1_4*/, 18 /*fr_grid_1_0*/, 19 /*odr_af_std_1_4*/, 20 /*ifd_gmv_1_4*/, 40 /*gmv_statistics_1_1*/, 41 /*odr_gmv_feature_1_4*/, 42 /*odr_gmv_match_1_4*/, 21 /*ifd_segmap_bnlm_1_4*/, 27 /*ifd_segmap_xnr_1_4*/, 32 /*ifd_segmap_acm_1_4*/, 43 /*ifd_segmap_cas_1_4*/, 22 /*smurf_bnlm_1_0*/, 28 /*smurf_xnr_1_0*/, 33 /*smurf_acm_1_0*/, 44 /*smurf_cas_1_0*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[23].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffDol2InputsNoGmvWithTnrWithSapOuterNode::Init(LbffDol2InputsNoGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 61, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[61] = {52446 /*ifd_pipe_1_4*/, 24678 /*ifd_pipe_long_1_4*/, 54871 /*dol_lite_1_2*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 14488 /*rgb_ir_2_0*/, 38544 /*odr_awb_std_1_4*/, 53430 /*odr_awb_sve_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 26958 /*fr_grid_1_0*/, 59136 /*odr_af_std_1_4*/, 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 35263 /*ifd_segmap_bnlm_1_4*/, 54924 /*smurf_bnlm_1_0*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 9241 /*ifd_segmap_xnr_1_4*/, 42329 /*smurf_xnr_1_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 51914 /*ifd_segmap_acm_1_4*/, 28366 /*smurf_acm_1_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 2495 /*tnr7_spatial_1_1*/, 29996 /*tnr_scaler_lb_1_1*/, 23639 /*tnr7_ims_1_2*/, 47873 /*ifd_segmap_tnr_bc_1_4*/, 13101 /*smurf_tnr_bc_1_0*/, 1502 /*tnr7_bc_1_2*/, 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, 14619 /*ifd_segmap_tnr_blend_1_4*/, 42749 /*smurf_tnr_blend_1_0*/, 20119 /*tnr7_blend_1_1*/, 5215 /*odr_tnr_fp_yuvn_1_4*/, 20623 /*tnr_scaler_fp_1_1*/, 28787 /*image_upscaler_1_1*/, 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/, 20893 /*ifd_segmap_cas_1_4*/, 37468 /*smurf_cas_1_0*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x1DFBB58C61FC7FC3, 0x0}; // { ifd_pipe_1_4[0], ifd_pipe_long_1_4[1], rgbs_grid_1_1[6], ccm_3a_2_0[7], rgb_ir_2_0[8], odr_awb_std_1_4[9], odr_awb_sve_1_4[10], odr_awb_sat_1_4[11], aestatistics_2_1[12], odr_ae_1_4[13], ifd_lsc_1_4[14], fr_grid_1_0[18], odr_af_std_1_4[19], ifd_tnr_sp_bc_yuv4nm1_1_4[20], ifd_tnr_sp_bc_rs4nm1_1_4[21], ifd_tnr_fp_blend_yuvnm1_1_4[22], ifd_segmap_bnlm_1_4[23], smurf_bnlm_1_0[24], ifd_segmap_xnr_1_4[29], smurf_xnr_1_0[30], ifd_segmap_acm_1_4[34], smurf_acm_1_0[35], b2i_ds_1_1[39], lbff_crop_espa_1_4[40], tnr_scaler_lb_1_1[42], ifd_segmap_tnr_bc_1_4[44], smurf_tnr_bc_1_0[45], odr_tnr_sp_bc_rs4n_1_4[47], ifd_segmap_tnr_blend_1_4[48], smurf_tnr_blend_1_0[49], odr_tnr_fp_yuvn_1_4[51], tnr_scaler_fp_1_1[52], image_upscaler_1_1[53], odr_tnr_scale_fp_yuv4n_1_4[54], ifd_segmap_cas_1_4[55], smurf_cas_1_0[56], odr_ofs_mp_1_4[58], b2i_ds_output_1_1[59], odr_ofs_dp_1_4[60] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x13C77B1CE3F8FE06, 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2, rgbs_grid_1_1, ccm_3a_2_0, rgb_ir_2_0}[2], {odr_awb_std_1_4}[3], {odr_awb_sve_1_4}[4], {odr_awb_sat_1_4}[5], {aestatistics_2_1}[6], {odr_ae_1_4}[7], {ifd_lsc_1_4}[8], {lsc_1_2, gd_2_2, wb_1_1, fr_grid_1_0}[9], {odr_af_std_1_4}[10], {ifd_tnr_sp_bc_yuv4nm1_1_4}[11], {ifd_tnr_sp_bc_rs4nm1_1_4}[12], {ifd_tnr_fp_blend_yuvnm1_1_4}[13], {ifd_segmap_bnlm_1_4}[14], {smurf_bnlm_1_0}[15], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[16], {ifd_segmap_xnr_1_4}[17], {smurf_xnr_1_0}[18], {xnr_5_4, vcr_3_1, glim_2_0}[19], {ifd_segmap_acm_1_4}[20], {smurf_acm_1_0}[21], {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[22], {lbff_crop_espa_1_4}[23], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[24], {tnr7_ims_1_2}[25], {ifd_segmap_tnr_bc_1_4}[26], {smurf_tnr_bc_1_0}[27], {tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[28], {ifd_segmap_tnr_blend_1_4}[29], {smurf_tnr_blend_1_0}[30], {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[31], {odr_tnr_scale_fp_yuv4n_1_4}[32], {ifd_segmap_cas_1_4}[33], {smurf_cas_1_0}[34], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[35], {odr_ofs_dp_1_4}[36] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x1FFFFF9CE3FCFFC7, 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2}[2], {rgbs_grid_1_1}[3], {ccm_3a_2_0}[4], {rgb_ir_2_0}[5], {odr_awb_std_1_4}[6], {odr_awb_sve_1_4}[7], {odr_awb_sat_1_4}[8], {aestatistics_2_1}[9], {odr_ae_1_4}[10], {ifd_lsc_1_4}[11], {lsc_1_2, gd_2_2, wb_1_1}[12], {fr_grid_1_0}[13], {odr_af_std_1_4}[14], {ifd_tnr_sp_bc_yuv4nm1_1_4}[15], {ifd_tnr_sp_bc_rs4nm1_1_4}[16], {ifd_tnr_fp_blend_yuvnm1_1_4}[17], {ifd_segmap_bnlm_1_4}[18], {smurf_bnlm_1_0}[19], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[20], {ifd_segmap_xnr_1_4}[21], {smurf_xnr_1_0}[22], {xnr_5_4, vcr_3_1, glim_2_0}[23], {ifd_segmap_acm_1_4}[24], {smurf_acm_1_0}[25], {acm_1_2, gammatm_v4, csc_1_1}[26], {b2i_ds_1_1}[27], {lbff_crop_espa_1_4}[28], {tnr7_spatial_1_1}[29], {tnr_scaler_lb_1_1}[30], {tnr7_ims_1_2}[31], {ifd_segmap_tnr_bc_1_4}[32], {smurf_tnr_bc_1_0}[33], {tnr7_bc_1_2}[34], {odr_tnr_sp_bc_rs4n_1_4}[35], {ifd_segmap_tnr_blend_1_4}[36], {smurf_tnr_blend_1_0}[37], {tnr7_blend_1_1}[38], {odr_tnr_fp_yuvn_1_4}[39], {tnr_scaler_fp_1_1}[40], {image_upscaler_1_1}[41], {odr_tnr_scale_fp_yuv4n_1_4}[42], {ifd_segmap_cas_1_4}[43], {smurf_cas_1_0}[44], {cas_1_1}[45], {odr_ofs_mp_1_4}[46], {b2i_ds_output_1_1}[47], {odr_ofs_dp_1_4}[48] } + uint8_t systemApisSizes[61] = {220 /*ifd_pipe_1_4*/, 220 /*ifd_pipe_long_1_4*/, 5 /*dol_lite_1_2*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 0 /*rgb_ir_2_0*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sve_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 20 /*fr_grid_1_0*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 220 /*ifd_segmap_bnlm_1_4*/, 0 /*smurf_bnlm_1_0*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 220 /*ifd_segmap_xnr_1_4*/, 0 /*smurf_xnr_1_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 220 /*ifd_segmap_acm_1_4*/, 0 /*smurf_acm_1_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*tnr7_spatial_1_1*/, 0 /*tnr_scaler_lb_1_1*/, 0 /*tnr7_ims_1_2*/, 220 /*ifd_segmap_tnr_bc_1_4*/, 0 /*smurf_tnr_bc_1_0*/, 5 /*tnr7_bc_1_2*/, 220 /*odr_tnr_sp_bc_rs4n_1_4*/, 220 /*ifd_segmap_tnr_blend_1_4*/, 0 /*smurf_tnr_blend_1_0*/, 5 /*tnr7_blend_1_1*/, 220 /*odr_tnr_fp_yuvn_1_4*/, 0 /*tnr_scaler_fp_1_1*/, 0 /*image_upscaler_1_1*/, 220 /*odr_tnr_scale_fp_yuv4n_1_4*/, 220 /*ifd_segmap_cas_1_4*/, 0 /*smurf_cas_1_0*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/}; + uint16_t runKernelConfigOrder[61] = {0 /*ifd_pipe_1_4*/, 1 /*ifd_pipe_long_1_4*/, 2 /*dol_lite_1_2*/, 3 /*bxt_blc*/, 4 /*linearization2_0*/, 5 /*dpc_2_2*/, 8 /*rgb_ir_2_0*/, 6 /*rgbs_grid_1_1*/, 9 /*odr_awb_std_1_4*/, 10 /*odr_awb_sve_1_4*/, 11 /*odr_awb_sat_1_4*/, 7 /*ccm_3a_2_0*/, 12 /*aestatistics_2_1*/, 13 /*odr_ae_1_4*/, 14 /*ifd_lsc_1_4*/, 15 /*lsc_1_2*/, 16 /*gd_2_2*/, 17 /*wb_1_1*/, 25 /*bnlm_3_4*/, 26 /*bxt_demosaic*/, 27 /*vcsc_2_0_b*/, 28 /*gltm_2_0*/, 31 /*xnr_5_4*/, 32 /*vcr_3_1*/, 33 /*glim_2_0*/, 36 /*acm_1_2*/, 37 /*gammatm_v4*/, 38 /*csc_1_1*/, 39 /*b2i_ds_1_1*/, 40 /*lbff_crop_espa_1_4*/, 41 /*tnr7_spatial_1_1*/, 42 /*tnr_scaler_lb_1_1*/, 18 /*fr_grid_1_0*/, 19 /*odr_af_std_1_4*/, 20 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 21 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 43 /*tnr7_ims_1_2*/, 46 /*tnr7_bc_1_2*/, 47 /*odr_tnr_sp_bc_rs4n_1_4*/, 22 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 50 /*tnr7_blend_1_1*/, 53 /*image_upscaler_1_1*/, 57 /*cas_1_1*/, 58 /*odr_ofs_mp_1_4*/, 59 /*b2i_ds_output_1_1*/, 60 /*odr_ofs_dp_1_4*/, 51 /*odr_tnr_fp_yuvn_1_4*/, 52 /*tnr_scaler_fp_1_1*/, 54 /*odr_tnr_scale_fp_yuv4n_1_4*/, 23 /*ifd_segmap_bnlm_1_4*/, 29 /*ifd_segmap_xnr_1_4*/, 34 /*ifd_segmap_acm_1_4*/, 44 /*ifd_segmap_tnr_bc_1_4*/, 48 /*ifd_segmap_tnr_blend_1_4*/, 55 /*ifd_segmap_cas_1_4*/, 24 /*smurf_bnlm_1_0*/, 30 /*smurf_xnr_1_0*/, 35 /*smurf_acm_1_0*/, 45 /*smurf_tnr_bc_1_0*/, 49 /*smurf_tnr_blend_1_0*/, 56 /*smurf_cas_1_0*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[25].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffDol2InputsWithGmvWithTnrWithSapOuterNode::Init(LbffDol2InputsWithGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 65, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[65] = {52446 /*ifd_pipe_1_4*/, 24678 /*ifd_pipe_long_1_4*/, 54871 /*dol_lite_1_2*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 14488 /*rgb_ir_2_0*/, 38544 /*odr_awb_std_1_4*/, 53430 /*odr_awb_sve_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 26958 /*fr_grid_1_0*/, 59136 /*odr_af_std_1_4*/, 51073 /*ifd_gmv_1_4*/, 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 35263 /*ifd_segmap_bnlm_1_4*/, 54924 /*smurf_bnlm_1_0*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 9241 /*ifd_segmap_xnr_1_4*/, 42329 /*smurf_xnr_1_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 51914 /*ifd_segmap_acm_1_4*/, 28366 /*smurf_acm_1_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 2495 /*tnr7_spatial_1_1*/, 29996 /*tnr_scaler_lb_1_1*/, 23639 /*tnr7_ims_1_2*/, 40280 /*gmv_statistics_1_1*/, 7416 /*odr_gmv_feature_1_4*/, 41148 /*odr_gmv_match_1_4*/, 47873 /*ifd_segmap_tnr_bc_1_4*/, 13101 /*smurf_tnr_bc_1_0*/, 1502 /*tnr7_bc_1_2*/, 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, 14619 /*ifd_segmap_tnr_blend_1_4*/, 42749 /*smurf_tnr_blend_1_0*/, 20119 /*tnr7_blend_1_1*/, 5215 /*odr_tnr_fp_yuvn_1_4*/, 20623 /*tnr_scaler_fp_1_1*/, 28787 /*image_upscaler_1_1*/, 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/, 20893 /*ifd_segmap_cas_1_4*/, 37468 /*smurf_cas_1_0*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0xDFBBEB18C3FC7FC3, 0x1}; // { ifd_pipe_1_4[0], ifd_pipe_long_1_4[1], rgbs_grid_1_1[6], ccm_3a_2_0[7], rgb_ir_2_0[8], odr_awb_std_1_4[9], odr_awb_sve_1_4[10], odr_awb_sat_1_4[11], aestatistics_2_1[12], odr_ae_1_4[13], ifd_lsc_1_4[14], fr_grid_1_0[18], odr_af_std_1_4[19], ifd_gmv_1_4[20], ifd_tnr_sp_bc_yuv4nm1_1_4[21], ifd_tnr_sp_bc_rs4nm1_1_4[22], ifd_tnr_fp_blend_yuvnm1_1_4[23], ifd_segmap_bnlm_1_4[24], smurf_bnlm_1_0[25], ifd_segmap_xnr_1_4[30], smurf_xnr_1_0[31], ifd_segmap_acm_1_4[35], smurf_acm_1_0[36], b2i_ds_1_1[40], lbff_crop_espa_1_4[41], tnr_scaler_lb_1_1[43], gmv_statistics_1_1[45], odr_gmv_feature_1_4[46], odr_gmv_match_1_4[47], ifd_segmap_tnr_bc_1_4[48], smurf_tnr_bc_1_0[49], odr_tnr_sp_bc_rs4n_1_4[51], ifd_segmap_tnr_blend_1_4[52], smurf_tnr_blend_1_0[53], odr_tnr_fp_yuvn_1_4[55], tnr_scaler_fp_1_1[56], image_upscaler_1_1[57], odr_tnr_scale_fp_yuv4n_1_4[58], ifd_segmap_cas_1_4[59], smurf_cas_1_0[60], odr_ofs_mp_1_4[62], b2i_ds_output_1_1[63], odr_ofs_dp_1_4[64] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x3C77F639C7F8FE06, 0x1}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2, rgbs_grid_1_1, ccm_3a_2_0, rgb_ir_2_0}[2], {odr_awb_std_1_4}[3], {odr_awb_sve_1_4}[4], {odr_awb_sat_1_4}[5], {aestatistics_2_1}[6], {odr_ae_1_4}[7], {ifd_lsc_1_4}[8], {lsc_1_2, gd_2_2, wb_1_1, fr_grid_1_0}[9], {odr_af_std_1_4}[10], {ifd_gmv_1_4}[11], {ifd_tnr_sp_bc_yuv4nm1_1_4}[12], {ifd_tnr_sp_bc_rs4nm1_1_4}[13], {ifd_tnr_fp_blend_yuvnm1_1_4}[14], {ifd_segmap_bnlm_1_4}[15], {smurf_bnlm_1_0}[16], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[17], {ifd_segmap_xnr_1_4}[18], {smurf_xnr_1_0}[19], {xnr_5_4, vcr_3_1, glim_2_0}[20], {ifd_segmap_acm_1_4}[21], {smurf_acm_1_0}[22], {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[23], {lbff_crop_espa_1_4}[24], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[25], {tnr7_ims_1_2}[26], {gmv_statistics_1_1}[27], {odr_gmv_feature_1_4}[28], {odr_gmv_match_1_4}[29], {ifd_segmap_tnr_bc_1_4}[30], {smurf_tnr_bc_1_0}[31], {tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[32], {ifd_segmap_tnr_blend_1_4}[33], {smurf_tnr_blend_1_0}[34], {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[35], {odr_tnr_scale_fp_yuv4n_1_4}[36], {ifd_segmap_cas_1_4}[37], {smurf_cas_1_0}[38], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[39], {odr_ofs_dp_1_4}[40] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0xFFFFFF39C7FCFFC7, 0x1}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2}[2], {rgbs_grid_1_1}[3], {ccm_3a_2_0}[4], {rgb_ir_2_0}[5], {odr_awb_std_1_4}[6], {odr_awb_sve_1_4}[7], {odr_awb_sat_1_4}[8], {aestatistics_2_1}[9], {odr_ae_1_4}[10], {ifd_lsc_1_4}[11], {lsc_1_2, gd_2_2, wb_1_1}[12], {fr_grid_1_0}[13], {odr_af_std_1_4}[14], {ifd_gmv_1_4}[15], {ifd_tnr_sp_bc_yuv4nm1_1_4}[16], {ifd_tnr_sp_bc_rs4nm1_1_4}[17], {ifd_tnr_fp_blend_yuvnm1_1_4}[18], {ifd_segmap_bnlm_1_4}[19], {smurf_bnlm_1_0}[20], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[21], {ifd_segmap_xnr_1_4}[22], {smurf_xnr_1_0}[23], {xnr_5_4, vcr_3_1, glim_2_0}[24], {ifd_segmap_acm_1_4}[25], {smurf_acm_1_0}[26], {acm_1_2, gammatm_v4, csc_1_1}[27], {b2i_ds_1_1}[28], {lbff_crop_espa_1_4}[29], {tnr7_spatial_1_1}[30], {tnr_scaler_lb_1_1}[31], {tnr7_ims_1_2}[32], {gmv_statistics_1_1}[33], {odr_gmv_feature_1_4}[34], {odr_gmv_match_1_4}[35], {ifd_segmap_tnr_bc_1_4}[36], {smurf_tnr_bc_1_0}[37], {tnr7_bc_1_2}[38], {odr_tnr_sp_bc_rs4n_1_4}[39], {ifd_segmap_tnr_blend_1_4}[40], {smurf_tnr_blend_1_0}[41], {tnr7_blend_1_1}[42], {odr_tnr_fp_yuvn_1_4}[43], {tnr_scaler_fp_1_1}[44], {image_upscaler_1_1}[45], {odr_tnr_scale_fp_yuv4n_1_4}[46], {ifd_segmap_cas_1_4}[47], {smurf_cas_1_0}[48], {cas_1_1}[49], {odr_ofs_mp_1_4}[50], {b2i_ds_output_1_1}[51], {odr_ofs_dp_1_4}[52] } + uint8_t systemApisSizes[65] = {220 /*ifd_pipe_1_4*/, 220 /*ifd_pipe_long_1_4*/, 5 /*dol_lite_1_2*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 0 /*rgb_ir_2_0*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sve_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 20 /*fr_grid_1_0*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_gmv_1_4*/, 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 220 /*ifd_segmap_bnlm_1_4*/, 0 /*smurf_bnlm_1_0*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 220 /*ifd_segmap_xnr_1_4*/, 0 /*smurf_xnr_1_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 220 /*ifd_segmap_acm_1_4*/, 0 /*smurf_acm_1_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*tnr7_spatial_1_1*/, 0 /*tnr_scaler_lb_1_1*/, 0 /*tnr7_ims_1_2*/, 32 /*gmv_statistics_1_1*/, 220 /*odr_gmv_feature_1_4*/, 220 /*odr_gmv_match_1_4*/, 220 /*ifd_segmap_tnr_bc_1_4*/, 0 /*smurf_tnr_bc_1_0*/, 5 /*tnr7_bc_1_2*/, 220 /*odr_tnr_sp_bc_rs4n_1_4*/, 220 /*ifd_segmap_tnr_blend_1_4*/, 0 /*smurf_tnr_blend_1_0*/, 5 /*tnr7_blend_1_1*/, 220 /*odr_tnr_fp_yuvn_1_4*/, 0 /*tnr_scaler_fp_1_1*/, 0 /*image_upscaler_1_1*/, 220 /*odr_tnr_scale_fp_yuv4n_1_4*/, 220 /*ifd_segmap_cas_1_4*/, 0 /*smurf_cas_1_0*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/}; + uint16_t runKernelConfigOrder[65] = {0 /*ifd_pipe_1_4*/, 1 /*ifd_pipe_long_1_4*/, 2 /*dol_lite_1_2*/, 3 /*bxt_blc*/, 4 /*linearization2_0*/, 5 /*dpc_2_2*/, 8 /*rgb_ir_2_0*/, 6 /*rgbs_grid_1_1*/, 9 /*odr_awb_std_1_4*/, 10 /*odr_awb_sve_1_4*/, 11 /*odr_awb_sat_1_4*/, 7 /*ccm_3a_2_0*/, 12 /*aestatistics_2_1*/, 13 /*odr_ae_1_4*/, 14 /*ifd_lsc_1_4*/, 15 /*lsc_1_2*/, 16 /*gd_2_2*/, 17 /*wb_1_1*/, 26 /*bnlm_3_4*/, 27 /*bxt_demosaic*/, 28 /*vcsc_2_0_b*/, 29 /*gltm_2_0*/, 32 /*xnr_5_4*/, 33 /*vcr_3_1*/, 34 /*glim_2_0*/, 37 /*acm_1_2*/, 38 /*gammatm_v4*/, 39 /*csc_1_1*/, 40 /*b2i_ds_1_1*/, 41 /*lbff_crop_espa_1_4*/, 42 /*tnr7_spatial_1_1*/, 43 /*tnr_scaler_lb_1_1*/, 18 /*fr_grid_1_0*/, 19 /*odr_af_std_1_4*/, 20 /*ifd_gmv_1_4*/, 45 /*gmv_statistics_1_1*/, 46 /*odr_gmv_feature_1_4*/, 47 /*odr_gmv_match_1_4*/, 21 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 22 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 44 /*tnr7_ims_1_2*/, 50 /*tnr7_bc_1_2*/, 51 /*odr_tnr_sp_bc_rs4n_1_4*/, 23 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 54 /*tnr7_blend_1_1*/, 57 /*image_upscaler_1_1*/, 61 /*cas_1_1*/, 62 /*odr_ofs_mp_1_4*/, 63 /*b2i_ds_output_1_1*/, 64 /*odr_ofs_dp_1_4*/, 55 /*odr_tnr_fp_yuvn_1_4*/, 56 /*tnr_scaler_fp_1_1*/, 58 /*odr_tnr_scale_fp_yuv4n_1_4*/, 24 /*ifd_segmap_bnlm_1_4*/, 30 /*ifd_segmap_xnr_1_4*/, 35 /*ifd_segmap_acm_1_4*/, 48 /*ifd_segmap_tnr_bc_1_4*/, 52 /*ifd_segmap_tnr_blend_1_4*/, 59 /*ifd_segmap_cas_1_4*/, 25 /*smurf_bnlm_1_0*/, 31 /*smurf_xnr_1_0*/, 36 /*smurf_acm_1_0*/, 49 /*smurf_tnr_bc_1_0*/, 53 /*smurf_tnr_blend_1_0*/, 60 /*smurf_cas_1_0*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[26].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffDol3InputsNoGmvNoTnrWithSapOuterNode::Init(LbffDol3InputsNoGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 46, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[46] = {52446 /*ifd_pipe_1_4*/, 24678 /*ifd_pipe_long_1_4*/, 4386 /*ifd_pipe_short_smth_1_4*/, 54871 /*dol_lite_1_2*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 14488 /*rgb_ir_2_0*/, 38544 /*odr_awb_std_1_4*/, 53430 /*odr_awb_sve_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 26958 /*fr_grid_1_0*/, 59136 /*odr_af_std_1_4*/, 35263 /*ifd_segmap_bnlm_1_4*/, 54924 /*smurf_bnlm_1_0*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 9241 /*ifd_segmap_xnr_1_4*/, 42329 /*smurf_xnr_1_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 51914 /*ifd_segmap_acm_1_4*/, 28366 /*smurf_acm_1_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 28787 /*image_upscaler_1_1*/, 20893 /*ifd_segmap_cas_1_4*/, 37468 /*smurf_cas_1_0*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x3BE31878FF87, 0x0}; // { ifd_pipe_1_4[0], ifd_pipe_long_1_4[1], ifd_pipe_short_smth_1_4[2], rgbs_grid_1_1[7], ccm_3a_2_0[8], rgb_ir_2_0[9], odr_awb_std_1_4[10], odr_awb_sve_1_4[11], odr_awb_sat_1_4[12], aestatistics_2_1[13], odr_ae_1_4[14], ifd_lsc_1_4[15], fr_grid_1_0[19], odr_af_std_1_4[20], ifd_segmap_bnlm_1_4[21], smurf_bnlm_1_0[22], ifd_segmap_xnr_1_4[27], smurf_xnr_1_0[28], ifd_segmap_acm_1_4[32], smurf_acm_1_0[33], b2i_ds_1_1[37], lbff_crop_espa_1_4[38], image_upscaler_1_1[39], ifd_segmap_cas_1_4[40], smurf_cas_1_0[41], odr_ofs_mp_1_4[43], b2i_ds_output_1_1[44], odr_ofs_dp_1_4[45] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x27C738F1FC0E, 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {ifd_pipe_short_smth_1_4}[2], {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2, rgbs_grid_1_1, ccm_3a_2_0, rgb_ir_2_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sve_1_4}[5], {odr_awb_sat_1_4}[6], {aestatistics_2_1}[7], {odr_ae_1_4}[8], {ifd_lsc_1_4}[9], {lsc_1_2, gd_2_2, wb_1_1, fr_grid_1_0}[10], {odr_af_std_1_4}[11], {ifd_segmap_bnlm_1_4}[12], {smurf_bnlm_1_0}[13], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[14], {ifd_segmap_xnr_1_4}[15], {smurf_xnr_1_0}[16], {xnr_5_4, vcr_3_1, glim_2_0}[17], {ifd_segmap_acm_1_4}[18], {smurf_acm_1_0}[19], {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[20], {lbff_crop_espa_1_4}[21], {image_upscaler_1_1}[22], {ifd_segmap_cas_1_4}[23], {smurf_cas_1_0}[24], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[25], {odr_ofs_dp_1_4}[26] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x3FE738F9FF8F, 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {ifd_pipe_short_smth_1_4}[2], {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2}[3], {rgbs_grid_1_1}[4], {ccm_3a_2_0}[5], {rgb_ir_2_0}[6], {odr_awb_std_1_4}[7], {odr_awb_sve_1_4}[8], {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], {odr_ae_1_4}[11], {ifd_lsc_1_4}[12], {lsc_1_2, gd_2_2, wb_1_1}[13], {fr_grid_1_0}[14], {odr_af_std_1_4}[15], {ifd_segmap_bnlm_1_4}[16], {smurf_bnlm_1_0}[17], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[18], {ifd_segmap_xnr_1_4}[19], {smurf_xnr_1_0}[20], {xnr_5_4, vcr_3_1, glim_2_0}[21], {ifd_segmap_acm_1_4}[22], {smurf_acm_1_0}[23], {acm_1_2, gammatm_v4, csc_1_1}[24], {b2i_ds_1_1}[25], {lbff_crop_espa_1_4}[26], {image_upscaler_1_1}[27], {ifd_segmap_cas_1_4}[28], {smurf_cas_1_0}[29], {cas_1_1}[30], {odr_ofs_mp_1_4}[31], {b2i_ds_output_1_1}[32], {odr_ofs_dp_1_4}[33] } + uint8_t systemApisSizes[46] = {220 /*ifd_pipe_1_4*/, 220 /*ifd_pipe_long_1_4*/, 220 /*ifd_pipe_short_smth_1_4*/, 5 /*dol_lite_1_2*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 0 /*rgb_ir_2_0*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sve_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 20 /*fr_grid_1_0*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_segmap_bnlm_1_4*/, 0 /*smurf_bnlm_1_0*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 220 /*ifd_segmap_xnr_1_4*/, 0 /*smurf_xnr_1_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 220 /*ifd_segmap_acm_1_4*/, 0 /*smurf_acm_1_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*image_upscaler_1_1*/, 220 /*ifd_segmap_cas_1_4*/, 0 /*smurf_cas_1_0*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/}; + uint16_t runKernelConfigOrder[46] = {0 /*ifd_pipe_1_4*/, 1 /*ifd_pipe_long_1_4*/, 2 /*ifd_pipe_short_smth_1_4*/, 3 /*dol_lite_1_2*/, 4 /*bxt_blc*/, 5 /*linearization2_0*/, 6 /*dpc_2_2*/, 9 /*rgb_ir_2_0*/, 7 /*rgbs_grid_1_1*/, 10 /*odr_awb_std_1_4*/, 11 /*odr_awb_sve_1_4*/, 12 /*odr_awb_sat_1_4*/, 8 /*ccm_3a_2_0*/, 13 /*aestatistics_2_1*/, 14 /*odr_ae_1_4*/, 15 /*ifd_lsc_1_4*/, 16 /*lsc_1_2*/, 17 /*gd_2_2*/, 18 /*wb_1_1*/, 23 /*bnlm_3_4*/, 24 /*bxt_demosaic*/, 25 /*vcsc_2_0_b*/, 26 /*gltm_2_0*/, 29 /*xnr_5_4*/, 30 /*vcr_3_1*/, 31 /*glim_2_0*/, 34 /*acm_1_2*/, 35 /*gammatm_v4*/, 36 /*csc_1_1*/, 37 /*b2i_ds_1_1*/, 38 /*lbff_crop_espa_1_4*/, 39 /*image_upscaler_1_1*/, 42 /*cas_1_1*/, 43 /*odr_ofs_mp_1_4*/, 44 /*b2i_ds_output_1_1*/, 45 /*odr_ofs_dp_1_4*/, 19 /*fr_grid_1_0*/, 20 /*odr_af_std_1_4*/, 21 /*ifd_segmap_bnlm_1_4*/, 27 /*ifd_segmap_xnr_1_4*/, 32 /*ifd_segmap_acm_1_4*/, 40 /*ifd_segmap_cas_1_4*/, 22 /*smurf_bnlm_1_0*/, 28 /*smurf_xnr_1_0*/, 33 /*smurf_acm_1_0*/, 41 /*smurf_cas_1_0*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[23].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffDol3InputsWithGmvNoTnrWithSapOuterNode::Init(LbffDol3InputsWithGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 50, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[50] = {52446 /*ifd_pipe_1_4*/, 24678 /*ifd_pipe_long_1_4*/, 4386 /*ifd_pipe_short_smth_1_4*/, 54871 /*dol_lite_1_2*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 14488 /*rgb_ir_2_0*/, 38544 /*odr_awb_std_1_4*/, 53430 /*odr_awb_sve_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 26958 /*fr_grid_1_0*/, 59136 /*odr_af_std_1_4*/, 51073 /*ifd_gmv_1_4*/, 35263 /*ifd_segmap_bnlm_1_4*/, 54924 /*smurf_bnlm_1_0*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 9241 /*ifd_segmap_xnr_1_4*/, 42329 /*smurf_xnr_1_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 51914 /*ifd_segmap_acm_1_4*/, 28366 /*smurf_acm_1_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 28787 /*image_upscaler_1_1*/, 40280 /*gmv_statistics_1_1*/, 7416 /*odr_gmv_feature_1_4*/, 41148 /*odr_gmv_match_1_4*/, 20893 /*ifd_segmap_cas_1_4*/, 37468 /*smurf_cas_1_0*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x3BFC630F8FF87, 0x0}; // { ifd_pipe_1_4[0], ifd_pipe_long_1_4[1], ifd_pipe_short_smth_1_4[2], rgbs_grid_1_1[7], ccm_3a_2_0[8], rgb_ir_2_0[9], odr_awb_std_1_4[10], odr_awb_sve_1_4[11], odr_awb_sat_1_4[12], aestatistics_2_1[13], odr_ae_1_4[14], ifd_lsc_1_4[15], fr_grid_1_0[19], odr_af_std_1_4[20], ifd_gmv_1_4[21], ifd_segmap_bnlm_1_4[22], smurf_bnlm_1_0[23], ifd_segmap_xnr_1_4[28], smurf_xnr_1_0[29], ifd_segmap_acm_1_4[33], smurf_acm_1_0[34], b2i_ds_1_1[38], lbff_crop_espa_1_4[39], image_upscaler_1_1[40], gmv_statistics_1_1[41], odr_gmv_feature_1_4[42], odr_gmv_match_1_4[43], ifd_segmap_cas_1_4[44], smurf_cas_1_0[45], odr_ofs_mp_1_4[47], b2i_ds_output_1_1[48], odr_ofs_dp_1_4[49] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x27F8E71F1FC0E, 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {ifd_pipe_short_smth_1_4}[2], {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2, rgbs_grid_1_1, ccm_3a_2_0, rgb_ir_2_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sve_1_4}[5], {odr_awb_sat_1_4}[6], {aestatistics_2_1}[7], {odr_ae_1_4}[8], {ifd_lsc_1_4}[9], {lsc_1_2, gd_2_2, wb_1_1, fr_grid_1_0}[10], {odr_af_std_1_4}[11], {ifd_gmv_1_4}[12], {ifd_segmap_bnlm_1_4}[13], {smurf_bnlm_1_0}[14], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[15], {ifd_segmap_xnr_1_4}[16], {smurf_xnr_1_0}[17], {xnr_5_4, vcr_3_1, glim_2_0}[18], {ifd_segmap_acm_1_4}[19], {smurf_acm_1_0}[20], {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[21], {lbff_crop_espa_1_4}[22], {image_upscaler_1_1}[23], {gmv_statistics_1_1}[24], {odr_gmv_feature_1_4}[25], {odr_gmv_match_1_4}[26], {ifd_segmap_cas_1_4}[27], {smurf_cas_1_0}[28], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[29], {odr_ofs_dp_1_4}[30] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x3FFCE71F9FF8F, 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {ifd_pipe_short_smth_1_4}[2], {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2}[3], {rgbs_grid_1_1}[4], {ccm_3a_2_0}[5], {rgb_ir_2_0}[6], {odr_awb_std_1_4}[7], {odr_awb_sve_1_4}[8], {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], {odr_ae_1_4}[11], {ifd_lsc_1_4}[12], {lsc_1_2, gd_2_2, wb_1_1}[13], {fr_grid_1_0}[14], {odr_af_std_1_4}[15], {ifd_gmv_1_4}[16], {ifd_segmap_bnlm_1_4}[17], {smurf_bnlm_1_0}[18], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[19], {ifd_segmap_xnr_1_4}[20], {smurf_xnr_1_0}[21], {xnr_5_4, vcr_3_1, glim_2_0}[22], {ifd_segmap_acm_1_4}[23], {smurf_acm_1_0}[24], {acm_1_2, gammatm_v4, csc_1_1}[25], {b2i_ds_1_1}[26], {lbff_crop_espa_1_4}[27], {image_upscaler_1_1}[28], {gmv_statistics_1_1}[29], {odr_gmv_feature_1_4}[30], {odr_gmv_match_1_4}[31], {ifd_segmap_cas_1_4}[32], {smurf_cas_1_0}[33], {cas_1_1}[34], {odr_ofs_mp_1_4}[35], {b2i_ds_output_1_1}[36], {odr_ofs_dp_1_4}[37] } + uint8_t systemApisSizes[50] = {220 /*ifd_pipe_1_4*/, 220 /*ifd_pipe_long_1_4*/, 220 /*ifd_pipe_short_smth_1_4*/, 5 /*dol_lite_1_2*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 0 /*rgb_ir_2_0*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sve_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 20 /*fr_grid_1_0*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_gmv_1_4*/, 220 /*ifd_segmap_bnlm_1_4*/, 0 /*smurf_bnlm_1_0*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 220 /*ifd_segmap_xnr_1_4*/, 0 /*smurf_xnr_1_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 220 /*ifd_segmap_acm_1_4*/, 0 /*smurf_acm_1_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*image_upscaler_1_1*/, 32 /*gmv_statistics_1_1*/, 220 /*odr_gmv_feature_1_4*/, 220 /*odr_gmv_match_1_4*/, 220 /*ifd_segmap_cas_1_4*/, 0 /*smurf_cas_1_0*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/}; + uint16_t runKernelConfigOrder[50] = {0 /*ifd_pipe_1_4*/, 1 /*ifd_pipe_long_1_4*/, 2 /*ifd_pipe_short_smth_1_4*/, 3 /*dol_lite_1_2*/, 4 /*bxt_blc*/, 5 /*linearization2_0*/, 6 /*dpc_2_2*/, 9 /*rgb_ir_2_0*/, 7 /*rgbs_grid_1_1*/, 10 /*odr_awb_std_1_4*/, 11 /*odr_awb_sve_1_4*/, 12 /*odr_awb_sat_1_4*/, 8 /*ccm_3a_2_0*/, 13 /*aestatistics_2_1*/, 14 /*odr_ae_1_4*/, 15 /*ifd_lsc_1_4*/, 16 /*lsc_1_2*/, 17 /*gd_2_2*/, 18 /*wb_1_1*/, 24 /*bnlm_3_4*/, 25 /*bxt_demosaic*/, 26 /*vcsc_2_0_b*/, 27 /*gltm_2_0*/, 30 /*xnr_5_4*/, 31 /*vcr_3_1*/, 32 /*glim_2_0*/, 35 /*acm_1_2*/, 36 /*gammatm_v4*/, 37 /*csc_1_1*/, 38 /*b2i_ds_1_1*/, 39 /*lbff_crop_espa_1_4*/, 40 /*image_upscaler_1_1*/, 46 /*cas_1_1*/, 47 /*odr_ofs_mp_1_4*/, 48 /*b2i_ds_output_1_1*/, 49 /*odr_ofs_dp_1_4*/, 19 /*fr_grid_1_0*/, 20 /*odr_af_std_1_4*/, 21 /*ifd_gmv_1_4*/, 41 /*gmv_statistics_1_1*/, 42 /*odr_gmv_feature_1_4*/, 43 /*odr_gmv_match_1_4*/, 22 /*ifd_segmap_bnlm_1_4*/, 28 /*ifd_segmap_xnr_1_4*/, 33 /*ifd_segmap_acm_1_4*/, 44 /*ifd_segmap_cas_1_4*/, 23 /*smurf_bnlm_1_0*/, 29 /*smurf_xnr_1_0*/, 34 /*smurf_acm_1_0*/, 45 /*smurf_cas_1_0*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[24].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffDol3InputsNoGmvWithTnrWithSapOuterNode::Init(LbffDol3InputsNoGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 62, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[62] = {52446 /*ifd_pipe_1_4*/, 24678 /*ifd_pipe_long_1_4*/, 4386 /*ifd_pipe_short_smth_1_4*/, 54871 /*dol_lite_1_2*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 14488 /*rgb_ir_2_0*/, 38544 /*odr_awb_std_1_4*/, 53430 /*odr_awb_sve_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 26958 /*fr_grid_1_0*/, 59136 /*odr_af_std_1_4*/, 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 35263 /*ifd_segmap_bnlm_1_4*/, 54924 /*smurf_bnlm_1_0*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 9241 /*ifd_segmap_xnr_1_4*/, 42329 /*smurf_xnr_1_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 51914 /*ifd_segmap_acm_1_4*/, 28366 /*smurf_acm_1_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 2495 /*tnr7_spatial_1_1*/, 29996 /*tnr_scaler_lb_1_1*/, 23639 /*tnr7_ims_1_2*/, 47873 /*ifd_segmap_tnr_bc_1_4*/, 13101 /*smurf_tnr_bc_1_0*/, 1502 /*tnr7_bc_1_2*/, 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, 14619 /*ifd_segmap_tnr_blend_1_4*/, 42749 /*smurf_tnr_blend_1_0*/, 20119 /*tnr7_blend_1_1*/, 5215 /*odr_tnr_fp_yuvn_1_4*/, 20623 /*tnr_scaler_fp_1_1*/, 28787 /*image_upscaler_1_1*/, 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/, 20893 /*ifd_segmap_cas_1_4*/, 37468 /*smurf_cas_1_0*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x3BF76B18C3F8FF87, 0x0}; // { ifd_pipe_1_4[0], ifd_pipe_long_1_4[1], ifd_pipe_short_smth_1_4[2], rgbs_grid_1_1[7], ccm_3a_2_0[8], rgb_ir_2_0[9], odr_awb_std_1_4[10], odr_awb_sve_1_4[11], odr_awb_sat_1_4[12], aestatistics_2_1[13], odr_ae_1_4[14], ifd_lsc_1_4[15], fr_grid_1_0[19], odr_af_std_1_4[20], ifd_tnr_sp_bc_yuv4nm1_1_4[21], ifd_tnr_sp_bc_rs4nm1_1_4[22], ifd_tnr_fp_blend_yuvnm1_1_4[23], ifd_segmap_bnlm_1_4[24], smurf_bnlm_1_0[25], ifd_segmap_xnr_1_4[30], smurf_xnr_1_0[31], ifd_segmap_acm_1_4[35], smurf_acm_1_0[36], b2i_ds_1_1[40], lbff_crop_espa_1_4[41], tnr_scaler_lb_1_1[43], ifd_segmap_tnr_bc_1_4[45], smurf_tnr_bc_1_0[46], odr_tnr_sp_bc_rs4n_1_4[48], ifd_segmap_tnr_blend_1_4[49], smurf_tnr_blend_1_0[50], odr_tnr_fp_yuvn_1_4[52], tnr_scaler_fp_1_1[53], image_upscaler_1_1[54], odr_tnr_scale_fp_yuv4n_1_4[55], ifd_segmap_cas_1_4[56], smurf_cas_1_0[57], odr_ofs_mp_1_4[59], b2i_ds_output_1_1[60], odr_ofs_dp_1_4[61] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x278EF639C7F1FC0E, 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {ifd_pipe_short_smth_1_4}[2], {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2, rgbs_grid_1_1, ccm_3a_2_0, rgb_ir_2_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sve_1_4}[5], {odr_awb_sat_1_4}[6], {aestatistics_2_1}[7], {odr_ae_1_4}[8], {ifd_lsc_1_4}[9], {lsc_1_2, gd_2_2, wb_1_1, fr_grid_1_0}[10], {odr_af_std_1_4}[11], {ifd_tnr_sp_bc_yuv4nm1_1_4}[12], {ifd_tnr_sp_bc_rs4nm1_1_4}[13], {ifd_tnr_fp_blend_yuvnm1_1_4}[14], {ifd_segmap_bnlm_1_4}[15], {smurf_bnlm_1_0}[16], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[17], {ifd_segmap_xnr_1_4}[18], {smurf_xnr_1_0}[19], {xnr_5_4, vcr_3_1, glim_2_0}[20], {ifd_segmap_acm_1_4}[21], {smurf_acm_1_0}[22], {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[23], {lbff_crop_espa_1_4}[24], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[25], {tnr7_ims_1_2}[26], {ifd_segmap_tnr_bc_1_4}[27], {smurf_tnr_bc_1_0}[28], {tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[29], {ifd_segmap_tnr_blend_1_4}[30], {smurf_tnr_blend_1_0}[31], {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[32], {odr_tnr_scale_fp_yuv4n_1_4}[33], {ifd_segmap_cas_1_4}[34], {smurf_cas_1_0}[35], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[36], {odr_ofs_dp_1_4}[37] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x3FFFFF39C7F9FF8F, 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {ifd_pipe_short_smth_1_4}[2], {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2}[3], {rgbs_grid_1_1}[4], {ccm_3a_2_0}[5], {rgb_ir_2_0}[6], {odr_awb_std_1_4}[7], {odr_awb_sve_1_4}[8], {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], {odr_ae_1_4}[11], {ifd_lsc_1_4}[12], {lsc_1_2, gd_2_2, wb_1_1}[13], {fr_grid_1_0}[14], {odr_af_std_1_4}[15], {ifd_tnr_sp_bc_yuv4nm1_1_4}[16], {ifd_tnr_sp_bc_rs4nm1_1_4}[17], {ifd_tnr_fp_blend_yuvnm1_1_4}[18], {ifd_segmap_bnlm_1_4}[19], {smurf_bnlm_1_0}[20], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[21], {ifd_segmap_xnr_1_4}[22], {smurf_xnr_1_0}[23], {xnr_5_4, vcr_3_1, glim_2_0}[24], {ifd_segmap_acm_1_4}[25], {smurf_acm_1_0}[26], {acm_1_2, gammatm_v4, csc_1_1}[27], {b2i_ds_1_1}[28], {lbff_crop_espa_1_4}[29], {tnr7_spatial_1_1}[30], {tnr_scaler_lb_1_1}[31], {tnr7_ims_1_2}[32], {ifd_segmap_tnr_bc_1_4}[33], {smurf_tnr_bc_1_0}[34], {tnr7_bc_1_2}[35], {odr_tnr_sp_bc_rs4n_1_4}[36], {ifd_segmap_tnr_blend_1_4}[37], {smurf_tnr_blend_1_0}[38], {tnr7_blend_1_1}[39], {odr_tnr_fp_yuvn_1_4}[40], {tnr_scaler_fp_1_1}[41], {image_upscaler_1_1}[42], {odr_tnr_scale_fp_yuv4n_1_4}[43], {ifd_segmap_cas_1_4}[44], {smurf_cas_1_0}[45], {cas_1_1}[46], {odr_ofs_mp_1_4}[47], {b2i_ds_output_1_1}[48], {odr_ofs_dp_1_4}[49] } + uint8_t systemApisSizes[62] = {220 /*ifd_pipe_1_4*/, 220 /*ifd_pipe_long_1_4*/, 220 /*ifd_pipe_short_smth_1_4*/, 5 /*dol_lite_1_2*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 0 /*rgb_ir_2_0*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sve_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 20 /*fr_grid_1_0*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 220 /*ifd_segmap_bnlm_1_4*/, 0 /*smurf_bnlm_1_0*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 220 /*ifd_segmap_xnr_1_4*/, 0 /*smurf_xnr_1_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 220 /*ifd_segmap_acm_1_4*/, 0 /*smurf_acm_1_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*tnr7_spatial_1_1*/, 0 /*tnr_scaler_lb_1_1*/, 0 /*tnr7_ims_1_2*/, 220 /*ifd_segmap_tnr_bc_1_4*/, 0 /*smurf_tnr_bc_1_0*/, 5 /*tnr7_bc_1_2*/, 220 /*odr_tnr_sp_bc_rs4n_1_4*/, 220 /*ifd_segmap_tnr_blend_1_4*/, 0 /*smurf_tnr_blend_1_0*/, 5 /*tnr7_blend_1_1*/, 220 /*odr_tnr_fp_yuvn_1_4*/, 0 /*tnr_scaler_fp_1_1*/, 0 /*image_upscaler_1_1*/, 220 /*odr_tnr_scale_fp_yuv4n_1_4*/, 220 /*ifd_segmap_cas_1_4*/, 0 /*smurf_cas_1_0*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/}; + uint16_t runKernelConfigOrder[62] = {0 /*ifd_pipe_1_4*/, 1 /*ifd_pipe_long_1_4*/, 2 /*ifd_pipe_short_smth_1_4*/, 3 /*dol_lite_1_2*/, 4 /*bxt_blc*/, 5 /*linearization2_0*/, 6 /*dpc_2_2*/, 9 /*rgb_ir_2_0*/, 7 /*rgbs_grid_1_1*/, 10 /*odr_awb_std_1_4*/, 11 /*odr_awb_sve_1_4*/, 12 /*odr_awb_sat_1_4*/, 8 /*ccm_3a_2_0*/, 13 /*aestatistics_2_1*/, 14 /*odr_ae_1_4*/, 15 /*ifd_lsc_1_4*/, 16 /*lsc_1_2*/, 17 /*gd_2_2*/, 18 /*wb_1_1*/, 26 /*bnlm_3_4*/, 27 /*bxt_demosaic*/, 28 /*vcsc_2_0_b*/, 29 /*gltm_2_0*/, 32 /*xnr_5_4*/, 33 /*vcr_3_1*/, 34 /*glim_2_0*/, 37 /*acm_1_2*/, 38 /*gammatm_v4*/, 39 /*csc_1_1*/, 40 /*b2i_ds_1_1*/, 41 /*lbff_crop_espa_1_4*/, 42 /*tnr7_spatial_1_1*/, 43 /*tnr_scaler_lb_1_1*/, 19 /*fr_grid_1_0*/, 20 /*odr_af_std_1_4*/, 21 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 22 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 44 /*tnr7_ims_1_2*/, 47 /*tnr7_bc_1_2*/, 48 /*odr_tnr_sp_bc_rs4n_1_4*/, 23 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 51 /*tnr7_blend_1_1*/, 54 /*image_upscaler_1_1*/, 58 /*cas_1_1*/, 59 /*odr_ofs_mp_1_4*/, 60 /*b2i_ds_output_1_1*/, 61 /*odr_ofs_dp_1_4*/, 52 /*odr_tnr_fp_yuvn_1_4*/, 53 /*tnr_scaler_fp_1_1*/, 55 /*odr_tnr_scale_fp_yuv4n_1_4*/, 24 /*ifd_segmap_bnlm_1_4*/, 30 /*ifd_segmap_xnr_1_4*/, 35 /*ifd_segmap_acm_1_4*/, 45 /*ifd_segmap_tnr_bc_1_4*/, 49 /*ifd_segmap_tnr_blend_1_4*/, 56 /*ifd_segmap_cas_1_4*/, 25 /*smurf_bnlm_1_0*/, 31 /*smurf_xnr_1_0*/, 36 /*smurf_acm_1_0*/, 46 /*smurf_tnr_bc_1_0*/, 50 /*smurf_tnr_blend_1_0*/, 57 /*smurf_cas_1_0*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[26].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffDol3InputsWithGmvWithTnrWithSapOuterNode::Init(LbffDol3InputsWithGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 66, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[66] = {52446 /*ifd_pipe_1_4*/, 24678 /*ifd_pipe_long_1_4*/, 4386 /*ifd_pipe_short_smth_1_4*/, 54871 /*dol_lite_1_2*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 14488 /*rgb_ir_2_0*/, 38544 /*odr_awb_std_1_4*/, 53430 /*odr_awb_sve_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 26958 /*fr_grid_1_0*/, 59136 /*odr_af_std_1_4*/, 51073 /*ifd_gmv_1_4*/, 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 35263 /*ifd_segmap_bnlm_1_4*/, 54924 /*smurf_bnlm_1_0*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 9241 /*ifd_segmap_xnr_1_4*/, 42329 /*smurf_xnr_1_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 51914 /*ifd_segmap_acm_1_4*/, 28366 /*smurf_acm_1_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 2495 /*tnr7_spatial_1_1*/, 29996 /*tnr_scaler_lb_1_1*/, 23639 /*tnr7_ims_1_2*/, 40280 /*gmv_statistics_1_1*/, 7416 /*odr_gmv_feature_1_4*/, 41148 /*odr_gmv_match_1_4*/, 47873 /*ifd_segmap_tnr_bc_1_4*/, 13101 /*smurf_tnr_bc_1_0*/, 1502 /*tnr7_bc_1_2*/, 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, 14619 /*ifd_segmap_tnr_blend_1_4*/, 42749 /*smurf_tnr_blend_1_0*/, 20119 /*tnr7_blend_1_1*/, 5215 /*odr_tnr_fp_yuvn_1_4*/, 20623 /*tnr_scaler_fp_1_1*/, 28787 /*image_upscaler_1_1*/, 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/, 20893 /*ifd_segmap_cas_1_4*/, 37468 /*smurf_cas_1_0*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0xBF77D63187F8FF87, 0x3}; // { ifd_pipe_1_4[0], ifd_pipe_long_1_4[1], ifd_pipe_short_smth_1_4[2], rgbs_grid_1_1[7], ccm_3a_2_0[8], rgb_ir_2_0[9], odr_awb_std_1_4[10], odr_awb_sve_1_4[11], odr_awb_sat_1_4[12], aestatistics_2_1[13], odr_ae_1_4[14], ifd_lsc_1_4[15], fr_grid_1_0[19], odr_af_std_1_4[20], ifd_gmv_1_4[21], ifd_tnr_sp_bc_yuv4nm1_1_4[22], ifd_tnr_sp_bc_rs4nm1_1_4[23], ifd_tnr_fp_blend_yuvnm1_1_4[24], ifd_segmap_bnlm_1_4[25], smurf_bnlm_1_0[26], ifd_segmap_xnr_1_4[31], smurf_xnr_1_0[32], ifd_segmap_acm_1_4[36], smurf_acm_1_0[37], b2i_ds_1_1[41], lbff_crop_espa_1_4[42], tnr_scaler_lb_1_1[44], gmv_statistics_1_1[46], odr_gmv_feature_1_4[47], odr_gmv_match_1_4[48], ifd_segmap_tnr_bc_1_4[49], smurf_tnr_bc_1_0[50], odr_tnr_sp_bc_rs4n_1_4[52], ifd_segmap_tnr_blend_1_4[53], smurf_tnr_blend_1_0[54], odr_tnr_fp_yuvn_1_4[56], tnr_scaler_fp_1_1[57], image_upscaler_1_1[58], odr_tnr_scale_fp_yuv4n_1_4[59], ifd_segmap_cas_1_4[60], smurf_cas_1_0[61], odr_ofs_mp_1_4[63], b2i_ds_output_1_1[64], odr_ofs_dp_1_4[65] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x78EFEC738FF1FC0E, 0x2}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {ifd_pipe_short_smth_1_4}[2], {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2, rgbs_grid_1_1, ccm_3a_2_0, rgb_ir_2_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sve_1_4}[5], {odr_awb_sat_1_4}[6], {aestatistics_2_1}[7], {odr_ae_1_4}[8], {ifd_lsc_1_4}[9], {lsc_1_2, gd_2_2, wb_1_1, fr_grid_1_0}[10], {odr_af_std_1_4}[11], {ifd_gmv_1_4}[12], {ifd_tnr_sp_bc_yuv4nm1_1_4}[13], {ifd_tnr_sp_bc_rs4nm1_1_4}[14], {ifd_tnr_fp_blend_yuvnm1_1_4}[15], {ifd_segmap_bnlm_1_4}[16], {smurf_bnlm_1_0}[17], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[18], {ifd_segmap_xnr_1_4}[19], {smurf_xnr_1_0}[20], {xnr_5_4, vcr_3_1, glim_2_0}[21], {ifd_segmap_acm_1_4}[22], {smurf_acm_1_0}[23], {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[24], {lbff_crop_espa_1_4}[25], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[26], {tnr7_ims_1_2}[27], {gmv_statistics_1_1}[28], {odr_gmv_feature_1_4}[29], {odr_gmv_match_1_4}[30], {ifd_segmap_tnr_bc_1_4}[31], {smurf_tnr_bc_1_0}[32], {tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[33], {ifd_segmap_tnr_blend_1_4}[34], {smurf_tnr_blend_1_0}[35], {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[36], {odr_tnr_scale_fp_yuv4n_1_4}[37], {ifd_segmap_cas_1_4}[38], {smurf_cas_1_0}[39], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[40], {odr_ofs_dp_1_4}[41] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0xFFFFFE738FF9FF8F, 0x3}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {ifd_pipe_short_smth_1_4}[2], {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2}[3], {rgbs_grid_1_1}[4], {ccm_3a_2_0}[5], {rgb_ir_2_0}[6], {odr_awb_std_1_4}[7], {odr_awb_sve_1_4}[8], {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], {odr_ae_1_4}[11], {ifd_lsc_1_4}[12], {lsc_1_2, gd_2_2, wb_1_1}[13], {fr_grid_1_0}[14], {odr_af_std_1_4}[15], {ifd_gmv_1_4}[16], {ifd_tnr_sp_bc_yuv4nm1_1_4}[17], {ifd_tnr_sp_bc_rs4nm1_1_4}[18], {ifd_tnr_fp_blend_yuvnm1_1_4}[19], {ifd_segmap_bnlm_1_4}[20], {smurf_bnlm_1_0}[21], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[22], {ifd_segmap_xnr_1_4}[23], {smurf_xnr_1_0}[24], {xnr_5_4, vcr_3_1, glim_2_0}[25], {ifd_segmap_acm_1_4}[26], {smurf_acm_1_0}[27], {acm_1_2, gammatm_v4, csc_1_1}[28], {b2i_ds_1_1}[29], {lbff_crop_espa_1_4}[30], {tnr7_spatial_1_1}[31], {tnr_scaler_lb_1_1}[32], {tnr7_ims_1_2}[33], {gmv_statistics_1_1}[34], {odr_gmv_feature_1_4}[35], {odr_gmv_match_1_4}[36], {ifd_segmap_tnr_bc_1_4}[37], {smurf_tnr_bc_1_0}[38], {tnr7_bc_1_2}[39], {odr_tnr_sp_bc_rs4n_1_4}[40], {ifd_segmap_tnr_blend_1_4}[41], {smurf_tnr_blend_1_0}[42], {tnr7_blend_1_1}[43], {odr_tnr_fp_yuvn_1_4}[44], {tnr_scaler_fp_1_1}[45], {image_upscaler_1_1}[46], {odr_tnr_scale_fp_yuv4n_1_4}[47], {ifd_segmap_cas_1_4}[48], {smurf_cas_1_0}[49], {cas_1_1}[50], {odr_ofs_mp_1_4}[51], {b2i_ds_output_1_1}[52], {odr_ofs_dp_1_4}[53] } + uint8_t systemApisSizes[66] = {220 /*ifd_pipe_1_4*/, 220 /*ifd_pipe_long_1_4*/, 220 /*ifd_pipe_short_smth_1_4*/, 5 /*dol_lite_1_2*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 0 /*rgb_ir_2_0*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sve_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 20 /*fr_grid_1_0*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_gmv_1_4*/, 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 220 /*ifd_segmap_bnlm_1_4*/, 0 /*smurf_bnlm_1_0*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 220 /*ifd_segmap_xnr_1_4*/, 0 /*smurf_xnr_1_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 220 /*ifd_segmap_acm_1_4*/, 0 /*smurf_acm_1_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*tnr7_spatial_1_1*/, 0 /*tnr_scaler_lb_1_1*/, 0 /*tnr7_ims_1_2*/, 32 /*gmv_statistics_1_1*/, 220 /*odr_gmv_feature_1_4*/, 220 /*odr_gmv_match_1_4*/, 220 /*ifd_segmap_tnr_bc_1_4*/, 0 /*smurf_tnr_bc_1_0*/, 5 /*tnr7_bc_1_2*/, 220 /*odr_tnr_sp_bc_rs4n_1_4*/, 220 /*ifd_segmap_tnr_blend_1_4*/, 0 /*smurf_tnr_blend_1_0*/, 5 /*tnr7_blend_1_1*/, 220 /*odr_tnr_fp_yuvn_1_4*/, 0 /*tnr_scaler_fp_1_1*/, 0 /*image_upscaler_1_1*/, 220 /*odr_tnr_scale_fp_yuv4n_1_4*/, 220 /*ifd_segmap_cas_1_4*/, 0 /*smurf_cas_1_0*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/}; + uint16_t runKernelConfigOrder[66] = {0 /*ifd_pipe_1_4*/, 1 /*ifd_pipe_long_1_4*/, 2 /*ifd_pipe_short_smth_1_4*/, 3 /*dol_lite_1_2*/, 4 /*bxt_blc*/, 5 /*linearization2_0*/, 6 /*dpc_2_2*/, 9 /*rgb_ir_2_0*/, 7 /*rgbs_grid_1_1*/, 10 /*odr_awb_std_1_4*/, 11 /*odr_awb_sve_1_4*/, 12 /*odr_awb_sat_1_4*/, 8 /*ccm_3a_2_0*/, 13 /*aestatistics_2_1*/, 14 /*odr_ae_1_4*/, 15 /*ifd_lsc_1_4*/, 16 /*lsc_1_2*/, 17 /*gd_2_2*/, 18 /*wb_1_1*/, 27 /*bnlm_3_4*/, 28 /*bxt_demosaic*/, 29 /*vcsc_2_0_b*/, 30 /*gltm_2_0*/, 33 /*xnr_5_4*/, 34 /*vcr_3_1*/, 35 /*glim_2_0*/, 38 /*acm_1_2*/, 39 /*gammatm_v4*/, 40 /*csc_1_1*/, 41 /*b2i_ds_1_1*/, 42 /*lbff_crop_espa_1_4*/, 43 /*tnr7_spatial_1_1*/, 44 /*tnr_scaler_lb_1_1*/, 19 /*fr_grid_1_0*/, 20 /*odr_af_std_1_4*/, 21 /*ifd_gmv_1_4*/, 46 /*gmv_statistics_1_1*/, 47 /*odr_gmv_feature_1_4*/, 48 /*odr_gmv_match_1_4*/, 22 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 23 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 45 /*tnr7_ims_1_2*/, 51 /*tnr7_bc_1_2*/, 52 /*odr_tnr_sp_bc_rs4n_1_4*/, 24 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 55 /*tnr7_blend_1_1*/, 58 /*image_upscaler_1_1*/, 62 /*cas_1_1*/, 63 /*odr_ofs_mp_1_4*/, 64 /*b2i_ds_output_1_1*/, 65 /*odr_ofs_dp_1_4*/, 56 /*odr_tnr_fp_yuvn_1_4*/, 57 /*tnr_scaler_fp_1_1*/, 59 /*odr_tnr_scale_fp_yuv4n_1_4*/, 25 /*ifd_segmap_bnlm_1_4*/, 31 /*ifd_segmap_xnr_1_4*/, 36 /*ifd_segmap_acm_1_4*/, 49 /*ifd_segmap_tnr_bc_1_4*/, 53 /*ifd_segmap_tnr_blend_1_4*/, 60 /*ifd_segmap_cas_1_4*/, 26 /*smurf_bnlm_1_0*/, 32 /*smurf_xnr_1_0*/, 37 /*smurf_acm_1_0*/, 50 /*smurf_tnr_bc_1_0*/, 54 /*smurf_tnr_blend_1_0*/, 61 /*smurf_cas_1_0*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[27].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffRgbIrNoGmvNoTnrWithSapOuterNode::Init(LbffRgbIrNoGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 44, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[44] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 15021 /*rgbs_grid_1_1*/, 14488 /*rgb_ir_2_0*/, 60297 /*odr_ir_1_4*/, 38544 /*odr_awb_std_1_4*/, 53430 /*odr_awb_sve_1_4*/, 1248 /*odr_awb_sat_1_4*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 35263 /*ifd_segmap_bnlm_1_4*/, 54924 /*smurf_bnlm_1_0*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 9241 /*ifd_segmap_xnr_1_4*/, 42329 /*smurf_xnr_1_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 51914 /*ifd_segmap_acm_1_4*/, 28366 /*smurf_acm_1_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 28787 /*image_upscaler_1_1*/, 20893 /*ifd_segmap_cas_1_4*/, 37468 /*smurf_cas_1_0*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0xEF8C61FC7F1, 0x0}; // { ifd_pipe_1_4[0], rgbs_grid_1_1[4], rgb_ir_2_0[5], odr_ir_1_4[6], odr_awb_std_1_4[7], odr_awb_sve_1_4[8], odr_awb_sat_1_4[9], ifd_lsc_1_4[10], ccm_3a_2_0[14], fr_grid_1_0[15], aestatistics_2_1[16], odr_ae_1_4[17], odr_af_std_1_4[18], ifd_segmap_bnlm_1_4[19], smurf_bnlm_1_0[20], ifd_segmap_xnr_1_4[25], smurf_xnr_1_0[26], ifd_segmap_acm_1_4[30], smurf_acm_1_0[31], b2i_ds_1_1[35], lbff_crop_espa_1_4[36], image_upscaler_1_1[37], ifd_segmap_cas_1_4[38], smurf_cas_1_0[39], odr_ofs_mp_1_4[41], b2i_ds_output_1_1[42], odr_ofs_dp_1_4[43] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x9F1CE3F0FC2, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgbs_grid_1_1, rgb_ir_2_0}[1], {odr_ir_1_4}[2], {odr_awb_std_1_4}[3], {odr_awb_sve_1_4}[4], {odr_awb_sat_1_4}[5], {ifd_lsc_1_4}[6], {lsc_1_2, gd_2_2, wb_1_1, ccm_3a_2_0, fr_grid_1_0}[7], {aestatistics_2_1}[8], {odr_ae_1_4}[9], {odr_af_std_1_4}[10], {ifd_segmap_bnlm_1_4}[11], {smurf_bnlm_1_0}[12], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[13], {ifd_segmap_xnr_1_4}[14], {smurf_xnr_1_0}[15], {xnr_5_4, vcr_3_1, glim_2_0}[16], {ifd_segmap_acm_1_4}[17], {smurf_acm_1_0}[18], {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[19], {lbff_crop_espa_1_4}[20], {image_upscaler_1_1}[21], {ifd_segmap_cas_1_4}[22], {smurf_cas_1_0}[23], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[24], {odr_ofs_dp_1_4}[25] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0xFF9CE3FCFF3, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgbs_grid_1_1}[2], {rgb_ir_2_0}[3], {odr_ir_1_4}[4], {odr_awb_std_1_4}[5], {odr_awb_sve_1_4}[6], {odr_awb_sat_1_4}[7], {ifd_lsc_1_4}[8], {lsc_1_2, gd_2_2, wb_1_1}[9], {ccm_3a_2_0}[10], {fr_grid_1_0}[11], {aestatistics_2_1}[12], {odr_ae_1_4}[13], {odr_af_std_1_4}[14], {ifd_segmap_bnlm_1_4}[15], {smurf_bnlm_1_0}[16], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[17], {ifd_segmap_xnr_1_4}[18], {smurf_xnr_1_0}[19], {xnr_5_4, vcr_3_1, glim_2_0}[20], {ifd_segmap_acm_1_4}[21], {smurf_acm_1_0}[22], {acm_1_2, gammatm_v4, csc_1_1}[23], {b2i_ds_1_1}[24], {lbff_crop_espa_1_4}[25], {image_upscaler_1_1}[26], {ifd_segmap_cas_1_4}[27], {smurf_cas_1_0}[28], {cas_1_1}[29], {odr_ofs_mp_1_4}[30], {b2i_ds_output_1_1}[31], {odr_ofs_dp_1_4}[32] } + uint8_t systemApisSizes[44] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 24 /*rgbs_grid_1_1*/, 0 /*rgb_ir_2_0*/, 220 /*odr_ir_1_4*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sve_1_4*/, 220 /*odr_awb_sat_1_4*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_segmap_bnlm_1_4*/, 0 /*smurf_bnlm_1_0*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 220 /*ifd_segmap_xnr_1_4*/, 0 /*smurf_xnr_1_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 220 /*ifd_segmap_acm_1_4*/, 0 /*smurf_acm_1_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*image_upscaler_1_1*/, 220 /*ifd_segmap_cas_1_4*/, 0 /*smurf_cas_1_0*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/}; + uint16_t runKernelConfigOrder[44] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 5 /*rgb_ir_2_0*/, 6 /*odr_ir_1_4*/, 4 /*rgbs_grid_1_1*/, 7 /*odr_awb_std_1_4*/, 8 /*odr_awb_sve_1_4*/, 9 /*odr_awb_sat_1_4*/, 10 /*ifd_lsc_1_4*/, 11 /*lsc_1_2*/, 12 /*gd_2_2*/, 13 /*wb_1_1*/, 21 /*bnlm_3_4*/, 22 /*bxt_demosaic*/, 23 /*vcsc_2_0_b*/, 24 /*gltm_2_0*/, 27 /*xnr_5_4*/, 28 /*vcr_3_1*/, 29 /*glim_2_0*/, 32 /*acm_1_2*/, 33 /*gammatm_v4*/, 34 /*csc_1_1*/, 35 /*b2i_ds_1_1*/, 36 /*lbff_crop_espa_1_4*/, 37 /*image_upscaler_1_1*/, 40 /*cas_1_1*/, 41 /*odr_ofs_mp_1_4*/, 42 /*b2i_ds_output_1_1*/, 43 /*odr_ofs_dp_1_4*/, 14 /*ccm_3a_2_0*/, 16 /*aestatistics_2_1*/, 17 /*odr_ae_1_4*/, 15 /*fr_grid_1_0*/, 18 /*odr_af_std_1_4*/, 19 /*ifd_segmap_bnlm_1_4*/, 25 /*ifd_segmap_xnr_1_4*/, 30 /*ifd_segmap_acm_1_4*/, 38 /*ifd_segmap_cas_1_4*/, 20 /*smurf_bnlm_1_0*/, 26 /*smurf_xnr_1_0*/, 31 /*smurf_acm_1_0*/, 39 /*smurf_cas_1_0*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[21].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffRgbIrWithGmvNoTnrWithSapOuterNode::Init(LbffRgbIrWithGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 48, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[48] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 15021 /*rgbs_grid_1_1*/, 14488 /*rgb_ir_2_0*/, 60297 /*odr_ir_1_4*/, 38544 /*odr_awb_std_1_4*/, 53430 /*odr_awb_sve_1_4*/, 1248 /*odr_awb_sat_1_4*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 51073 /*ifd_gmv_1_4*/, 35263 /*ifd_segmap_bnlm_1_4*/, 54924 /*smurf_bnlm_1_0*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 9241 /*ifd_segmap_xnr_1_4*/, 42329 /*smurf_xnr_1_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 51914 /*ifd_segmap_acm_1_4*/, 28366 /*smurf_acm_1_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 28787 /*image_upscaler_1_1*/, 40280 /*gmv_statistics_1_1*/, 7416 /*odr_gmv_feature_1_4*/, 41148 /*odr_gmv_match_1_4*/, 20893 /*ifd_segmap_cas_1_4*/, 37468 /*smurf_cas_1_0*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0xEFF18C3FC7F1, 0x0}; // { ifd_pipe_1_4[0], rgbs_grid_1_1[4], rgb_ir_2_0[5], odr_ir_1_4[6], odr_awb_std_1_4[7], odr_awb_sve_1_4[8], odr_awb_sat_1_4[9], ifd_lsc_1_4[10], ccm_3a_2_0[14], fr_grid_1_0[15], aestatistics_2_1[16], odr_ae_1_4[17], odr_af_std_1_4[18], ifd_gmv_1_4[19], ifd_segmap_bnlm_1_4[20], smurf_bnlm_1_0[21], ifd_segmap_xnr_1_4[26], smurf_xnr_1_0[27], ifd_segmap_acm_1_4[31], smurf_acm_1_0[32], b2i_ds_1_1[36], lbff_crop_espa_1_4[37], image_upscaler_1_1[38], gmv_statistics_1_1[39], odr_gmv_feature_1_4[40], odr_gmv_match_1_4[41], ifd_segmap_cas_1_4[42], smurf_cas_1_0[43], odr_ofs_mp_1_4[45], b2i_ds_output_1_1[46], odr_ofs_dp_1_4[47] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x9FE39C7F0FC2, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgbs_grid_1_1, rgb_ir_2_0}[1], {odr_ir_1_4}[2], {odr_awb_std_1_4}[3], {odr_awb_sve_1_4}[4], {odr_awb_sat_1_4}[5], {ifd_lsc_1_4}[6], {lsc_1_2, gd_2_2, wb_1_1, ccm_3a_2_0, fr_grid_1_0}[7], {aestatistics_2_1}[8], {odr_ae_1_4}[9], {odr_af_std_1_4}[10], {ifd_gmv_1_4}[11], {ifd_segmap_bnlm_1_4}[12], {smurf_bnlm_1_0}[13], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[14], {ifd_segmap_xnr_1_4}[15], {smurf_xnr_1_0}[16], {xnr_5_4, vcr_3_1, glim_2_0}[17], {ifd_segmap_acm_1_4}[18], {smurf_acm_1_0}[19], {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[20], {lbff_crop_espa_1_4}[21], {image_upscaler_1_1}[22], {gmv_statistics_1_1}[23], {odr_gmv_feature_1_4}[24], {odr_gmv_match_1_4}[25], {ifd_segmap_cas_1_4}[26], {smurf_cas_1_0}[27], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[28], {odr_ofs_dp_1_4}[29] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0xFFF39C7FCFF3, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgbs_grid_1_1}[2], {rgb_ir_2_0}[3], {odr_ir_1_4}[4], {odr_awb_std_1_4}[5], {odr_awb_sve_1_4}[6], {odr_awb_sat_1_4}[7], {ifd_lsc_1_4}[8], {lsc_1_2, gd_2_2, wb_1_1}[9], {ccm_3a_2_0}[10], {fr_grid_1_0}[11], {aestatistics_2_1}[12], {odr_ae_1_4}[13], {odr_af_std_1_4}[14], {ifd_gmv_1_4}[15], {ifd_segmap_bnlm_1_4}[16], {smurf_bnlm_1_0}[17], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[18], {ifd_segmap_xnr_1_4}[19], {smurf_xnr_1_0}[20], {xnr_5_4, vcr_3_1, glim_2_0}[21], {ifd_segmap_acm_1_4}[22], {smurf_acm_1_0}[23], {acm_1_2, gammatm_v4, csc_1_1}[24], {b2i_ds_1_1}[25], {lbff_crop_espa_1_4}[26], {image_upscaler_1_1}[27], {gmv_statistics_1_1}[28], {odr_gmv_feature_1_4}[29], {odr_gmv_match_1_4}[30], {ifd_segmap_cas_1_4}[31], {smurf_cas_1_0}[32], {cas_1_1}[33], {odr_ofs_mp_1_4}[34], {b2i_ds_output_1_1}[35], {odr_ofs_dp_1_4}[36] } + uint8_t systemApisSizes[48] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 24 /*rgbs_grid_1_1*/, 0 /*rgb_ir_2_0*/, 220 /*odr_ir_1_4*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sve_1_4*/, 220 /*odr_awb_sat_1_4*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_gmv_1_4*/, 220 /*ifd_segmap_bnlm_1_4*/, 0 /*smurf_bnlm_1_0*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 220 /*ifd_segmap_xnr_1_4*/, 0 /*smurf_xnr_1_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 220 /*ifd_segmap_acm_1_4*/, 0 /*smurf_acm_1_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*image_upscaler_1_1*/, 32 /*gmv_statistics_1_1*/, 220 /*odr_gmv_feature_1_4*/, 220 /*odr_gmv_match_1_4*/, 220 /*ifd_segmap_cas_1_4*/, 0 /*smurf_cas_1_0*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/}; + uint16_t runKernelConfigOrder[48] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 5 /*rgb_ir_2_0*/, 6 /*odr_ir_1_4*/, 4 /*rgbs_grid_1_1*/, 7 /*odr_awb_std_1_4*/, 8 /*odr_awb_sve_1_4*/, 9 /*odr_awb_sat_1_4*/, 10 /*ifd_lsc_1_4*/, 11 /*lsc_1_2*/, 12 /*gd_2_2*/, 13 /*wb_1_1*/, 22 /*bnlm_3_4*/, 23 /*bxt_demosaic*/, 24 /*vcsc_2_0_b*/, 25 /*gltm_2_0*/, 28 /*xnr_5_4*/, 29 /*vcr_3_1*/, 30 /*glim_2_0*/, 33 /*acm_1_2*/, 34 /*gammatm_v4*/, 35 /*csc_1_1*/, 36 /*b2i_ds_1_1*/, 37 /*lbff_crop_espa_1_4*/, 38 /*image_upscaler_1_1*/, 44 /*cas_1_1*/, 45 /*odr_ofs_mp_1_4*/, 46 /*b2i_ds_output_1_1*/, 47 /*odr_ofs_dp_1_4*/, 14 /*ccm_3a_2_0*/, 16 /*aestatistics_2_1*/, 17 /*odr_ae_1_4*/, 15 /*fr_grid_1_0*/, 18 /*odr_af_std_1_4*/, 19 /*ifd_gmv_1_4*/, 39 /*gmv_statistics_1_1*/, 40 /*odr_gmv_feature_1_4*/, 41 /*odr_gmv_match_1_4*/, 20 /*ifd_segmap_bnlm_1_4*/, 26 /*ifd_segmap_xnr_1_4*/, 31 /*ifd_segmap_acm_1_4*/, 42 /*ifd_segmap_cas_1_4*/, 21 /*smurf_bnlm_1_0*/, 27 /*smurf_xnr_1_0*/, 32 /*smurf_acm_1_0*/, 43 /*smurf_cas_1_0*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[22].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffRgbIrNoGmvWithTnrWithSapOuterNode::Init(LbffRgbIrNoGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 60, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[60] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 15021 /*rgbs_grid_1_1*/, 14488 /*rgb_ir_2_0*/, 60297 /*odr_ir_1_4*/, 38544 /*odr_awb_std_1_4*/, 53430 /*odr_awb_sve_1_4*/, 1248 /*odr_awb_sat_1_4*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 35263 /*ifd_segmap_bnlm_1_4*/, 54924 /*smurf_bnlm_1_0*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 9241 /*ifd_segmap_xnr_1_4*/, 42329 /*smurf_xnr_1_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 51914 /*ifd_segmap_acm_1_4*/, 28366 /*smurf_acm_1_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 2495 /*tnr7_spatial_1_1*/, 29996 /*tnr_scaler_lb_1_1*/, 23639 /*tnr7_ims_1_2*/, 47873 /*ifd_segmap_tnr_bc_1_4*/, 13101 /*smurf_tnr_bc_1_0*/, 1502 /*tnr7_bc_1_2*/, 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, 14619 /*ifd_segmap_tnr_blend_1_4*/, 42749 /*smurf_tnr_blend_1_0*/, 20119 /*tnr7_blend_1_1*/, 5215 /*odr_tnr_fp_yuvn_1_4*/, 20623 /*tnr_scaler_fp_1_1*/, 28787 /*image_upscaler_1_1*/, 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/, 20893 /*ifd_segmap_cas_1_4*/, 37468 /*smurf_cas_1_0*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0xEFDDAC630FFC7F1, 0x0}; // { ifd_pipe_1_4[0], rgbs_grid_1_1[4], rgb_ir_2_0[5], odr_ir_1_4[6], odr_awb_std_1_4[7], odr_awb_sve_1_4[8], odr_awb_sat_1_4[9], ifd_lsc_1_4[10], ccm_3a_2_0[14], fr_grid_1_0[15], aestatistics_2_1[16], odr_ae_1_4[17], odr_af_std_1_4[18], ifd_tnr_sp_bc_yuv4nm1_1_4[19], ifd_tnr_sp_bc_rs4nm1_1_4[20], ifd_tnr_fp_blend_yuvnm1_1_4[21], ifd_segmap_bnlm_1_4[22], smurf_bnlm_1_0[23], ifd_segmap_xnr_1_4[28], smurf_xnr_1_0[29], ifd_segmap_acm_1_4[33], smurf_acm_1_0[34], b2i_ds_1_1[38], lbff_crop_espa_1_4[39], tnr_scaler_lb_1_1[41], ifd_segmap_tnr_bc_1_4[43], smurf_tnr_bc_1_0[44], odr_tnr_sp_bc_rs4n_1_4[46], ifd_segmap_tnr_blend_1_4[47], smurf_tnr_blend_1_0[48], odr_tnr_fp_yuvn_1_4[50], tnr_scaler_fp_1_1[51], image_upscaler_1_1[52], odr_tnr_scale_fp_yuv4n_1_4[53], ifd_segmap_cas_1_4[54], smurf_cas_1_0[55], odr_ofs_mp_1_4[57], b2i_ds_output_1_1[58], odr_ofs_dp_1_4[59] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x9E3BD8E71FF0FC2, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgbs_grid_1_1, rgb_ir_2_0}[1], {odr_ir_1_4}[2], {odr_awb_std_1_4}[3], {odr_awb_sve_1_4}[4], {odr_awb_sat_1_4}[5], {ifd_lsc_1_4}[6], {lsc_1_2, gd_2_2, wb_1_1, ccm_3a_2_0, fr_grid_1_0}[7], {aestatistics_2_1}[8], {odr_ae_1_4}[9], {odr_af_std_1_4}[10], {ifd_tnr_sp_bc_yuv4nm1_1_4}[11], {ifd_tnr_sp_bc_rs4nm1_1_4}[12], {ifd_tnr_fp_blend_yuvnm1_1_4}[13], {ifd_segmap_bnlm_1_4}[14], {smurf_bnlm_1_0}[15], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[16], {ifd_segmap_xnr_1_4}[17], {smurf_xnr_1_0}[18], {xnr_5_4, vcr_3_1, glim_2_0}[19], {ifd_segmap_acm_1_4}[20], {smurf_acm_1_0}[21], {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[22], {lbff_crop_espa_1_4}[23], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[24], {tnr7_ims_1_2}[25], {ifd_segmap_tnr_bc_1_4}[26], {smurf_tnr_bc_1_0}[27], {tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[28], {ifd_segmap_tnr_blend_1_4}[29], {smurf_tnr_blend_1_0}[30], {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[31], {odr_tnr_scale_fp_yuv4n_1_4}[32], {ifd_segmap_cas_1_4}[33], {smurf_cas_1_0}[34], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[35], {odr_ofs_dp_1_4}[36] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0xFFFFFCE71FFCFF3, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgbs_grid_1_1}[2], {rgb_ir_2_0}[3], {odr_ir_1_4}[4], {odr_awb_std_1_4}[5], {odr_awb_sve_1_4}[6], {odr_awb_sat_1_4}[7], {ifd_lsc_1_4}[8], {lsc_1_2, gd_2_2, wb_1_1}[9], {ccm_3a_2_0}[10], {fr_grid_1_0}[11], {aestatistics_2_1}[12], {odr_ae_1_4}[13], {odr_af_std_1_4}[14], {ifd_tnr_sp_bc_yuv4nm1_1_4}[15], {ifd_tnr_sp_bc_rs4nm1_1_4}[16], {ifd_tnr_fp_blend_yuvnm1_1_4}[17], {ifd_segmap_bnlm_1_4}[18], {smurf_bnlm_1_0}[19], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[20], {ifd_segmap_xnr_1_4}[21], {smurf_xnr_1_0}[22], {xnr_5_4, vcr_3_1, glim_2_0}[23], {ifd_segmap_acm_1_4}[24], {smurf_acm_1_0}[25], {acm_1_2, gammatm_v4, csc_1_1}[26], {b2i_ds_1_1}[27], {lbff_crop_espa_1_4}[28], {tnr7_spatial_1_1}[29], {tnr_scaler_lb_1_1}[30], {tnr7_ims_1_2}[31], {ifd_segmap_tnr_bc_1_4}[32], {smurf_tnr_bc_1_0}[33], {tnr7_bc_1_2}[34], {odr_tnr_sp_bc_rs4n_1_4}[35], {ifd_segmap_tnr_blend_1_4}[36], {smurf_tnr_blend_1_0}[37], {tnr7_blend_1_1}[38], {odr_tnr_fp_yuvn_1_4}[39], {tnr_scaler_fp_1_1}[40], {image_upscaler_1_1}[41], {odr_tnr_scale_fp_yuv4n_1_4}[42], {ifd_segmap_cas_1_4}[43], {smurf_cas_1_0}[44], {cas_1_1}[45], {odr_ofs_mp_1_4}[46], {b2i_ds_output_1_1}[47], {odr_ofs_dp_1_4}[48] } + uint8_t systemApisSizes[60] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 24 /*rgbs_grid_1_1*/, 0 /*rgb_ir_2_0*/, 220 /*odr_ir_1_4*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sve_1_4*/, 220 /*odr_awb_sat_1_4*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 220 /*ifd_segmap_bnlm_1_4*/, 0 /*smurf_bnlm_1_0*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 220 /*ifd_segmap_xnr_1_4*/, 0 /*smurf_xnr_1_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 220 /*ifd_segmap_acm_1_4*/, 0 /*smurf_acm_1_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*tnr7_spatial_1_1*/, 0 /*tnr_scaler_lb_1_1*/, 0 /*tnr7_ims_1_2*/, 220 /*ifd_segmap_tnr_bc_1_4*/, 0 /*smurf_tnr_bc_1_0*/, 5 /*tnr7_bc_1_2*/, 220 /*odr_tnr_sp_bc_rs4n_1_4*/, 220 /*ifd_segmap_tnr_blend_1_4*/, 0 /*smurf_tnr_blend_1_0*/, 5 /*tnr7_blend_1_1*/, 220 /*odr_tnr_fp_yuvn_1_4*/, 0 /*tnr_scaler_fp_1_1*/, 0 /*image_upscaler_1_1*/, 220 /*odr_tnr_scale_fp_yuv4n_1_4*/, 220 /*ifd_segmap_cas_1_4*/, 0 /*smurf_cas_1_0*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/}; + uint16_t runKernelConfigOrder[60] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 5 /*rgb_ir_2_0*/, 6 /*odr_ir_1_4*/, 4 /*rgbs_grid_1_1*/, 7 /*odr_awb_std_1_4*/, 8 /*odr_awb_sve_1_4*/, 9 /*odr_awb_sat_1_4*/, 10 /*ifd_lsc_1_4*/, 11 /*lsc_1_2*/, 12 /*gd_2_2*/, 13 /*wb_1_1*/, 24 /*bnlm_3_4*/, 25 /*bxt_demosaic*/, 26 /*vcsc_2_0_b*/, 27 /*gltm_2_0*/, 30 /*xnr_5_4*/, 31 /*vcr_3_1*/, 32 /*glim_2_0*/, 35 /*acm_1_2*/, 36 /*gammatm_v4*/, 37 /*csc_1_1*/, 38 /*b2i_ds_1_1*/, 39 /*lbff_crop_espa_1_4*/, 40 /*tnr7_spatial_1_1*/, 41 /*tnr_scaler_lb_1_1*/, 14 /*ccm_3a_2_0*/, 16 /*aestatistics_2_1*/, 17 /*odr_ae_1_4*/, 15 /*fr_grid_1_0*/, 18 /*odr_af_std_1_4*/, 19 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 20 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 42 /*tnr7_ims_1_2*/, 45 /*tnr7_bc_1_2*/, 46 /*odr_tnr_sp_bc_rs4n_1_4*/, 21 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 49 /*tnr7_blend_1_1*/, 52 /*image_upscaler_1_1*/, 56 /*cas_1_1*/, 57 /*odr_ofs_mp_1_4*/, 58 /*b2i_ds_output_1_1*/, 59 /*odr_ofs_dp_1_4*/, 50 /*odr_tnr_fp_yuvn_1_4*/, 51 /*tnr_scaler_fp_1_1*/, 53 /*odr_tnr_scale_fp_yuv4n_1_4*/, 22 /*ifd_segmap_bnlm_1_4*/, 28 /*ifd_segmap_xnr_1_4*/, 33 /*ifd_segmap_acm_1_4*/, 43 /*ifd_segmap_tnr_bc_1_4*/, 47 /*ifd_segmap_tnr_blend_1_4*/, 54 /*ifd_segmap_cas_1_4*/, 23 /*smurf_bnlm_1_0*/, 29 /*smurf_xnr_1_0*/, 34 /*smurf_acm_1_0*/, 44 /*smurf_tnr_bc_1_0*/, 48 /*smurf_tnr_blend_1_0*/, 55 /*smurf_cas_1_0*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[24].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffRgbIrWithGmvWithTnrWithSapOuterNode::Init(LbffRgbIrWithGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 64, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[64] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 15021 /*rgbs_grid_1_1*/, 14488 /*rgb_ir_2_0*/, 60297 /*odr_ir_1_4*/, 38544 /*odr_awb_std_1_4*/, 53430 /*odr_awb_sve_1_4*/, 1248 /*odr_awb_sat_1_4*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 51073 /*ifd_gmv_1_4*/, 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 35263 /*ifd_segmap_bnlm_1_4*/, 54924 /*smurf_bnlm_1_0*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 9241 /*ifd_segmap_xnr_1_4*/, 42329 /*smurf_xnr_1_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 51914 /*ifd_segmap_acm_1_4*/, 28366 /*smurf_acm_1_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 2495 /*tnr7_spatial_1_1*/, 29996 /*tnr_scaler_lb_1_1*/, 23639 /*tnr7_ims_1_2*/, 40280 /*gmv_statistics_1_1*/, 7416 /*odr_gmv_feature_1_4*/, 41148 /*odr_gmv_match_1_4*/, 47873 /*ifd_segmap_tnr_bc_1_4*/, 13101 /*smurf_tnr_bc_1_0*/, 1502 /*tnr7_bc_1_2*/, 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, 14619 /*ifd_segmap_tnr_blend_1_4*/, 42749 /*smurf_tnr_blend_1_0*/, 20119 /*tnr7_blend_1_1*/, 5215 /*odr_tnr_fp_yuvn_1_4*/, 20623 /*tnr_scaler_fp_1_1*/, 28787 /*image_upscaler_1_1*/, 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/, 20893 /*ifd_segmap_cas_1_4*/, 37468 /*smurf_cas_1_0*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0xEFDDF58C61FFC7F1, 0x0}; // { ifd_pipe_1_4[0], rgbs_grid_1_1[4], rgb_ir_2_0[5], odr_ir_1_4[6], odr_awb_std_1_4[7], odr_awb_sve_1_4[8], odr_awb_sat_1_4[9], ifd_lsc_1_4[10], ccm_3a_2_0[14], fr_grid_1_0[15], aestatistics_2_1[16], odr_ae_1_4[17], odr_af_std_1_4[18], ifd_gmv_1_4[19], ifd_tnr_sp_bc_yuv4nm1_1_4[20], ifd_tnr_sp_bc_rs4nm1_1_4[21], ifd_tnr_fp_blend_yuvnm1_1_4[22], ifd_segmap_bnlm_1_4[23], smurf_bnlm_1_0[24], ifd_segmap_xnr_1_4[29], smurf_xnr_1_0[30], ifd_segmap_acm_1_4[34], smurf_acm_1_0[35], b2i_ds_1_1[39], lbff_crop_espa_1_4[40], tnr_scaler_lb_1_1[42], gmv_statistics_1_1[44], odr_gmv_feature_1_4[45], odr_gmv_match_1_4[46], ifd_segmap_tnr_bc_1_4[47], smurf_tnr_bc_1_0[48], odr_tnr_sp_bc_rs4n_1_4[50], ifd_segmap_tnr_blend_1_4[51], smurf_tnr_blend_1_0[52], odr_tnr_fp_yuvn_1_4[54], tnr_scaler_fp_1_1[55], image_upscaler_1_1[56], odr_tnr_scale_fp_yuv4n_1_4[57], ifd_segmap_cas_1_4[58], smurf_cas_1_0[59], odr_ofs_mp_1_4[61], b2i_ds_output_1_1[62], odr_ofs_dp_1_4[63] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x9E3BFB1CE3FF0FC2, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgbs_grid_1_1, rgb_ir_2_0}[1], {odr_ir_1_4}[2], {odr_awb_std_1_4}[3], {odr_awb_sve_1_4}[4], {odr_awb_sat_1_4}[5], {ifd_lsc_1_4}[6], {lsc_1_2, gd_2_2, wb_1_1, ccm_3a_2_0, fr_grid_1_0}[7], {aestatistics_2_1}[8], {odr_ae_1_4}[9], {odr_af_std_1_4}[10], {ifd_gmv_1_4}[11], {ifd_tnr_sp_bc_yuv4nm1_1_4}[12], {ifd_tnr_sp_bc_rs4nm1_1_4}[13], {ifd_tnr_fp_blend_yuvnm1_1_4}[14], {ifd_segmap_bnlm_1_4}[15], {smurf_bnlm_1_0}[16], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[17], {ifd_segmap_xnr_1_4}[18], {smurf_xnr_1_0}[19], {xnr_5_4, vcr_3_1, glim_2_0}[20], {ifd_segmap_acm_1_4}[21], {smurf_acm_1_0}[22], {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[23], {lbff_crop_espa_1_4}[24], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[25], {tnr7_ims_1_2}[26], {gmv_statistics_1_1}[27], {odr_gmv_feature_1_4}[28], {odr_gmv_match_1_4}[29], {ifd_segmap_tnr_bc_1_4}[30], {smurf_tnr_bc_1_0}[31], {tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[32], {ifd_segmap_tnr_blend_1_4}[33], {smurf_tnr_blend_1_0}[34], {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[35], {odr_tnr_scale_fp_yuv4n_1_4}[36], {ifd_segmap_cas_1_4}[37], {smurf_cas_1_0}[38], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[39], {odr_ofs_dp_1_4}[40] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0xFFFFFF9CE3FFCFF3, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgbs_grid_1_1}[2], {rgb_ir_2_0}[3], {odr_ir_1_4}[4], {odr_awb_std_1_4}[5], {odr_awb_sve_1_4}[6], {odr_awb_sat_1_4}[7], {ifd_lsc_1_4}[8], {lsc_1_2, gd_2_2, wb_1_1}[9], {ccm_3a_2_0}[10], {fr_grid_1_0}[11], {aestatistics_2_1}[12], {odr_ae_1_4}[13], {odr_af_std_1_4}[14], {ifd_gmv_1_4}[15], {ifd_tnr_sp_bc_yuv4nm1_1_4}[16], {ifd_tnr_sp_bc_rs4nm1_1_4}[17], {ifd_tnr_fp_blend_yuvnm1_1_4}[18], {ifd_segmap_bnlm_1_4}[19], {smurf_bnlm_1_0}[20], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[21], {ifd_segmap_xnr_1_4}[22], {smurf_xnr_1_0}[23], {xnr_5_4, vcr_3_1, glim_2_0}[24], {ifd_segmap_acm_1_4}[25], {smurf_acm_1_0}[26], {acm_1_2, gammatm_v4, csc_1_1}[27], {b2i_ds_1_1}[28], {lbff_crop_espa_1_4}[29], {tnr7_spatial_1_1}[30], {tnr_scaler_lb_1_1}[31], {tnr7_ims_1_2}[32], {gmv_statistics_1_1}[33], {odr_gmv_feature_1_4}[34], {odr_gmv_match_1_4}[35], {ifd_segmap_tnr_bc_1_4}[36], {smurf_tnr_bc_1_0}[37], {tnr7_bc_1_2}[38], {odr_tnr_sp_bc_rs4n_1_4}[39], {ifd_segmap_tnr_blend_1_4}[40], {smurf_tnr_blend_1_0}[41], {tnr7_blend_1_1}[42], {odr_tnr_fp_yuvn_1_4}[43], {tnr_scaler_fp_1_1}[44], {image_upscaler_1_1}[45], {odr_tnr_scale_fp_yuv4n_1_4}[46], {ifd_segmap_cas_1_4}[47], {smurf_cas_1_0}[48], {cas_1_1}[49], {odr_ofs_mp_1_4}[50], {b2i_ds_output_1_1}[51], {odr_ofs_dp_1_4}[52] } + uint8_t systemApisSizes[64] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 24 /*rgbs_grid_1_1*/, 0 /*rgb_ir_2_0*/, 220 /*odr_ir_1_4*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sve_1_4*/, 220 /*odr_awb_sat_1_4*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_gmv_1_4*/, 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 220 /*ifd_segmap_bnlm_1_4*/, 0 /*smurf_bnlm_1_0*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 220 /*ifd_segmap_xnr_1_4*/, 0 /*smurf_xnr_1_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 220 /*ifd_segmap_acm_1_4*/, 0 /*smurf_acm_1_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*tnr7_spatial_1_1*/, 0 /*tnr_scaler_lb_1_1*/, 0 /*tnr7_ims_1_2*/, 32 /*gmv_statistics_1_1*/, 220 /*odr_gmv_feature_1_4*/, 220 /*odr_gmv_match_1_4*/, 220 /*ifd_segmap_tnr_bc_1_4*/, 0 /*smurf_tnr_bc_1_0*/, 5 /*tnr7_bc_1_2*/, 220 /*odr_tnr_sp_bc_rs4n_1_4*/, 220 /*ifd_segmap_tnr_blend_1_4*/, 0 /*smurf_tnr_blend_1_0*/, 5 /*tnr7_blend_1_1*/, 220 /*odr_tnr_fp_yuvn_1_4*/, 0 /*tnr_scaler_fp_1_1*/, 0 /*image_upscaler_1_1*/, 220 /*odr_tnr_scale_fp_yuv4n_1_4*/, 220 /*ifd_segmap_cas_1_4*/, 0 /*smurf_cas_1_0*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/}; + uint16_t runKernelConfigOrder[64] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 5 /*rgb_ir_2_0*/, 6 /*odr_ir_1_4*/, 4 /*rgbs_grid_1_1*/, 7 /*odr_awb_std_1_4*/, 8 /*odr_awb_sve_1_4*/, 9 /*odr_awb_sat_1_4*/, 10 /*ifd_lsc_1_4*/, 11 /*lsc_1_2*/, 12 /*gd_2_2*/, 13 /*wb_1_1*/, 25 /*bnlm_3_4*/, 26 /*bxt_demosaic*/, 27 /*vcsc_2_0_b*/, 28 /*gltm_2_0*/, 31 /*xnr_5_4*/, 32 /*vcr_3_1*/, 33 /*glim_2_0*/, 36 /*acm_1_2*/, 37 /*gammatm_v4*/, 38 /*csc_1_1*/, 39 /*b2i_ds_1_1*/, 40 /*lbff_crop_espa_1_4*/, 41 /*tnr7_spatial_1_1*/, 42 /*tnr_scaler_lb_1_1*/, 14 /*ccm_3a_2_0*/, 16 /*aestatistics_2_1*/, 17 /*odr_ae_1_4*/, 15 /*fr_grid_1_0*/, 18 /*odr_af_std_1_4*/, 19 /*ifd_gmv_1_4*/, 44 /*gmv_statistics_1_1*/, 45 /*odr_gmv_feature_1_4*/, 46 /*odr_gmv_match_1_4*/, 20 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 21 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 43 /*tnr7_ims_1_2*/, 49 /*tnr7_bc_1_2*/, 50 /*odr_tnr_sp_bc_rs4n_1_4*/, 22 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 53 /*tnr7_blend_1_1*/, 56 /*image_upscaler_1_1*/, 60 /*cas_1_1*/, 61 /*odr_ofs_mp_1_4*/, 62 /*b2i_ds_output_1_1*/, 63 /*odr_ofs_dp_1_4*/, 54 /*odr_tnr_fp_yuvn_1_4*/, 55 /*tnr_scaler_fp_1_1*/, 57 /*odr_tnr_scale_fp_yuv4n_1_4*/, 23 /*ifd_segmap_bnlm_1_4*/, 29 /*ifd_segmap_xnr_1_4*/, 34 /*ifd_segmap_acm_1_4*/, 47 /*ifd_segmap_tnr_bc_1_4*/, 51 /*ifd_segmap_tnr_blend_1_4*/, 58 /*ifd_segmap_cas_1_4*/, 24 /*smurf_bnlm_1_0*/, 30 /*smurf_xnr_1_0*/, 35 /*smurf_acm_1_0*/, 48 /*smurf_tnr_bc_1_0*/, 52 /*smurf_tnr_blend_1_0*/, 59 /*smurf_cas_1_0*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[25].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffIrNoGmvNoTnrWithSapOuterNode::Init(LbffIrNoGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 39, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[39] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 33184 /*dpc_2_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 35263 /*ifd_segmap_bnlm_1_4*/, 54924 /*smurf_bnlm_1_0*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 9241 /*ifd_segmap_xnr_1_4*/, 42329 /*smurf_xnr_1_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 28787 /*image_upscaler_1_1*/, 20893 /*ifd_segmap_cas_1_4*/, 37468 /*smurf_cas_1_0*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x77C0C3FF09, 0x0}; // { ifd_pipe_1_4[0], ifd_lsc_1_4[3], rgbs_grid_1_1[8], ccm_3a_2_0[9], fr_grid_1_0[10], odr_awb_std_1_4[11], odr_awb_sat_1_4[12], aestatistics_2_1[13], odr_ae_1_4[14], odr_af_std_1_4[15], ifd_segmap_bnlm_1_4[16], smurf_bnlm_1_0[17], ifd_segmap_xnr_1_4[22], smurf_xnr_1_0[23], b2i_ds_1_1[30], lbff_crop_espa_1_4[31], image_upscaler_1_1[32], ifd_segmap_cas_1_4[33], smurf_cas_1_0[34], odr_ofs_mp_1_4[36], b2i_ds_output_1_1[37], odr_ofs_dp_1_4[38] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x4F81C7F81A, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, dpc_2_2, gd_2_2, wb_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sat_1_4}[5], {aestatistics_2_1}[6], {odr_ae_1_4}[7], {odr_af_std_1_4}[8], {ifd_segmap_bnlm_1_4}[9], {smurf_bnlm_1_0}[10], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[11], {ifd_segmap_xnr_1_4}[12], {smurf_xnr_1_0}[13], {xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[14], {lbff_crop_espa_1_4}[15], {image_upscaler_1_1}[16], {ifd_segmap_cas_1_4}[17], {smurf_cas_1_0}[18], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[19], {odr_ofs_dp_1_4}[20] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x7FC1C7FF1B, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, dpc_2_2, gd_2_2, wb_1_1}[3], {rgbs_grid_1_1}[4], {ccm_3a_2_0}[5], {fr_grid_1_0}[6], {odr_awb_std_1_4}[7], {odr_awb_sat_1_4}[8], {aestatistics_2_1}[9], {odr_ae_1_4}[10], {odr_af_std_1_4}[11], {ifd_segmap_bnlm_1_4}[12], {smurf_bnlm_1_0}[13], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[14], {ifd_segmap_xnr_1_4}[15], {smurf_xnr_1_0}[16], {xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[17], {b2i_ds_1_1}[18], {lbff_crop_espa_1_4}[19], {image_upscaler_1_1}[20], {ifd_segmap_cas_1_4}[21], {smurf_cas_1_0}[22], {cas_1_1}[23], {odr_ofs_mp_1_4}[24], {b2i_ds_output_1_1}[25], {odr_ofs_dp_1_4}[26] } + uint8_t systemApisSizes[39] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 20 /*dpc_2_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_segmap_bnlm_1_4*/, 0 /*smurf_bnlm_1_0*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 220 /*ifd_segmap_xnr_1_4*/, 0 /*smurf_xnr_1_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*image_upscaler_1_1*/, 220 /*ifd_segmap_cas_1_4*/, 0 /*smurf_cas_1_0*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/}; + uint16_t runKernelConfigOrder[39] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*ifd_lsc_1_4*/, 4 /*lsc_1_2*/, 5 /*dpc_2_2*/, 6 /*gd_2_2*/, 7 /*wb_1_1*/, 18 /*bnlm_3_4*/, 19 /*bxt_demosaic*/, 20 /*vcsc_2_0_b*/, 21 /*gltm_2_0*/, 24 /*xnr_5_4*/, 25 /*vcr_3_1*/, 26 /*glim_2_0*/, 27 /*acm_1_2*/, 28 /*gammatm_v4*/, 29 /*csc_1_1*/, 30 /*b2i_ds_1_1*/, 31 /*lbff_crop_espa_1_4*/, 32 /*image_upscaler_1_1*/, 35 /*cas_1_1*/, 36 /*odr_ofs_mp_1_4*/, 37 /*b2i_ds_output_1_1*/, 38 /*odr_ofs_dp_1_4*/, 8 /*rgbs_grid_1_1*/, 11 /*odr_awb_std_1_4*/, 12 /*odr_awb_sat_1_4*/, 9 /*ccm_3a_2_0*/, 13 /*aestatistics_2_1*/, 14 /*odr_ae_1_4*/, 10 /*fr_grid_1_0*/, 15 /*odr_af_std_1_4*/, 16 /*ifd_segmap_bnlm_1_4*/, 22 /*ifd_segmap_xnr_1_4*/, 33 /*ifd_segmap_cas_1_4*/, 17 /*smurf_bnlm_1_0*/, 23 /*smurf_xnr_1_0*/, 34 /*smurf_cas_1_0*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[18].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffIrWithGmvNoTnrWithSapOuterNode::Init(LbffIrWithGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 43, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[43] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 33184 /*dpc_2_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 51073 /*ifd_gmv_1_4*/, 35263 /*ifd_segmap_bnlm_1_4*/, 54924 /*smurf_bnlm_1_0*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 9241 /*ifd_segmap_xnr_1_4*/, 42329 /*smurf_xnr_1_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 28787 /*image_upscaler_1_1*/, 40280 /*gmv_statistics_1_1*/, 7416 /*odr_gmv_feature_1_4*/, 41148 /*odr_gmv_match_1_4*/, 20893 /*ifd_segmap_cas_1_4*/, 37468 /*smurf_cas_1_0*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x77F8187FF09, 0x0}; // { ifd_pipe_1_4[0], ifd_lsc_1_4[3], rgbs_grid_1_1[8], ccm_3a_2_0[9], fr_grid_1_0[10], odr_awb_std_1_4[11], odr_awb_sat_1_4[12], aestatistics_2_1[13], odr_ae_1_4[14], odr_af_std_1_4[15], ifd_gmv_1_4[16], ifd_segmap_bnlm_1_4[17], smurf_bnlm_1_0[18], ifd_segmap_xnr_1_4[23], smurf_xnr_1_0[24], b2i_ds_1_1[31], lbff_crop_espa_1_4[32], image_upscaler_1_1[33], gmv_statistics_1_1[34], odr_gmv_feature_1_4[35], odr_gmv_match_1_4[36], ifd_segmap_cas_1_4[37], smurf_cas_1_0[38], odr_ofs_mp_1_4[40], b2i_ds_output_1_1[41], odr_ofs_dp_1_4[42] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x4FF038FF81A, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, dpc_2_2, gd_2_2, wb_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sat_1_4}[5], {aestatistics_2_1}[6], {odr_ae_1_4}[7], {odr_af_std_1_4}[8], {ifd_gmv_1_4}[9], {ifd_segmap_bnlm_1_4}[10], {smurf_bnlm_1_0}[11], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[12], {ifd_segmap_xnr_1_4}[13], {smurf_xnr_1_0}[14], {xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[15], {lbff_crop_espa_1_4}[16], {image_upscaler_1_1}[17], {gmv_statistics_1_1}[18], {odr_gmv_feature_1_4}[19], {odr_gmv_match_1_4}[20], {ifd_segmap_cas_1_4}[21], {smurf_cas_1_0}[22], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[23], {odr_ofs_dp_1_4}[24] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x7FF838FFF1B, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, dpc_2_2, gd_2_2, wb_1_1}[3], {rgbs_grid_1_1}[4], {ccm_3a_2_0}[5], {fr_grid_1_0}[6], {odr_awb_std_1_4}[7], {odr_awb_sat_1_4}[8], {aestatistics_2_1}[9], {odr_ae_1_4}[10], {odr_af_std_1_4}[11], {ifd_gmv_1_4}[12], {ifd_segmap_bnlm_1_4}[13], {smurf_bnlm_1_0}[14], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[15], {ifd_segmap_xnr_1_4}[16], {smurf_xnr_1_0}[17], {xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[18], {b2i_ds_1_1}[19], {lbff_crop_espa_1_4}[20], {image_upscaler_1_1}[21], {gmv_statistics_1_1}[22], {odr_gmv_feature_1_4}[23], {odr_gmv_match_1_4}[24], {ifd_segmap_cas_1_4}[25], {smurf_cas_1_0}[26], {cas_1_1}[27], {odr_ofs_mp_1_4}[28], {b2i_ds_output_1_1}[29], {odr_ofs_dp_1_4}[30] } + uint8_t systemApisSizes[43] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 20 /*dpc_2_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_gmv_1_4*/, 220 /*ifd_segmap_bnlm_1_4*/, 0 /*smurf_bnlm_1_0*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 220 /*ifd_segmap_xnr_1_4*/, 0 /*smurf_xnr_1_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*image_upscaler_1_1*/, 32 /*gmv_statistics_1_1*/, 220 /*odr_gmv_feature_1_4*/, 220 /*odr_gmv_match_1_4*/, 220 /*ifd_segmap_cas_1_4*/, 0 /*smurf_cas_1_0*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/}; + uint16_t runKernelConfigOrder[43] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*ifd_lsc_1_4*/, 4 /*lsc_1_2*/, 5 /*dpc_2_2*/, 6 /*gd_2_2*/, 7 /*wb_1_1*/, 19 /*bnlm_3_4*/, 20 /*bxt_demosaic*/, 21 /*vcsc_2_0_b*/, 22 /*gltm_2_0*/, 25 /*xnr_5_4*/, 26 /*vcr_3_1*/, 27 /*glim_2_0*/, 28 /*acm_1_2*/, 29 /*gammatm_v4*/, 30 /*csc_1_1*/, 31 /*b2i_ds_1_1*/, 32 /*lbff_crop_espa_1_4*/, 33 /*image_upscaler_1_1*/, 39 /*cas_1_1*/, 40 /*odr_ofs_mp_1_4*/, 41 /*b2i_ds_output_1_1*/, 42 /*odr_ofs_dp_1_4*/, 8 /*rgbs_grid_1_1*/, 11 /*odr_awb_std_1_4*/, 12 /*odr_awb_sat_1_4*/, 9 /*ccm_3a_2_0*/, 13 /*aestatistics_2_1*/, 14 /*odr_ae_1_4*/, 10 /*fr_grid_1_0*/, 15 /*odr_af_std_1_4*/, 16 /*ifd_gmv_1_4*/, 34 /*gmv_statistics_1_1*/, 35 /*odr_gmv_feature_1_4*/, 36 /*odr_gmv_match_1_4*/, 17 /*ifd_segmap_bnlm_1_4*/, 23 /*ifd_segmap_xnr_1_4*/, 37 /*ifd_segmap_cas_1_4*/, 18 /*smurf_bnlm_1_0*/, 24 /*smurf_xnr_1_0*/, 38 /*smurf_cas_1_0*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[19].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffIrNoGmvWithTnrWithSapOuterNode::Init(LbffIrNoGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 55, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[55] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 33184 /*dpc_2_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 35263 /*ifd_segmap_bnlm_1_4*/, 54924 /*smurf_bnlm_1_0*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 9241 /*ifd_segmap_xnr_1_4*/, 42329 /*smurf_xnr_1_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 2495 /*tnr7_spatial_1_1*/, 29996 /*tnr_scaler_lb_1_1*/, 23639 /*tnr7_ims_1_2*/, 47873 /*ifd_segmap_tnr_bc_1_4*/, 13101 /*smurf_tnr_bc_1_0*/, 1502 /*tnr7_bc_1_2*/, 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, 14619 /*ifd_segmap_tnr_blend_1_4*/, 42749 /*smurf_tnr_blend_1_0*/, 20119 /*tnr7_blend_1_1*/, 5215 /*odr_tnr_fp_yuvn_1_4*/, 20623 /*tnr_scaler_fp_1_1*/, 28787 /*image_upscaler_1_1*/, 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/, 20893 /*ifd_segmap_cas_1_4*/, 37468 /*smurf_cas_1_0*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x77EED6061FFF09, 0x0}; // { ifd_pipe_1_4[0], ifd_lsc_1_4[3], rgbs_grid_1_1[8], ccm_3a_2_0[9], fr_grid_1_0[10], odr_awb_std_1_4[11], odr_awb_sat_1_4[12], aestatistics_2_1[13], odr_ae_1_4[14], odr_af_std_1_4[15], ifd_tnr_sp_bc_yuv4nm1_1_4[16], ifd_tnr_sp_bc_rs4nm1_1_4[17], ifd_tnr_fp_blend_yuvnm1_1_4[18], ifd_segmap_bnlm_1_4[19], smurf_bnlm_1_0[20], ifd_segmap_xnr_1_4[25], smurf_xnr_1_0[26], b2i_ds_1_1[33], lbff_crop_espa_1_4[34], tnr_scaler_lb_1_1[36], ifd_segmap_tnr_bc_1_4[38], smurf_tnr_bc_1_0[39], odr_tnr_sp_bc_rs4n_1_4[41], ifd_segmap_tnr_blend_1_4[42], smurf_tnr_blend_1_0[43], odr_tnr_fp_yuvn_1_4[45], tnr_scaler_fp_1_1[46], image_upscaler_1_1[47], odr_tnr_scale_fp_yuv4n_1_4[48], ifd_segmap_cas_1_4[49], smurf_cas_1_0[50], odr_ofs_mp_1_4[52], b2i_ds_output_1_1[53], odr_ofs_dp_1_4[54] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x4F1DEC0E3FF81A, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, dpc_2_2, gd_2_2, wb_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sat_1_4}[5], {aestatistics_2_1}[6], {odr_ae_1_4}[7], {odr_af_std_1_4}[8], {ifd_tnr_sp_bc_yuv4nm1_1_4}[9], {ifd_tnr_sp_bc_rs4nm1_1_4}[10], {ifd_tnr_fp_blend_yuvnm1_1_4}[11], {ifd_segmap_bnlm_1_4}[12], {smurf_bnlm_1_0}[13], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[14], {ifd_segmap_xnr_1_4}[15], {smurf_xnr_1_0}[16], {xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[17], {lbff_crop_espa_1_4}[18], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[19], {tnr7_ims_1_2}[20], {ifd_segmap_tnr_bc_1_4}[21], {smurf_tnr_bc_1_0}[22], {tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[23], {ifd_segmap_tnr_blend_1_4}[24], {smurf_tnr_blend_1_0}[25], {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[26], {odr_tnr_scale_fp_yuv4n_1_4}[27], {ifd_segmap_cas_1_4}[28], {smurf_cas_1_0}[29], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[30], {odr_ofs_dp_1_4}[31] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x7FFFFE0E3FFF1B, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, dpc_2_2, gd_2_2, wb_1_1}[3], {rgbs_grid_1_1}[4], {ccm_3a_2_0}[5], {fr_grid_1_0}[6], {odr_awb_std_1_4}[7], {odr_awb_sat_1_4}[8], {aestatistics_2_1}[9], {odr_ae_1_4}[10], {odr_af_std_1_4}[11], {ifd_tnr_sp_bc_yuv4nm1_1_4}[12], {ifd_tnr_sp_bc_rs4nm1_1_4}[13], {ifd_tnr_fp_blend_yuvnm1_1_4}[14], {ifd_segmap_bnlm_1_4}[15], {smurf_bnlm_1_0}[16], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[17], {ifd_segmap_xnr_1_4}[18], {smurf_xnr_1_0}[19], {xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[20], {b2i_ds_1_1}[21], {lbff_crop_espa_1_4}[22], {tnr7_spatial_1_1}[23], {tnr_scaler_lb_1_1}[24], {tnr7_ims_1_2}[25], {ifd_segmap_tnr_bc_1_4}[26], {smurf_tnr_bc_1_0}[27], {tnr7_bc_1_2}[28], {odr_tnr_sp_bc_rs4n_1_4}[29], {ifd_segmap_tnr_blend_1_4}[30], {smurf_tnr_blend_1_0}[31], {tnr7_blend_1_1}[32], {odr_tnr_fp_yuvn_1_4}[33], {tnr_scaler_fp_1_1}[34], {image_upscaler_1_1}[35], {odr_tnr_scale_fp_yuv4n_1_4}[36], {ifd_segmap_cas_1_4}[37], {smurf_cas_1_0}[38], {cas_1_1}[39], {odr_ofs_mp_1_4}[40], {b2i_ds_output_1_1}[41], {odr_ofs_dp_1_4}[42] } + uint8_t systemApisSizes[55] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 20 /*dpc_2_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 220 /*ifd_segmap_bnlm_1_4*/, 0 /*smurf_bnlm_1_0*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 220 /*ifd_segmap_xnr_1_4*/, 0 /*smurf_xnr_1_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*tnr7_spatial_1_1*/, 0 /*tnr_scaler_lb_1_1*/, 0 /*tnr7_ims_1_2*/, 220 /*ifd_segmap_tnr_bc_1_4*/, 0 /*smurf_tnr_bc_1_0*/, 5 /*tnr7_bc_1_2*/, 220 /*odr_tnr_sp_bc_rs4n_1_4*/, 220 /*ifd_segmap_tnr_blend_1_4*/, 0 /*smurf_tnr_blend_1_0*/, 5 /*tnr7_blend_1_1*/, 220 /*odr_tnr_fp_yuvn_1_4*/, 0 /*tnr_scaler_fp_1_1*/, 0 /*image_upscaler_1_1*/, 220 /*odr_tnr_scale_fp_yuv4n_1_4*/, 220 /*ifd_segmap_cas_1_4*/, 0 /*smurf_cas_1_0*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/}; + uint16_t runKernelConfigOrder[55] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*ifd_lsc_1_4*/, 4 /*lsc_1_2*/, 5 /*dpc_2_2*/, 6 /*gd_2_2*/, 7 /*wb_1_1*/, 21 /*bnlm_3_4*/, 22 /*bxt_demosaic*/, 23 /*vcsc_2_0_b*/, 24 /*gltm_2_0*/, 27 /*xnr_5_4*/, 28 /*vcr_3_1*/, 29 /*glim_2_0*/, 30 /*acm_1_2*/, 31 /*gammatm_v4*/, 32 /*csc_1_1*/, 33 /*b2i_ds_1_1*/, 34 /*lbff_crop_espa_1_4*/, 35 /*tnr7_spatial_1_1*/, 36 /*tnr_scaler_lb_1_1*/, 8 /*rgbs_grid_1_1*/, 11 /*odr_awb_std_1_4*/, 12 /*odr_awb_sat_1_4*/, 9 /*ccm_3a_2_0*/, 13 /*aestatistics_2_1*/, 14 /*odr_ae_1_4*/, 10 /*fr_grid_1_0*/, 15 /*odr_af_std_1_4*/, 16 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 17 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 37 /*tnr7_ims_1_2*/, 40 /*tnr7_bc_1_2*/, 41 /*odr_tnr_sp_bc_rs4n_1_4*/, 18 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 44 /*tnr7_blend_1_1*/, 47 /*image_upscaler_1_1*/, 51 /*cas_1_1*/, 52 /*odr_ofs_mp_1_4*/, 53 /*b2i_ds_output_1_1*/, 54 /*odr_ofs_dp_1_4*/, 45 /*odr_tnr_fp_yuvn_1_4*/, 46 /*tnr_scaler_fp_1_1*/, 48 /*odr_tnr_scale_fp_yuv4n_1_4*/, 19 /*ifd_segmap_bnlm_1_4*/, 25 /*ifd_segmap_xnr_1_4*/, 38 /*ifd_segmap_tnr_bc_1_4*/, 42 /*ifd_segmap_tnr_blend_1_4*/, 49 /*ifd_segmap_cas_1_4*/, 20 /*smurf_bnlm_1_0*/, 26 /*smurf_xnr_1_0*/, 39 /*smurf_tnr_bc_1_0*/, 43 /*smurf_tnr_blend_1_0*/, 50 /*smurf_cas_1_0*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[21].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffIrWithGmvWithTnrWithSapOuterNode::Init(LbffIrWithGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 59, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[59] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 33184 /*dpc_2_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 51073 /*ifd_gmv_1_4*/, 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 35263 /*ifd_segmap_bnlm_1_4*/, 54924 /*smurf_bnlm_1_0*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 9241 /*ifd_segmap_xnr_1_4*/, 42329 /*smurf_xnr_1_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 2495 /*tnr7_spatial_1_1*/, 29996 /*tnr_scaler_lb_1_1*/, 23639 /*tnr7_ims_1_2*/, 40280 /*gmv_statistics_1_1*/, 7416 /*odr_gmv_feature_1_4*/, 41148 /*odr_gmv_match_1_4*/, 47873 /*ifd_segmap_tnr_bc_1_4*/, 13101 /*smurf_tnr_bc_1_0*/, 1502 /*tnr7_bc_1_2*/, 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, 14619 /*ifd_segmap_tnr_blend_1_4*/, 42749 /*smurf_tnr_blend_1_0*/, 20119 /*tnr7_blend_1_1*/, 5215 /*odr_tnr_fp_yuvn_1_4*/, 20623 /*tnr_scaler_fp_1_1*/, 28787 /*image_upscaler_1_1*/, 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/, 20893 /*ifd_segmap_cas_1_4*/, 37468 /*smurf_cas_1_0*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x77EEFAC0C3FFF09, 0x0}; // { ifd_pipe_1_4[0], ifd_lsc_1_4[3], rgbs_grid_1_1[8], ccm_3a_2_0[9], fr_grid_1_0[10], odr_awb_std_1_4[11], odr_awb_sat_1_4[12], aestatistics_2_1[13], odr_ae_1_4[14], odr_af_std_1_4[15], ifd_gmv_1_4[16], ifd_tnr_sp_bc_yuv4nm1_1_4[17], ifd_tnr_sp_bc_rs4nm1_1_4[18], ifd_tnr_fp_blend_yuvnm1_1_4[19], ifd_segmap_bnlm_1_4[20], smurf_bnlm_1_0[21], ifd_segmap_xnr_1_4[26], smurf_xnr_1_0[27], b2i_ds_1_1[34], lbff_crop_espa_1_4[35], tnr_scaler_lb_1_1[37], gmv_statistics_1_1[39], odr_gmv_feature_1_4[40], odr_gmv_match_1_4[41], ifd_segmap_tnr_bc_1_4[42], smurf_tnr_bc_1_0[43], odr_tnr_sp_bc_rs4n_1_4[45], ifd_segmap_tnr_blend_1_4[46], smurf_tnr_blend_1_0[47], odr_tnr_fp_yuvn_1_4[49], tnr_scaler_fp_1_1[50], image_upscaler_1_1[51], odr_tnr_scale_fp_yuv4n_1_4[52], ifd_segmap_cas_1_4[53], smurf_cas_1_0[54], odr_ofs_mp_1_4[56], b2i_ds_output_1_1[57], odr_ofs_dp_1_4[58] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x4F1DFD81C7FF81A, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, dpc_2_2, gd_2_2, wb_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sat_1_4}[5], {aestatistics_2_1}[6], {odr_ae_1_4}[7], {odr_af_std_1_4}[8], {ifd_gmv_1_4}[9], {ifd_tnr_sp_bc_yuv4nm1_1_4}[10], {ifd_tnr_sp_bc_rs4nm1_1_4}[11], {ifd_tnr_fp_blend_yuvnm1_1_4}[12], {ifd_segmap_bnlm_1_4}[13], {smurf_bnlm_1_0}[14], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[15], {ifd_segmap_xnr_1_4}[16], {smurf_xnr_1_0}[17], {xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[18], {lbff_crop_espa_1_4}[19], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[20], {tnr7_ims_1_2}[21], {gmv_statistics_1_1}[22], {odr_gmv_feature_1_4}[23], {odr_gmv_match_1_4}[24], {ifd_segmap_tnr_bc_1_4}[25], {smurf_tnr_bc_1_0}[26], {tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[27], {ifd_segmap_tnr_blend_1_4}[28], {smurf_tnr_blend_1_0}[29], {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[30], {odr_tnr_scale_fp_yuv4n_1_4}[31], {ifd_segmap_cas_1_4}[32], {smurf_cas_1_0}[33], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[34], {odr_ofs_dp_1_4}[35] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x7FFFFFC1C7FFF1B, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, dpc_2_2, gd_2_2, wb_1_1}[3], {rgbs_grid_1_1}[4], {ccm_3a_2_0}[5], {fr_grid_1_0}[6], {odr_awb_std_1_4}[7], {odr_awb_sat_1_4}[8], {aestatistics_2_1}[9], {odr_ae_1_4}[10], {odr_af_std_1_4}[11], {ifd_gmv_1_4}[12], {ifd_tnr_sp_bc_yuv4nm1_1_4}[13], {ifd_tnr_sp_bc_rs4nm1_1_4}[14], {ifd_tnr_fp_blend_yuvnm1_1_4}[15], {ifd_segmap_bnlm_1_4}[16], {smurf_bnlm_1_0}[17], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[18], {ifd_segmap_xnr_1_4}[19], {smurf_xnr_1_0}[20], {xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[21], {b2i_ds_1_1}[22], {lbff_crop_espa_1_4}[23], {tnr7_spatial_1_1}[24], {tnr_scaler_lb_1_1}[25], {tnr7_ims_1_2}[26], {gmv_statistics_1_1}[27], {odr_gmv_feature_1_4}[28], {odr_gmv_match_1_4}[29], {ifd_segmap_tnr_bc_1_4}[30], {smurf_tnr_bc_1_0}[31], {tnr7_bc_1_2}[32], {odr_tnr_sp_bc_rs4n_1_4}[33], {ifd_segmap_tnr_blend_1_4}[34], {smurf_tnr_blend_1_0}[35], {tnr7_blend_1_1}[36], {odr_tnr_fp_yuvn_1_4}[37], {tnr_scaler_fp_1_1}[38], {image_upscaler_1_1}[39], {odr_tnr_scale_fp_yuv4n_1_4}[40], {ifd_segmap_cas_1_4}[41], {smurf_cas_1_0}[42], {cas_1_1}[43], {odr_ofs_mp_1_4}[44], {b2i_ds_output_1_1}[45], {odr_ofs_dp_1_4}[46] } + uint8_t systemApisSizes[59] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 20 /*dpc_2_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_gmv_1_4*/, 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 220 /*ifd_segmap_bnlm_1_4*/, 0 /*smurf_bnlm_1_0*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 220 /*ifd_segmap_xnr_1_4*/, 0 /*smurf_xnr_1_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*tnr7_spatial_1_1*/, 0 /*tnr_scaler_lb_1_1*/, 0 /*tnr7_ims_1_2*/, 32 /*gmv_statistics_1_1*/, 220 /*odr_gmv_feature_1_4*/, 220 /*odr_gmv_match_1_4*/, 220 /*ifd_segmap_tnr_bc_1_4*/, 0 /*smurf_tnr_bc_1_0*/, 5 /*tnr7_bc_1_2*/, 220 /*odr_tnr_sp_bc_rs4n_1_4*/, 220 /*ifd_segmap_tnr_blend_1_4*/, 0 /*smurf_tnr_blend_1_0*/, 5 /*tnr7_blend_1_1*/, 220 /*odr_tnr_fp_yuvn_1_4*/, 0 /*tnr_scaler_fp_1_1*/, 0 /*image_upscaler_1_1*/, 220 /*odr_tnr_scale_fp_yuv4n_1_4*/, 220 /*ifd_segmap_cas_1_4*/, 0 /*smurf_cas_1_0*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/}; + uint16_t runKernelConfigOrder[59] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*ifd_lsc_1_4*/, 4 /*lsc_1_2*/, 5 /*dpc_2_2*/, 6 /*gd_2_2*/, 7 /*wb_1_1*/, 22 /*bnlm_3_4*/, 23 /*bxt_demosaic*/, 24 /*vcsc_2_0_b*/, 25 /*gltm_2_0*/, 28 /*xnr_5_4*/, 29 /*vcr_3_1*/, 30 /*glim_2_0*/, 31 /*acm_1_2*/, 32 /*gammatm_v4*/, 33 /*csc_1_1*/, 34 /*b2i_ds_1_1*/, 35 /*lbff_crop_espa_1_4*/, 36 /*tnr7_spatial_1_1*/, 37 /*tnr_scaler_lb_1_1*/, 8 /*rgbs_grid_1_1*/, 11 /*odr_awb_std_1_4*/, 12 /*odr_awb_sat_1_4*/, 9 /*ccm_3a_2_0*/, 13 /*aestatistics_2_1*/, 14 /*odr_ae_1_4*/, 10 /*fr_grid_1_0*/, 15 /*odr_af_std_1_4*/, 16 /*ifd_gmv_1_4*/, 39 /*gmv_statistics_1_1*/, 40 /*odr_gmv_feature_1_4*/, 41 /*odr_gmv_match_1_4*/, 17 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, 18 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, 38 /*tnr7_ims_1_2*/, 44 /*tnr7_bc_1_2*/, 45 /*odr_tnr_sp_bc_rs4n_1_4*/, 19 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, 48 /*tnr7_blend_1_1*/, 51 /*image_upscaler_1_1*/, 55 /*cas_1_1*/, 56 /*odr_ofs_mp_1_4*/, 57 /*b2i_ds_output_1_1*/, 58 /*odr_ofs_dp_1_4*/, 49 /*odr_tnr_fp_yuvn_1_4*/, 50 /*tnr_scaler_fp_1_1*/, 52 /*odr_tnr_scale_fp_yuv4n_1_4*/, 20 /*ifd_segmap_bnlm_1_4*/, 26 /*ifd_segmap_xnr_1_4*/, 42 /*ifd_segmap_tnr_bc_1_4*/, 46 /*ifd_segmap_tnr_blend_1_4*/, 53 /*ifd_segmap_cas_1_4*/, 21 /*smurf_bnlm_1_0*/, 27 /*smurf_xnr_1_0*/, 43 /*smurf_tnr_bc_1_0*/, 47 /*smurf_tnr_blend_1_0*/, 54 /*smurf_cas_1_0*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[22].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode::Init(LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 47, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[47] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 54812 /*odr_dpc_pdaf_1_4*/, 14488 /*rgb_ir_2_0*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 22427 /*ifd_pdaf_1_4*/, 43213 /*pext_1_0*/, 44308 /*pafstatistics_1_2*/, 26892 /*odr_pdaf_1_4*/, 35263 /*ifd_segmap_bnlm_1_4*/, 54924 /*smurf_bnlm_1_0*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 9241 /*ifd_segmap_xnr_1_4*/, 42329 /*smurf_xnr_1_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 51914 /*ifd_segmap_acm_1_4*/, 28366 /*smurf_acm_1_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 28787 /*image_upscaler_1_1*/, 20893 /*ifd_segmap_cas_1_4*/, 37468 /*smurf_cas_1_0*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x77C630FFFC71, 0x0}; // { ifd_pipe_1_4[0], odr_dpc_pdaf_1_4[4], rgb_ir_2_0[5], ifd_lsc_1_4[6], rgbs_grid_1_1[10], ccm_3a_2_0[11], fr_grid_1_0[12], odr_awb_std_1_4[13], odr_awb_sat_1_4[14], aestatistics_2_1[15], odr_ae_1_4[16], odr_af_std_1_4[17], ifd_pdaf_1_4[18], pext_1_0[19], pafstatistics_1_2[20], odr_pdaf_1_4[21], ifd_segmap_bnlm_1_4[22], smurf_bnlm_1_0[23], ifd_segmap_xnr_1_4[28], smurf_xnr_1_0[29], ifd_segmap_acm_1_4[33], smurf_acm_1_0[34], b2i_ds_1_1[38], lbff_crop_espa_1_4[39], image_upscaler_1_1[40], ifd_segmap_cas_1_4[41], smurf_cas_1_0[42], odr_ofs_mp_1_4[44], b2i_ds_output_1_1[45], odr_ofs_dp_1_4[46] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x4F8E71FFE0C2, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, odr_dpc_pdaf_1_4, rgb_ir_2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sat_1_4}[5], {aestatistics_2_1}[6], {odr_ae_1_4}[7], {odr_af_std_1_4}[8], {ifd_pdaf_1_4}[9], {pext_1_0}[10], {pafstatistics_1_2}[11], {odr_pdaf_1_4}[12], {ifd_segmap_bnlm_1_4}[13], {smurf_bnlm_1_0}[14], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[15], {ifd_segmap_xnr_1_4}[16], {smurf_xnr_1_0}[17], {xnr_5_4, vcr_3_1, glim_2_0}[18], {ifd_segmap_acm_1_4}[19], {smurf_acm_1_0}[20], {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[21], {lbff_crop_espa_1_4}[22], {image_upscaler_1_1}[23], {ifd_segmap_cas_1_4}[24], {smurf_cas_1_0}[25], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[26], {odr_ofs_dp_1_4}[27] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x7FCE71FFFCF3, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {odr_dpc_pdaf_1_4}[2], {rgb_ir_2_0}[3], {ifd_lsc_1_4}[4], {lsc_1_2, gd_2_2, wb_1_1}[5], {rgbs_grid_1_1}[6], {ccm_3a_2_0}[7], {fr_grid_1_0}[8], {odr_awb_std_1_4}[9], {odr_awb_sat_1_4}[10], {aestatistics_2_1}[11], {odr_ae_1_4}[12], {odr_af_std_1_4}[13], {ifd_pdaf_1_4}[14], {pext_1_0}[15], {pafstatistics_1_2}[16], {odr_pdaf_1_4}[17], {ifd_segmap_bnlm_1_4}[18], {smurf_bnlm_1_0}[19], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[20], {ifd_segmap_xnr_1_4}[21], {smurf_xnr_1_0}[22], {xnr_5_4, vcr_3_1, glim_2_0}[23], {ifd_segmap_acm_1_4}[24], {smurf_acm_1_0}[25], {acm_1_2, gammatm_v4, csc_1_1}[26], {b2i_ds_1_1}[27], {lbff_crop_espa_1_4}[28], {image_upscaler_1_1}[29], {ifd_segmap_cas_1_4}[30], {smurf_cas_1_0}[31], {cas_1_1}[32], {odr_ofs_mp_1_4}[33], {b2i_ds_output_1_1}[34], {odr_ofs_dp_1_4}[35] } + uint8_t systemApisSizes[47] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 220 /*odr_dpc_pdaf_1_4*/, 0 /*rgb_ir_2_0*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_pdaf_1_4*/, 24 /*pext_1_0*/, 8 /*pafstatistics_1_2*/, 220 /*odr_pdaf_1_4*/, 220 /*ifd_segmap_bnlm_1_4*/, 0 /*smurf_bnlm_1_0*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 220 /*ifd_segmap_xnr_1_4*/, 0 /*smurf_xnr_1_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 220 /*ifd_segmap_acm_1_4*/, 0 /*smurf_acm_1_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*image_upscaler_1_1*/, 220 /*ifd_segmap_cas_1_4*/, 0 /*smurf_cas_1_0*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/}; + uint16_t runKernelConfigOrder[47] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 5 /*rgb_ir_2_0*/, 4 /*odr_dpc_pdaf_1_4*/, 6 /*ifd_lsc_1_4*/, 7 /*lsc_1_2*/, 8 /*gd_2_2*/, 9 /*wb_1_1*/, 24 /*bnlm_3_4*/, 25 /*bxt_demosaic*/, 26 /*vcsc_2_0_b*/, 27 /*gltm_2_0*/, 30 /*xnr_5_4*/, 31 /*vcr_3_1*/, 32 /*glim_2_0*/, 35 /*acm_1_2*/, 36 /*gammatm_v4*/, 37 /*csc_1_1*/, 38 /*b2i_ds_1_1*/, 39 /*lbff_crop_espa_1_4*/, 40 /*image_upscaler_1_1*/, 43 /*cas_1_1*/, 44 /*odr_ofs_mp_1_4*/, 45 /*b2i_ds_output_1_1*/, 46 /*odr_ofs_dp_1_4*/, 10 /*rgbs_grid_1_1*/, 13 /*odr_awb_std_1_4*/, 14 /*odr_awb_sat_1_4*/, 11 /*ccm_3a_2_0*/, 15 /*aestatistics_2_1*/, 16 /*odr_ae_1_4*/, 12 /*fr_grid_1_0*/, 17 /*odr_af_std_1_4*/, 18 /*ifd_pdaf_1_4*/, 19 /*pext_1_0*/, 20 /*pafstatistics_1_2*/, 21 /*odr_pdaf_1_4*/, 22 /*ifd_segmap_bnlm_1_4*/, 28 /*ifd_segmap_xnr_1_4*/, 33 /*ifd_segmap_acm_1_4*/, 41 /*ifd_segmap_cas_1_4*/, 23 /*smurf_bnlm_1_0*/, 29 /*smurf_xnr_1_0*/, 34 /*smurf_acm_1_0*/, 42 /*smurf_cas_1_0*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[24].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode::Init(LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(0, NodeTypes::Cb, 51, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[51] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, 54812 /*odr_dpc_pdaf_1_4*/, 14488 /*rgb_ir_2_0*/, 29313 /*ifd_lsc_1_4*/, 2144 /*lsc_1_2*/, 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, 15021 /*rgbs_grid_1_1*/, 62344 /*ccm_3a_2_0*/, 26958 /*fr_grid_1_0*/, 38544 /*odr_awb_std_1_4*/, 1248 /*odr_awb_sat_1_4*/, 55073 /*aestatistics_2_1*/, 62556 /*odr_ae_1_4*/, 59136 /*odr_af_std_1_4*/, 22427 /*ifd_pdaf_1_4*/, 43213 /*pext_1_0*/, 44308 /*pafstatistics_1_2*/, 26892 /*odr_pdaf_1_4*/, 51073 /*ifd_gmv_1_4*/, 35263 /*ifd_segmap_bnlm_1_4*/, 54924 /*smurf_bnlm_1_0*/, 45146 /*bnlm_3_4*/, 48695 /*bxt_demosaic*/, 13708 /*vcsc_2_0_b*/, 54721 /*gltm_2_0*/, 9241 /*ifd_segmap_xnr_1_4*/, 42329 /*smurf_xnr_1_0*/, 30019 /*xnr_5_4*/, 36035 /*vcr_3_1*/, 36029 /*glim_2_0*/, 51914 /*ifd_segmap_acm_1_4*/, 28366 /*smurf_acm_1_0*/, 17531 /*acm_1_2*/, 5394 /*gammatm_v4*/, 62703 /*csc_1_1*/, 40299 /*b2i_ds_1_1*/, 65466 /*lbff_crop_espa_1_4*/, 28787 /*image_upscaler_1_1*/, 40280 /*gmv_statistics_1_1*/, 7416 /*odr_gmv_feature_1_4*/, 41148 /*odr_gmv_match_1_4*/, 20893 /*ifd_segmap_cas_1_4*/, 37468 /*smurf_cas_1_0*/, 9385 /*cas_1_1*/, 16460 /*odr_ofs_mp_1_4*/, 50136 /*b2i_ds_output_1_1*/, 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x77F8C61FFFC71, 0x0}; // { ifd_pipe_1_4[0], odr_dpc_pdaf_1_4[4], rgb_ir_2_0[5], ifd_lsc_1_4[6], rgbs_grid_1_1[10], ccm_3a_2_0[11], fr_grid_1_0[12], odr_awb_std_1_4[13], odr_awb_sat_1_4[14], aestatistics_2_1[15], odr_ae_1_4[16], odr_af_std_1_4[17], ifd_pdaf_1_4[18], pext_1_0[19], pafstatistics_1_2[20], odr_pdaf_1_4[21], ifd_gmv_1_4[22], ifd_segmap_bnlm_1_4[23], smurf_bnlm_1_0[24], ifd_segmap_xnr_1_4[29], smurf_xnr_1_0[30], ifd_segmap_acm_1_4[34], smurf_acm_1_0[35], b2i_ds_1_1[39], lbff_crop_espa_1_4[40], image_upscaler_1_1[41], gmv_statistics_1_1[42], odr_gmv_feature_1_4[43], odr_gmv_match_1_4[44], ifd_segmap_cas_1_4[45], smurf_cas_1_0[46], odr_ofs_mp_1_4[48], b2i_ds_output_1_1[49], odr_ofs_dp_1_4[50] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x4FF1CE3FFE0C2, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, odr_dpc_pdaf_1_4, rgb_ir_2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sat_1_4}[5], {aestatistics_2_1}[6], {odr_ae_1_4}[7], {odr_af_std_1_4}[8], {ifd_pdaf_1_4}[9], {pext_1_0}[10], {pafstatistics_1_2}[11], {odr_pdaf_1_4}[12], {ifd_gmv_1_4}[13], {ifd_segmap_bnlm_1_4}[14], {smurf_bnlm_1_0}[15], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[16], {ifd_segmap_xnr_1_4}[17], {smurf_xnr_1_0}[18], {xnr_5_4, vcr_3_1, glim_2_0}[19], {ifd_segmap_acm_1_4}[20], {smurf_acm_1_0}[21], {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[22], {lbff_crop_espa_1_4}[23], {image_upscaler_1_1}[24], {gmv_statistics_1_1}[25], {odr_gmv_feature_1_4}[26], {odr_gmv_match_1_4}[27], {ifd_segmap_cas_1_4}[28], {smurf_cas_1_0}[29], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[30], {odr_ofs_dp_1_4}[31] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x7FF9CE3FFFCF3, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {odr_dpc_pdaf_1_4}[2], {rgb_ir_2_0}[3], {ifd_lsc_1_4}[4], {lsc_1_2, gd_2_2, wb_1_1}[5], {rgbs_grid_1_1}[6], {ccm_3a_2_0}[7], {fr_grid_1_0}[8], {odr_awb_std_1_4}[9], {odr_awb_sat_1_4}[10], {aestatistics_2_1}[11], {odr_ae_1_4}[12], {odr_af_std_1_4}[13], {ifd_pdaf_1_4}[14], {pext_1_0}[15], {pafstatistics_1_2}[16], {odr_pdaf_1_4}[17], {ifd_gmv_1_4}[18], {ifd_segmap_bnlm_1_4}[19], {smurf_bnlm_1_0}[20], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[21], {ifd_segmap_xnr_1_4}[22], {smurf_xnr_1_0}[23], {xnr_5_4, vcr_3_1, glim_2_0}[24], {ifd_segmap_acm_1_4}[25], {smurf_acm_1_0}[26], {acm_1_2, gammatm_v4, csc_1_1}[27], {b2i_ds_1_1}[28], {lbff_crop_espa_1_4}[29], {image_upscaler_1_1}[30], {gmv_statistics_1_1}[31], {odr_gmv_feature_1_4}[32], {odr_gmv_match_1_4}[33], {ifd_segmap_cas_1_4}[34], {smurf_cas_1_0}[35], {cas_1_1}[36], {odr_ofs_mp_1_4}[37], {b2i_ds_output_1_1}[38], {odr_ofs_dp_1_4}[39] } + uint8_t systemApisSizes[51] = {220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, 220 /*odr_dpc_pdaf_1_4*/, 0 /*rgb_ir_2_0*/, 220 /*ifd_lsc_1_4*/, 40 /*lsc_1_2*/, 0 /*gd_2_2*/, 0 /*wb_1_1*/, 24 /*rgbs_grid_1_1*/, 5 /*ccm_3a_2_0*/, 20 /*fr_grid_1_0*/, 220 /*odr_awb_std_1_4*/, 220 /*odr_awb_sat_1_4*/, 24 /*aestatistics_2_1*/, 220 /*odr_ae_1_4*/, 220 /*odr_af_std_1_4*/, 220 /*ifd_pdaf_1_4*/, 24 /*pext_1_0*/, 8 /*pafstatistics_1_2*/, 220 /*odr_pdaf_1_4*/, 220 /*ifd_gmv_1_4*/, 220 /*ifd_segmap_bnlm_1_4*/, 0 /*smurf_bnlm_1_0*/, 6 /*bnlm_3_4*/, 0 /*bxt_demosaic*/, 0 /*vcsc_2_0_b*/, 0 /*gltm_2_0*/, 220 /*ifd_segmap_xnr_1_4*/, 0 /*smurf_xnr_1_0*/, 5 /*xnr_5_4*/, 0 /*vcr_3_1*/, 0 /*glim_2_0*/, 220 /*ifd_segmap_acm_1_4*/, 0 /*smurf_acm_1_0*/, 5 /*acm_1_2*/, 0 /*gammatm_v4*/, 0 /*csc_1_1*/, 5 /*b2i_ds_1_1*/, 220 /*lbff_crop_espa_1_4*/, 0 /*image_upscaler_1_1*/, 32 /*gmv_statistics_1_1*/, 220 /*odr_gmv_feature_1_4*/, 220 /*odr_gmv_match_1_4*/, 220 /*ifd_segmap_cas_1_4*/, 0 /*smurf_cas_1_0*/, 5 /*cas_1_1*/, 220 /*odr_ofs_mp_1_4*/, 5 /*b2i_ds_output_1_1*/, 220 /*odr_ofs_dp_1_4*/}; + uint16_t runKernelConfigOrder[51] = {0 /*ifd_pipe_1_4*/, 1 /*bxt_blc*/, 2 /*linearization2_0*/, 3 /*dpc_2_2*/, 5 /*rgb_ir_2_0*/, 4 /*odr_dpc_pdaf_1_4*/, 6 /*ifd_lsc_1_4*/, 7 /*lsc_1_2*/, 8 /*gd_2_2*/, 9 /*wb_1_1*/, 25 /*bnlm_3_4*/, 26 /*bxt_demosaic*/, 27 /*vcsc_2_0_b*/, 28 /*gltm_2_0*/, 31 /*xnr_5_4*/, 32 /*vcr_3_1*/, 33 /*glim_2_0*/, 36 /*acm_1_2*/, 37 /*gammatm_v4*/, 38 /*csc_1_1*/, 39 /*b2i_ds_1_1*/, 40 /*lbff_crop_espa_1_4*/, 41 /*image_upscaler_1_1*/, 47 /*cas_1_1*/, 48 /*odr_ofs_mp_1_4*/, 49 /*b2i_ds_output_1_1*/, 50 /*odr_ofs_dp_1_4*/, 10 /*rgbs_grid_1_1*/, 13 /*odr_awb_std_1_4*/, 14 /*odr_awb_sat_1_4*/, 11 /*ccm_3a_2_0*/, 15 /*aestatistics_2_1*/, 16 /*odr_ae_1_4*/, 12 /*fr_grid_1_0*/, 17 /*odr_af_std_1_4*/, 18 /*ifd_pdaf_1_4*/, 19 /*pext_1_0*/, 20 /*pafstatistics_1_2*/, 21 /*odr_pdaf_1_4*/, 22 /*ifd_gmv_1_4*/, 42 /*gmv_statistics_1_1*/, 43 /*odr_gmv_feature_1_4*/, 44 /*odr_gmv_match_1_4*/, 23 /*ifd_segmap_bnlm_1_4*/, 29 /*ifd_segmap_xnr_1_4*/, 34 /*ifd_segmap_acm_1_4*/, 45 /*ifd_segmap_cas_1_4*/, 24 /*smurf_bnlm_1_0*/, 30 /*smurf_xnr_1_0*/, 35 /*smurf_acm_1_0*/, 46 /*smurf_cas_1_0*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // Metadata update + nodeKernels.kernelList[25].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void WithCvOuterNode::Init(WithCvOuterNodeConfiguration* selectedGraphConfiguration) +{ + OuterNode::Init(2, NodeTypes::Isys, 6, selectedGraphConfiguration->tuningMode, selectedGraphConfiguration->streamId, selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[6] = {36280 /*crop_bpp_adjust_1_0*/, 5420 /*upipe_1_0*/, 26150 /*isys_drainer_1_0*/, 11470 /*is_odr_a*/, 55449 /*is_odr_b*/, 50407 /*is_odr_c*/}; + uint64_t kernelsRcbBitmap[] = {0x3B, 0x0}; // { crop_bpp_adjust_1_0[0], upipe_1_0[1], is_odr_a[3], is_odr_b[4], is_odr_c[5] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x3E, 0x0}; // {{crop_bpp_adjust_1_0}[0], {upipe_1_0}[1], {isys_drainer_1_0}[2], {is_odr_a}[3], {is_odr_b}[4], {is_odr_c}[5] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x3F, 0x0}; // {{crop_bpp_adjust_1_0}[0], {upipe_1_0}[1], {isys_drainer_1_0}[2], {is_odr_a}[3], {is_odr_b}[4], {is_odr_c}[5] } + uint8_t systemApisSizes[6] = {0 /*crop_bpp_adjust_1_0*/, 34 /*upipe_1_0*/, 20 /*isys_drainer_1_0*/, 0 /*is_odr_a*/, 0 /*is_odr_b*/, 0 /*is_odr_c*/}; + uint16_t runKernelConfigOrder[6] = {0 /*crop_bpp_adjust_1_0*/, 1 /*upipe_1_0*/, 2 /*isys_drainer_1_0*/, 3 /*is_odr_a*/, 4 /*is_odr_b*/, 5 /*is_odr_c*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, selectedGraphConfiguration->resolutionHistories, selectedGraphConfiguration->bppInfos, systemApisSizes, selectedGraphConfiguration->systemApiConfiguration, selectedGraphConfiguration->fragmentConfigurations, runKernelConfigOrder); + + // set default inner Node + setInnerNode(None); +} + +/* + * Inner Nodes Setters + */ +void IsysOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + + // No inner nodes + (void)nodeInnerOptions; +} + +void IsysOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + (void)vanishStatus; + return; +} + +void LbffBayerNoGmvNoTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 34; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000064009D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1200000F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x000000003000009F + bitmaps.teb[0] = 0x3000009F; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3E0380000; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000044009D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1200000F9CE8D9BF1F1 + bitmaps.deb[0] = 0x8D9BF1F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x0000000020001E9F + bitmaps.teb[0] = 0x20001E9F; + // REB - 0x00000000000000000000001F12F67FE7 + bitmaps.reb[0] = 0x12F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 26 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x4000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000044009D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1200000F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x000000002000009F + bitmaps.teb[0] = 0x2000009F; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 26 odr_ofs_mp_1_4- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3E4380000; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000024009D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021200000F9CE8D9BF1F1 + bitmaps.deb[0] = 0x8D9BF1F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x0000000010001E9F + bitmaps.teb[0] = 0x10001E9F; + // REB - 0x00000000000000000000001F12F67FE7 + bitmaps.reb[0] = 0x12F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 27 b2i_ds_output_1_1- inner node disablement + // 28 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x18000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000024009D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021200000F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x000000001000009F + bitmaps.teb[0] = 0x1000009F; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 27 b2i_ds_output_1_1- inner node disablement + // 28 odr_ofs_dp_1_4- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3F8380000; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000080001E6811 + bitmaps.rbm[0] = 0x1E6811; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019BF1F1 + bitmaps.deb[0] = 0x19BF1F1; + // TEB - 0x0000000000001E97 + bitmaps.teb[0] = 0x1E97; + // REB - 0x00000000000000000000000002007FE7 + bitmaps.reb[0] = 0x2007FE7; + + // Kernels disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 bnlm_3_4- inner node disablement + // 10 bxt_demosaic- inner node disablement + // 11 vcsc_2_0_b- inner node disablement + // 12 gltm_2_0- inner node disablement + // 13 xnr_5_4- inner node disablement + // 14 vcr_3_1- inner node disablement + // 15 glim_2_0- inner node disablement + // 16 acm_1_2- inner node disablement + // 17 gammatm_v4- inner node disablement + // 18 csc_1_1- inner node disablement + // 22 b2i_ds_1_1- inner node disablement + // 23 lbff_crop_espa_1_4- inner node disablement + // 24 image_upscaler_1_1- inner node disablement + // 25 cas_1_1- inner node disablement + // 26 odr_ofs_mp_1_4- inner node disablement + // 27 b2i_ds_output_1_1- inner node disablement + // 28 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FC7FF80; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgb_ir_2_0- inner node disablement + // 5 ifd_lsc_1_4- inner node disablement + // 6 lsc_1_2- inner node disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 bnlm_3_4- inner node disablement + // 10 bxt_demosaic- inner node disablement + // 11 vcsc_2_0_b- inner node disablement + // 12 gltm_2_0- inner node disablement + // 13 xnr_5_4- inner node disablement + // 14 vcr_3_1- inner node disablement + // 15 glim_2_0- inner node disablement + // 16 acm_1_2- inner node disablement + // 17 gammatm_v4- inner node disablement + // 18 csc_1_1- inner node disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 22 b2i_ds_1_1- inner node disablement + // 23 lbff_crop_espa_1_4- inner node disablement + // 24 image_upscaler_1_1- inner node disablement + // 25 cas_1_1- inner node disablement + // 26 odr_ofs_mp_1_4- inner node disablement + // 27 b2i_ds_output_1_1- inner node disablement + // 28 odr_ofs_dp_1_4- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000064009D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1200000F9CE8D9BF1F1 + bitmaps.deb[0] = 0x8D9BF1F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x0000000030001E9F + bitmaps.teb[0] = 0x30001E9F; + // REB - 0x00000000000000000000001F12F67FE7 + bitmaps.reb[0] = 0x12F67FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffBayerNoGmvNoTnrNoSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 34; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x1FC7FF80; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x1F000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerWithGmvNoTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 38; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x0000000000000000006400BD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E120000FF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x000000003032009F + bitmaps.teb[0] = 0x3032009F; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3E0380000; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x0000000000000000004400BD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C120000FF9CE8D9BF1F1 + bitmaps.deb[0] = 0x8D9BF1F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x0000000020321E9F + bitmaps.teb[0] = 0x20321E9F; + // REB - 0x00000000000000000000001F12F67FE7 + bitmaps.reb[0] = 0x12F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 26 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x4000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x0000000000000000004400BD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C120000FF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x000000002032009F + bitmaps.teb[0] = 0x2032009F; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 26 odr_ofs_mp_1_4- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3E4380000; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x0000000000000000002400BD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x0000000000002120000FF9CE8D9BF1F1 + bitmaps.deb[0] = 0x8D9BF1F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x0000000010321E9F + bitmaps.teb[0] = 0x10321E9F; + // REB - 0x00000000000000000000001F12F67FE7 + bitmaps.reb[0] = 0x12F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 27 b2i_ds_output_1_1- inner node disablement + // 28 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x18000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x0000000000000000002400BD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x0000000000002120000FF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x000000001032009F + bitmaps.teb[0] = 0x1032009F; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 27 b2i_ds_output_1_1- inner node disablement + // 28 odr_ofs_dp_1_4- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3F8380000; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000080001E6811 + bitmaps.rbm[0] = 0x1E6811; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019BF1F1 + bitmaps.deb[0] = 0x19BF1F1; + // TEB - 0x0000000000001E97 + bitmaps.teb[0] = 0x1E97; + // REB - 0x00000000000000000000000002007FE7 + bitmaps.reb[0] = 0x2007FE7; + + // Kernels disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 bnlm_3_4- inner node disablement + // 10 bxt_demosaic- inner node disablement + // 11 vcsc_2_0_b- inner node disablement + // 12 gltm_2_0- inner node disablement + // 13 xnr_5_4- inner node disablement + // 14 vcr_3_1- inner node disablement + // 15 glim_2_0- inner node disablement + // 16 acm_1_2- inner node disablement + // 17 gammatm_v4- inner node disablement + // 18 csc_1_1- inner node disablement + // 22 b2i_ds_1_1- inner node disablement + // 23 lbff_crop_espa_1_4- inner node disablement + // 24 image_upscaler_1_1- inner node disablement + // 25 cas_1_1- inner node disablement + // 26 odr_ofs_mp_1_4- inner node disablement + // 27 b2i_ds_output_1_1- inner node disablement + // 28 odr_ofs_dp_1_4- inner node disablement + // 34 ifd_gmv_1_4- inner node disablement + // 35 gmv_statistics_1_1- inner node disablement + // 36 odr_gmv_feature_1_4- inner node disablement + // 37 odr_gmv_match_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3C1FC7FF80; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgb_ir_2_0- inner node disablement + // 5 ifd_lsc_1_4- inner node disablement + // 6 lsc_1_2- inner node disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 bnlm_3_4- inner node disablement + // 10 bxt_demosaic- inner node disablement + // 11 vcsc_2_0_b- inner node disablement + // 12 gltm_2_0- inner node disablement + // 13 xnr_5_4- inner node disablement + // 14 vcr_3_1- inner node disablement + // 15 glim_2_0- inner node disablement + // 16 acm_1_2- inner node disablement + // 17 gammatm_v4- inner node disablement + // 18 csc_1_1- inner node disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 22 b2i_ds_1_1- inner node disablement + // 23 lbff_crop_espa_1_4- inner node disablement + // 24 image_upscaler_1_1- inner node disablement + // 25 cas_1_1- inner node disablement + // 26 odr_ofs_mp_1_4- inner node disablement + // 27 b2i_ds_output_1_1- inner node disablement + // 28 odr_ofs_dp_1_4- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + // 34 ifd_gmv_1_4- inner node disablement + // 35 gmv_statistics_1_1- inner node disablement + // 36 odr_gmv_feature_1_4- inner node disablement + // 37 odr_gmv_match_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFF; + } + else // default inner node + { + // RBM - 0x0000000000000000006400BD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E120000FF9CE8D9BF1F1 + bitmaps.deb[0] = 0x8D9BF1F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x0000000030321E9F + bitmaps.teb[0] = 0x30321E9F; + // REB - 0x00000000000000000000001F12F67FE7 + bitmaps.reb[0] = 0x12F67FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffBayerWithGmvNoTnrNoSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 38; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x3C1FC7FF80; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x1F000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void SwGdcOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + + // No inner nodes + (void)nodeInnerOptions; +} + +void SwGdcOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + (void)vanishStatus; + return; +} + +void LbffBayerNoGmvWithTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 46; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FC9D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E13E79F0F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC0009F + bitmaps.teb[0] = 0x3FC0009F; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 26 odr_awb_std_1_4- inner node disablement + // 27 odr_awb_sat_1_4- inner node disablement + // 28 aestatistics_2_1- inner node disablement + // 29 odr_ae_1_4- inner node disablement + // 30 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7C380000; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C13E79F0F9CE8D9BF1F1 + bitmaps.deb[0] = 0x8D9BF1F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC01E9F + bitmaps.teb[0] = 0x2FC01E9F; + // REB - 0x00000000000000000000001FF2F67FE7 + bitmaps.reb[0] = 0xF2F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 42 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x40000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C13E79F0F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC0009F + bitmaps.teb[0] = 0x2FC0009F; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 26 odr_awb_std_1_4- inner node disablement + // 27 odr_awb_sat_1_4- inner node disablement + // 28 aestatistics_2_1- inner node disablement + // 29 odr_ae_1_4- inner node disablement + // 30 odr_af_std_1_4- inner node disablement + // 42 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x4007C380000; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x000000000000213E79F0F9CE8D9BF1F1 + bitmaps.deb[0] = 0x8D9BF1F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC01E9F + bitmaps.teb[0] = 0x1FC01E9F; + // REB - 0x00000000000000000000001FF2F67FE7 + bitmaps.reb[0] = 0xF2F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 43 b2i_ds_output_1_1- inner node disablement + // 44 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x180000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x000000000000213E79F0F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC0009F + bitmaps.teb[0] = 0x1FC0009F; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 26 odr_awb_std_1_4- inner node disablement + // 27 odr_awb_sat_1_4- inner node disablement + // 28 aestatistics_2_1- inner node disablement + // 29 odr_ae_1_4- inner node disablement + // 30 odr_af_std_1_4- inner node disablement + // 43 b2i_ds_output_1_1- inner node disablement + // 44 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x18007C380000; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000080001E6811 + bitmaps.rbm[0] = 0x1E6811; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019BF1F1 + bitmaps.deb[0] = 0x19BF1F1; + // TEB - 0x0000000000001E97 + bitmaps.teb[0] = 0x1E97; + // REB - 0x00000000000000000000000002007FE7 + bitmaps.reb[0] = 0x2007FE7; + + // Kernels disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 bnlm_3_4- inner node disablement + // 10 bxt_demosaic- inner node disablement + // 11 vcsc_2_0_b- inner node disablement + // 12 gltm_2_0- inner node disablement + // 13 xnr_5_4- inner node disablement + // 14 vcr_3_1- inner node disablement + // 15 glim_2_0- inner node disablement + // 16 acm_1_2- inner node disablement + // 17 gammatm_v4- inner node disablement + // 18 csc_1_1- inner node disablement + // 22 b2i_ds_1_1- inner node disablement + // 23 lbff_crop_espa_1_4- inner node disablement + // 24 tnr7_spatial_1_1- inner node disablement + // 25 tnr_scaler_lb_1_1- inner node disablement + // 31 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 32 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 33 tnr7_ims_1_2- inner node disablement + // 34 tnr7_bc_1_2- inner node disablement + // 35 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 36 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 37 tnr7_blend_1_1- inner node disablement + // 38 odr_tnr_fp_yuvn_1_4- inner node disablement + // 39 tnr_scaler_fp_1_1- inner node disablement + // 40 image_upscaler_1_1- inner node disablement + // 41 cas_1_1- inner node disablement + // 42 odr_ofs_mp_1_4- inner node disablement + // 43 b2i_ds_output_1_1- inner node disablement + // 44 odr_ofs_dp_1_4- inner node disablement + // 45 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFF83C7FF80; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgb_ir_2_0- inner node disablement + // 5 ifd_lsc_1_4- inner node disablement + // 6 lsc_1_2- inner node disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 bnlm_3_4- inner node disablement + // 10 bxt_demosaic- inner node disablement + // 11 vcsc_2_0_b- inner node disablement + // 12 gltm_2_0- inner node disablement + // 13 xnr_5_4- inner node disablement + // 14 vcr_3_1- inner node disablement + // 15 glim_2_0- inner node disablement + // 16 acm_1_2- inner node disablement + // 17 gammatm_v4- inner node disablement + // 18 csc_1_1- inner node disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 22 b2i_ds_1_1- inner node disablement + // 23 lbff_crop_espa_1_4- inner node disablement + // 24 tnr7_spatial_1_1- inner node disablement + // 25 tnr_scaler_lb_1_1- inner node disablement + // 26 odr_awb_std_1_4- inner node disablement + // 27 odr_awb_sat_1_4- inner node disablement + // 28 aestatistics_2_1- inner node disablement + // 29 odr_ae_1_4- inner node disablement + // 30 odr_af_std_1_4- inner node disablement + // 31 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 32 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 33 tnr7_ims_1_2- inner node disablement + // 34 tnr7_bc_1_2- inner node disablement + // 35 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 36 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 37 tnr7_blend_1_1- inner node disablement + // 38 odr_tnr_fp_yuvn_1_4- inner node disablement + // 39 tnr_scaler_fp_1_1- inner node disablement + // 40 image_upscaler_1_1- inner node disablement + // 41 cas_1_1- inner node disablement + // 42 odr_ofs_mp_1_4- inner node disablement + // 43 b2i_ds_output_1_1- inner node disablement + // 44 odr_ofs_dp_1_4- inner node disablement + // 45 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000067FC9D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E13E79F0F9CE8D9BF1F1 + bitmaps.deb[0] = 0x8D9BF1F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC01E9F + bitmaps.teb[0] = 0x3FC01E9F; + // REB - 0x00000000000000000000001FF2F67FE7 + bitmaps.reb[0] = 0xF2F67FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffBayerNoGmvWithTnrNoSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 46; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x3FFF83C7FF80; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x1F0000000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerWithGmvWithTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 50; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FCBD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E13E79FFF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FF2009F + bitmaps.teb[0] = 0x3FF2009F; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 26 odr_awb_std_1_4- inner node disablement + // 27 odr_awb_sat_1_4- inner node disablement + // 28 aestatistics_2_1- inner node disablement + // 29 odr_ae_1_4- inner node disablement + // 30 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7C380000; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C13E79FFF9CE8D9BF1F1 + bitmaps.deb[0] = 0x8D9BF1F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FF21E9F + bitmaps.teb[0] = 0x2FF21E9F; + // REB - 0x00000000000000000000001FF2F67FE7 + bitmaps.reb[0] = 0xF2F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 46 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x400000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C13E79FFF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FF2009F + bitmaps.teb[0] = 0x2FF2009F; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 26 odr_awb_std_1_4- inner node disablement + // 27 odr_awb_sat_1_4- inner node disablement + // 28 aestatistics_2_1- inner node disablement + // 29 odr_ae_1_4- inner node disablement + // 30 odr_af_std_1_4- inner node disablement + // 46 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x40007C380000; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x000000000000213E79FFF9CE8D9BF1F1 + bitmaps.deb[0] = 0x8D9BF1F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FF21E9F + bitmaps.teb[0] = 0x1FF21E9F; + // REB - 0x00000000000000000000001FF2F67FE7 + bitmaps.reb[0] = 0xF2F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1800000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x000000000000213E79FFF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FF2009F + bitmaps.teb[0] = 0x1FF2009F; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 26 odr_awb_std_1_4- inner node disablement + // 27 odr_awb_sat_1_4- inner node disablement + // 28 aestatistics_2_1- inner node disablement + // 29 odr_ae_1_4- inner node disablement + // 30 odr_af_std_1_4- inner node disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x180007C380000; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000080001E6811 + bitmaps.rbm[0] = 0x1E6811; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019BF1F1 + bitmaps.deb[0] = 0x19BF1F1; + // TEB - 0x0000000000001E97 + bitmaps.teb[0] = 0x1E97; + // REB - 0x00000000000000000000000002007FE7 + bitmaps.reb[0] = 0x2007FE7; + + // Kernels disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 bnlm_3_4- inner node disablement + // 10 bxt_demosaic- inner node disablement + // 11 vcsc_2_0_b- inner node disablement + // 12 gltm_2_0- inner node disablement + // 13 xnr_5_4- inner node disablement + // 14 vcr_3_1- inner node disablement + // 15 glim_2_0- inner node disablement + // 16 acm_1_2- inner node disablement + // 17 gammatm_v4- inner node disablement + // 18 csc_1_1- inner node disablement + // 22 b2i_ds_1_1- inner node disablement + // 23 lbff_crop_espa_1_4- inner node disablement + // 24 tnr7_spatial_1_1- inner node disablement + // 25 tnr_scaler_lb_1_1- inner node disablement + // 31 ifd_gmv_1_4- inner node disablement + // 32 gmv_statistics_1_1- inner node disablement + // 33 odr_gmv_feature_1_4- inner node disablement + // 34 odr_gmv_match_1_4- inner node disablement + // 35 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 36 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 37 tnr7_ims_1_2- inner node disablement + // 38 tnr7_bc_1_2- inner node disablement + // 39 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 40 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 41 tnr7_blend_1_1- inner node disablement + // 42 odr_tnr_fp_yuvn_1_4- inner node disablement + // 43 tnr_scaler_fp_1_1- inner node disablement + // 44 image_upscaler_1_1- inner node disablement + // 45 cas_1_1- inner node disablement + // 46 odr_ofs_mp_1_4- inner node disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + // 49 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFF83C7FF80; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgb_ir_2_0- inner node disablement + // 5 ifd_lsc_1_4- inner node disablement + // 6 lsc_1_2- inner node disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 bnlm_3_4- inner node disablement + // 10 bxt_demosaic- inner node disablement + // 11 vcsc_2_0_b- inner node disablement + // 12 gltm_2_0- inner node disablement + // 13 xnr_5_4- inner node disablement + // 14 vcr_3_1- inner node disablement + // 15 glim_2_0- inner node disablement + // 16 acm_1_2- inner node disablement + // 17 gammatm_v4- inner node disablement + // 18 csc_1_1- inner node disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 22 b2i_ds_1_1- inner node disablement + // 23 lbff_crop_espa_1_4- inner node disablement + // 24 tnr7_spatial_1_1- inner node disablement + // 25 tnr_scaler_lb_1_1- inner node disablement + // 26 odr_awb_std_1_4- inner node disablement + // 27 odr_awb_sat_1_4- inner node disablement + // 28 aestatistics_2_1- inner node disablement + // 29 odr_ae_1_4- inner node disablement + // 30 odr_af_std_1_4- inner node disablement + // 31 ifd_gmv_1_4- inner node disablement + // 32 gmv_statistics_1_1- inner node disablement + // 33 odr_gmv_feature_1_4- inner node disablement + // 34 odr_gmv_match_1_4- inner node disablement + // 35 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 36 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 37 tnr7_ims_1_2- inner node disablement + // 38 tnr7_bc_1_2- inner node disablement + // 39 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 40 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 41 tnr7_blend_1_1- inner node disablement + // 42 odr_tnr_fp_yuvn_1_4- inner node disablement + // 43 tnr_scaler_fp_1_1- inner node disablement + // 44 image_upscaler_1_1- inner node disablement + // 45 cas_1_1- inner node disablement + // 46 odr_ofs_mp_1_4- inner node disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + // 49 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000067FCBD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E13E79FFF9CE8D9BF1F1 + bitmaps.deb[0] = 0x8D9BF1F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FF21E9F + bitmaps.teb[0] = 0x3FF21E9F; + // REB - 0x00000000000000000000001FF2F67FE7 + bitmaps.reb[0] = 0xF2F67FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffBayerWithGmvWithTnrNoSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 50; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x3FFFF83C7FF80; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x1F00000000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void IsysWithCvOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + + // No inner nodes + (void)nodeInnerOptions; +} + +void IsysWithCvOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + (void)vanishStatus; + return; +} + +void SwSegnetOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + + // No inner nodes + (void)nodeInnerOptions; +} + +void SwSegnetOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + (void)vanishStatus; + return; +} + +void LbffBayerWithGmvWithTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 62; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FCBD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E1FFFFFFFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFF2009F + bitmaps.teb[0] = 0xFFF2009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FE00; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C1FFFFFFFFFEED9BF1F1 + bitmaps.deb[0] = 0xED9BF1F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFF21E9F + bitmaps.teb[0] = 0xEFF21E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F67FE7 + bitmaps.reb[0] = 0xF2F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 59 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x800000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C1FFFFFFFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFF2009F + bitmaps.teb[0] = 0xEFF2009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 59 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x80000000001FE00; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x00000000000021FFFFFFFFFEED9BF1F1 + bitmaps.deb[0] = 0xED9BF1F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFF21E9F + bitmaps.teb[0] = 0xDFF21E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F67FE7 + bitmaps.reb[0] = 0xF2F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 60 b2i_ds_output_1_1- inner node disablement + // 61 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3000000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x00000000000021FFFFFFFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFF2009F + bitmaps.teb[0] = 0xDFF2009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 60 b2i_ds_output_1_1- inner node disablement + // 61 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x300000000001FE00; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000080001E6811 + bitmaps.rbm[0] = 0x1E6811; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019BF1F1 + bitmaps.deb[0] = 0x19BF1F1; + // TEB - 0x0000000000001E97 + bitmaps.teb[0] = 0x1E97; + // REB - 0x00000000000000000000000002007FE7 + bitmaps.reb[0] = 0x2007FE7; + + // Kernels disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 17 ifd_gmv_1_4- inner node disablement + // 18 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 19 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 20 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 21 ifd_segmap_bnlm_1_4- inner node disablement + // 22 smurf_bnlm_1_0- inner node disablement + // 23 bnlm_3_4- inner node disablement + // 24 bxt_demosaic- inner node disablement + // 25 vcsc_2_0_b- inner node disablement + // 26 gltm_2_0- inner node disablement + // 27 ifd_segmap_xnr_1_4- inner node disablement + // 28 smurf_xnr_1_0- inner node disablement + // 29 xnr_5_4- inner node disablement + // 30 vcr_3_1- inner node disablement + // 31 glim_2_0- inner node disablement + // 32 ifd_segmap_acm_1_4- inner node disablement + // 33 smurf_acm_1_0- inner node disablement + // 34 acm_1_2- inner node disablement + // 35 gammatm_v4- inner node disablement + // 36 csc_1_1- inner node disablement + // 37 b2i_ds_1_1- inner node disablement + // 38 lbff_crop_espa_1_4- inner node disablement + // 39 tnr7_spatial_1_1- inner node disablement + // 40 tnr_scaler_lb_1_1- inner node disablement + // 41 tnr7_ims_1_2- inner node disablement + // 42 gmv_statistics_1_1- inner node disablement + // 43 odr_gmv_feature_1_4- inner node disablement + // 44 odr_gmv_match_1_4- inner node disablement + // 45 ifd_segmap_tnr_bc_1_4- inner node disablement + // 46 smurf_tnr_bc_1_0- inner node disablement + // 47 tnr7_bc_1_2- inner node disablement + // 48 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 49 ifd_segmap_tnr_blend_1_4- inner node disablement + // 50 smurf_tnr_blend_1_0- inner node disablement + // 51 tnr7_blend_1_1- inner node disablement + // 52 odr_tnr_fp_yuvn_1_4- inner node disablement + // 53 tnr_scaler_fp_1_1- inner node disablement + // 54 image_upscaler_1_1- inner node disablement + // 55 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 56 ifd_segmap_cas_1_4- inner node disablement + // 57 smurf_cas_1_0- inner node disablement + // 58 cas_1_1- inner node disablement + // 59 odr_ofs_mp_1_4- inner node disablement + // 60 b2i_ds_output_1_1- inner node disablement + // 61 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFFE0180; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgb_ir_2_0- inner node disablement + // 5 ifd_lsc_1_4- inner node disablement + // 6 lsc_1_2- inner node disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_gmv_1_4- inner node disablement + // 18 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 19 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 20 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 21 ifd_segmap_bnlm_1_4- inner node disablement + // 22 smurf_bnlm_1_0- inner node disablement + // 23 bnlm_3_4- inner node disablement + // 24 bxt_demosaic- inner node disablement + // 25 vcsc_2_0_b- inner node disablement + // 26 gltm_2_0- inner node disablement + // 27 ifd_segmap_xnr_1_4- inner node disablement + // 28 smurf_xnr_1_0- inner node disablement + // 29 xnr_5_4- inner node disablement + // 30 vcr_3_1- inner node disablement + // 31 glim_2_0- inner node disablement + // 32 ifd_segmap_acm_1_4- inner node disablement + // 33 smurf_acm_1_0- inner node disablement + // 34 acm_1_2- inner node disablement + // 35 gammatm_v4- inner node disablement + // 36 csc_1_1- inner node disablement + // 37 b2i_ds_1_1- inner node disablement + // 38 lbff_crop_espa_1_4- inner node disablement + // 39 tnr7_spatial_1_1- inner node disablement + // 40 tnr_scaler_lb_1_1- inner node disablement + // 41 tnr7_ims_1_2- inner node disablement + // 42 gmv_statistics_1_1- inner node disablement + // 43 odr_gmv_feature_1_4- inner node disablement + // 44 odr_gmv_match_1_4- inner node disablement + // 45 ifd_segmap_tnr_bc_1_4- inner node disablement + // 46 smurf_tnr_bc_1_0- inner node disablement + // 47 tnr7_bc_1_2- inner node disablement + // 48 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 49 ifd_segmap_tnr_blend_1_4- inner node disablement + // 50 smurf_tnr_blend_1_0- inner node disablement + // 51 tnr7_blend_1_1- inner node disablement + // 52 odr_tnr_fp_yuvn_1_4- inner node disablement + // 53 tnr_scaler_fp_1_1- inner node disablement + // 54 image_upscaler_1_1- inner node disablement + // 55 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 56 ifd_segmap_cas_1_4- inner node disablement + // 57 smurf_cas_1_0- inner node disablement + // 58 cas_1_1- inner node disablement + // 59 odr_ofs_mp_1_4- inner node disablement + // 60 b2i_ds_output_1_1- inner node disablement + // 61 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000067FCBD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E1FFFFFFFFFEED9BF1F1 + bitmaps.deb[0] = 0xED9BF1F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFF21E9F + bitmaps.teb[0] = 0xFFF21E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F67FE7 + bitmaps.reb[0] = 0xF2F67FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffBayerWithGmvWithTnrWithSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 62; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x3FFFFFFFFFFE0180; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x3F40000000000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void SwScalerOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + + // No inner nodes + (void)nodeInnerOptions; +} + +void SwScalerOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + (void)vanishStatus; + return; +} + +void SwNntmOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + + // No inner nodes + (void)nodeInnerOptions; +} + +void SwNntmOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + (void)vanishStatus; + return; +} + +void LbffBayerNoGmvWithTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 58; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FC9D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E1FFFFF0FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFC0009F + bitmaps.teb[0] = 0xFFC0009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FE00; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C1FFFFF0FFFEED9BF1F1 + bitmaps.deb[0] = 0xED9BF1F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFC01E9F + bitmaps.teb[0] = 0xEFC01E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F67FE7 + bitmaps.reb[0] = 0xF2F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 55 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x80000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C1FFFFF0FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFC0009F + bitmaps.teb[0] = 0xEFC0009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 55 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x8000000001FE00; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x00000000000021FFFFF0FFFEED9BF1F1 + bitmaps.deb[0] = 0xED9BF1F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFC01E9F + bitmaps.teb[0] = 0xDFC01E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F67FE7 + bitmaps.reb[0] = 0xF2F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 56 b2i_ds_output_1_1- inner node disablement + // 57 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x300000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x00000000000021FFFFF0FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFC0009F + bitmaps.teb[0] = 0xDFC0009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 56 b2i_ds_output_1_1- inner node disablement + // 57 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x30000000001FE00; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000080001E6811 + bitmaps.rbm[0] = 0x1E6811; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019BF1F1 + bitmaps.deb[0] = 0x19BF1F1; + // TEB - 0x0000000000001E97 + bitmaps.teb[0] = 0x1E97; + // REB - 0x00000000000000000000000002007FE7 + bitmaps.reb[0] = 0x2007FE7; + + // Kernels disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 17 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 18 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 19 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 20 ifd_segmap_bnlm_1_4- inner node disablement + // 21 smurf_bnlm_1_0- inner node disablement + // 22 bnlm_3_4- inner node disablement + // 23 bxt_demosaic- inner node disablement + // 24 vcsc_2_0_b- inner node disablement + // 25 gltm_2_0- inner node disablement + // 26 ifd_segmap_xnr_1_4- inner node disablement + // 27 smurf_xnr_1_0- inner node disablement + // 28 xnr_5_4- inner node disablement + // 29 vcr_3_1- inner node disablement + // 30 glim_2_0- inner node disablement + // 31 ifd_segmap_acm_1_4- inner node disablement + // 32 smurf_acm_1_0- inner node disablement + // 33 acm_1_2- inner node disablement + // 34 gammatm_v4- inner node disablement + // 35 csc_1_1- inner node disablement + // 36 b2i_ds_1_1- inner node disablement + // 37 lbff_crop_espa_1_4- inner node disablement + // 38 tnr7_spatial_1_1- inner node disablement + // 39 tnr_scaler_lb_1_1- inner node disablement + // 40 tnr7_ims_1_2- inner node disablement + // 41 ifd_segmap_tnr_bc_1_4- inner node disablement + // 42 smurf_tnr_bc_1_0- inner node disablement + // 43 tnr7_bc_1_2- inner node disablement + // 44 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 45 ifd_segmap_tnr_blend_1_4- inner node disablement + // 46 smurf_tnr_blend_1_0- inner node disablement + // 47 tnr7_blend_1_1- inner node disablement + // 48 odr_tnr_fp_yuvn_1_4- inner node disablement + // 49 tnr_scaler_fp_1_1- inner node disablement + // 50 image_upscaler_1_1- inner node disablement + // 51 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 52 ifd_segmap_cas_1_4- inner node disablement + // 53 smurf_cas_1_0- inner node disablement + // 54 cas_1_1- inner node disablement + // 55 odr_ofs_mp_1_4- inner node disablement + // 56 b2i_ds_output_1_1- inner node disablement + // 57 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFE0180; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgb_ir_2_0- inner node disablement + // 5 ifd_lsc_1_4- inner node disablement + // 6 lsc_1_2- inner node disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 18 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 19 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 20 ifd_segmap_bnlm_1_4- inner node disablement + // 21 smurf_bnlm_1_0- inner node disablement + // 22 bnlm_3_4- inner node disablement + // 23 bxt_demosaic- inner node disablement + // 24 vcsc_2_0_b- inner node disablement + // 25 gltm_2_0- inner node disablement + // 26 ifd_segmap_xnr_1_4- inner node disablement + // 27 smurf_xnr_1_0- inner node disablement + // 28 xnr_5_4- inner node disablement + // 29 vcr_3_1- inner node disablement + // 30 glim_2_0- inner node disablement + // 31 ifd_segmap_acm_1_4- inner node disablement + // 32 smurf_acm_1_0- inner node disablement + // 33 acm_1_2- inner node disablement + // 34 gammatm_v4- inner node disablement + // 35 csc_1_1- inner node disablement + // 36 b2i_ds_1_1- inner node disablement + // 37 lbff_crop_espa_1_4- inner node disablement + // 38 tnr7_spatial_1_1- inner node disablement + // 39 tnr_scaler_lb_1_1- inner node disablement + // 40 tnr7_ims_1_2- inner node disablement + // 41 ifd_segmap_tnr_bc_1_4- inner node disablement + // 42 smurf_tnr_bc_1_0- inner node disablement + // 43 tnr7_bc_1_2- inner node disablement + // 44 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 45 ifd_segmap_tnr_blend_1_4- inner node disablement + // 46 smurf_tnr_blend_1_0- inner node disablement + // 47 tnr7_blend_1_1- inner node disablement + // 48 odr_tnr_fp_yuvn_1_4- inner node disablement + // 49 tnr_scaler_fp_1_1- inner node disablement + // 50 image_upscaler_1_1- inner node disablement + // 51 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 52 ifd_segmap_cas_1_4- inner node disablement + // 53 smurf_cas_1_0- inner node disablement + // 54 cas_1_1- inner node disablement + // 55 odr_ofs_mp_1_4- inner node disablement + // 56 b2i_ds_output_1_1- inner node disablement + // 57 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000067FC9D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E1FFFFF0FFFEED9BF1F1 + bitmaps.deb[0] = 0xED9BF1F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFC01E9F + bitmaps.teb[0] = 0xFFC01E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F67FE7 + bitmaps.reb[0] = 0xF2F67FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffBayerNoGmvWithTnrWithSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 58; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x3FFFFFFFFFE0180; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x3F4000000000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void IsysPdaf2WithCvOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + + // No inner nodes + (void)nodeInnerOptions; +} + +void IsysPdaf2WithCvOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + (void)vanishStatus; + return; +} + +void LbffBayerPdaf2NoGmvWithTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 62; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FC9D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E1FFFFF0FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFC0009F + bitmaps.teb[0] = 0xFFC0009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_pdaf_1_4- inner node disablement + // 18 pext_1_0- inner node disablement + // 19 pafstatistics_1_2- inner node disablement + // 20 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFE00; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FD9D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x47FD9D; + // DEB - 0x000000000000C1FFFFF0FFFEEDDBFFF1 + bitmaps.deb[0] = 0xEDDBFFF1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFC03F9F + bitmaps.teb[0] = 0xEFC03F9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F77FE7 + bitmaps.reb[0] = 0xF6F77FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 59 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x800000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C1FFFFF0FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFC0009F + bitmaps.teb[0] = 0xEFC0009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_pdaf_1_4- inner node disablement + // 18 pext_1_0- inner node disablement + // 19 pafstatistics_1_2- inner node disablement + // 20 odr_pdaf_1_4- inner node disablement + // 59 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x8000000001FFE00; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FD9D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x27FD9D; + // DEB - 0x00000000000021FFFFF0FFFEEDDBFFF1 + bitmaps.deb[0] = 0xEDDBFFF1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFC03F9F + bitmaps.teb[0] = 0xDFC03F9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F77FE7 + bitmaps.reb[0] = 0xF6F77FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 60 b2i_ds_output_1_1- inner node disablement + // 61 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3000000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x00000000000021FFFFF0FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFC0009F + bitmaps.teb[0] = 0xDFC0009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_pdaf_1_4- inner node disablement + // 18 pext_1_0- inner node disablement + // 19 pafstatistics_1_2- inner node disablement + // 20 odr_pdaf_1_4- inner node disablement + // 60 b2i_ds_output_1_1- inner node disablement + // 61 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x30000000001FFE00; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000180001E6811 + bitmaps.rbm[0] = 0x1E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001DBFFF1 + bitmaps.deb[0] = 0x1DBFFF1; + // TEB - 0x0000000000003F97 + bitmaps.teb[0] = 0x3F97; + // REB - 0x00000000000000000000000006017FE7 + bitmaps.reb[0] = 0x6017FE7; + + // Kernels disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 21 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 22 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 23 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 24 ifd_segmap_bnlm_1_4- inner node disablement + // 25 smurf_bnlm_1_0- inner node disablement + // 26 bnlm_3_4- inner node disablement + // 27 bxt_demosaic- inner node disablement + // 28 vcsc_2_0_b- inner node disablement + // 29 gltm_2_0- inner node disablement + // 30 ifd_segmap_xnr_1_4- inner node disablement + // 31 smurf_xnr_1_0- inner node disablement + // 32 xnr_5_4- inner node disablement + // 33 vcr_3_1- inner node disablement + // 34 glim_2_0- inner node disablement + // 35 ifd_segmap_acm_1_4- inner node disablement + // 36 smurf_acm_1_0- inner node disablement + // 37 acm_1_2- inner node disablement + // 38 gammatm_v4- inner node disablement + // 39 csc_1_1- inner node disablement + // 40 b2i_ds_1_1- inner node disablement + // 41 lbff_crop_espa_1_4- inner node disablement + // 42 tnr7_spatial_1_1- inner node disablement + // 43 tnr_scaler_lb_1_1- inner node disablement + // 44 tnr7_ims_1_2- inner node disablement + // 45 ifd_segmap_tnr_bc_1_4- inner node disablement + // 46 smurf_tnr_bc_1_0- inner node disablement + // 47 tnr7_bc_1_2- inner node disablement + // 48 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 49 ifd_segmap_tnr_blend_1_4- inner node disablement + // 50 smurf_tnr_blend_1_0- inner node disablement + // 51 tnr7_blend_1_1- inner node disablement + // 52 odr_tnr_fp_yuvn_1_4- inner node disablement + // 53 tnr_scaler_fp_1_1- inner node disablement + // 54 image_upscaler_1_1- inner node disablement + // 55 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 56 ifd_segmap_cas_1_4- inner node disablement + // 57 smurf_cas_1_0- inner node disablement + // 58 cas_1_1- inner node disablement + // 59 odr_ofs_mp_1_4- inner node disablement + // 60 b2i_ds_output_1_1- inner node disablement + // 61 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFE00180; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgb_ir_2_0- inner node disablement + // 5 ifd_lsc_1_4- inner node disablement + // 6 lsc_1_2- inner node disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_pdaf_1_4- inner node disablement + // 18 pext_1_0- inner node disablement + // 19 pafstatistics_1_2- inner node disablement + // 20 odr_pdaf_1_4- inner node disablement + // 21 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 22 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 23 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 24 ifd_segmap_bnlm_1_4- inner node disablement + // 25 smurf_bnlm_1_0- inner node disablement + // 26 bnlm_3_4- inner node disablement + // 27 bxt_demosaic- inner node disablement + // 28 vcsc_2_0_b- inner node disablement + // 29 gltm_2_0- inner node disablement + // 30 ifd_segmap_xnr_1_4- inner node disablement + // 31 smurf_xnr_1_0- inner node disablement + // 32 xnr_5_4- inner node disablement + // 33 vcr_3_1- inner node disablement + // 34 glim_2_0- inner node disablement + // 35 ifd_segmap_acm_1_4- inner node disablement + // 36 smurf_acm_1_0- inner node disablement + // 37 acm_1_2- inner node disablement + // 38 gammatm_v4- inner node disablement + // 39 csc_1_1- inner node disablement + // 40 b2i_ds_1_1- inner node disablement + // 41 lbff_crop_espa_1_4- inner node disablement + // 42 tnr7_spatial_1_1- inner node disablement + // 43 tnr_scaler_lb_1_1- inner node disablement + // 44 tnr7_ims_1_2- inner node disablement + // 45 ifd_segmap_tnr_bc_1_4- inner node disablement + // 46 smurf_tnr_bc_1_0- inner node disablement + // 47 tnr7_bc_1_2- inner node disablement + // 48 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 49 ifd_segmap_tnr_blend_1_4- inner node disablement + // 50 smurf_tnr_blend_1_0- inner node disablement + // 51 tnr7_blend_1_1- inner node disablement + // 52 odr_tnr_fp_yuvn_1_4- inner node disablement + // 53 tnr_scaler_fp_1_1- inner node disablement + // 54 image_upscaler_1_1- inner node disablement + // 55 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 56 ifd_segmap_cas_1_4- inner node disablement + // 57 smurf_cas_1_0- inner node disablement + // 58 cas_1_1- inner node disablement + // 59 odr_ofs_mp_1_4- inner node disablement + // 60 b2i_ds_output_1_1- inner node disablement + // 61 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000067FD9D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x67FD9D; + // DEB - 0x000000000000E1FFFFF0FFFEEDDBFFF1 + bitmaps.deb[0] = 0xEDDBFFF1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFC03F9F + bitmaps.teb[0] = 0xFFC03F9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F77FE7 + bitmaps.reb[0] = 0xF6F77FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffBayerPdaf2NoGmvWithTnrWithSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 62; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x3FFFFFFFFFE00180; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x3F40000000000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf2WithTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 66; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FCBD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E1FFFFFFFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFF2009F + bitmaps.teb[0] = 0xFFF2009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_pdaf_1_4- inner node disablement + // 18 pext_1_0- inner node disablement + // 19 pafstatistics_1_2- inner node disablement + // 20 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFE00; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FDBD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x47FDBD; + // DEB - 0x000000000000C1FFFFFFFFFEEDDBFFF1 + bitmaps.deb[0] = 0xEDDBFFF1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFF23F9F + bitmaps.teb[0] = 0xEFF23F9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F77FE7 + bitmaps.reb[0] = 0xF6F77FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 63 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x8000000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C1FFFFFFFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFF2009F + bitmaps.teb[0] = 0xEFF2009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_pdaf_1_4- inner node disablement + // 18 pext_1_0- inner node disablement + // 19 pafstatistics_1_2- inner node disablement + // 20 odr_pdaf_1_4- inner node disablement + // 63 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x80000000001FFE00; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FDBD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x27FDBD; + // DEB - 0x00000000000021FFFFFFFFFEEDDBFFF1 + bitmaps.deb[0] = 0xEDDBFFF1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFF23F9F + bitmaps.teb[0] = 0xDFF23F9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F77FE7 + bitmaps.reb[0] = 0xF6F77FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 64 b2i_ds_output_1_1- inner node disablement + // 65 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[1] = 0x3; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x00000000000021FFFFFFFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFF2009F + bitmaps.teb[0] = 0xDFF2009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_pdaf_1_4- inner node disablement + // 18 pext_1_0- inner node disablement + // 19 pafstatistics_1_2- inner node disablement + // 20 odr_pdaf_1_4- inner node disablement + // 64 b2i_ds_output_1_1- inner node disablement + // 65 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFE00; + disabledRunKernelsBitmap[1] = 0x3; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000180001E6811 + bitmaps.rbm[0] = 0x1E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001DBFFF1 + bitmaps.deb[0] = 0x1DBFFF1; + // TEB - 0x0000000000003F97 + bitmaps.teb[0] = 0x3F97; + // REB - 0x00000000000000000000000006017FE7 + bitmaps.reb[0] = 0x6017FE7; + + // Kernels disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 21 ifd_gmv_1_4- inner node disablement + // 22 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 23 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 24 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 25 ifd_segmap_bnlm_1_4- inner node disablement + // 26 smurf_bnlm_1_0- inner node disablement + // 27 bnlm_3_4- inner node disablement + // 28 bxt_demosaic- inner node disablement + // 29 vcsc_2_0_b- inner node disablement + // 30 gltm_2_0- inner node disablement + // 31 ifd_segmap_xnr_1_4- inner node disablement + // 32 smurf_xnr_1_0- inner node disablement + // 33 xnr_5_4- inner node disablement + // 34 vcr_3_1- inner node disablement + // 35 glim_2_0- inner node disablement + // 36 ifd_segmap_acm_1_4- inner node disablement + // 37 smurf_acm_1_0- inner node disablement + // 38 acm_1_2- inner node disablement + // 39 gammatm_v4- inner node disablement + // 40 csc_1_1- inner node disablement + // 41 b2i_ds_1_1- inner node disablement + // 42 lbff_crop_espa_1_4- inner node disablement + // 43 tnr7_spatial_1_1- inner node disablement + // 44 tnr_scaler_lb_1_1- inner node disablement + // 45 tnr7_ims_1_2- inner node disablement + // 46 gmv_statistics_1_1- inner node disablement + // 47 odr_gmv_feature_1_4- inner node disablement + // 48 odr_gmv_match_1_4- inner node disablement + // 49 ifd_segmap_tnr_bc_1_4- inner node disablement + // 50 smurf_tnr_bc_1_0- inner node disablement + // 51 tnr7_bc_1_2- inner node disablement + // 52 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 53 ifd_segmap_tnr_blend_1_4- inner node disablement + // 54 smurf_tnr_blend_1_0- inner node disablement + // 55 tnr7_blend_1_1- inner node disablement + // 56 odr_tnr_fp_yuvn_1_4- inner node disablement + // 57 tnr_scaler_fp_1_1- inner node disablement + // 58 image_upscaler_1_1- inner node disablement + // 59 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 60 ifd_segmap_cas_1_4- inner node disablement + // 61 smurf_cas_1_0- inner node disablement + // 62 cas_1_1- inner node disablement + // 63 odr_ofs_mp_1_4- inner node disablement + // 64 b2i_ds_output_1_1- inner node disablement + // 65 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFE00180; + disabledRunKernelsBitmap[1] = 0x3; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgb_ir_2_0- inner node disablement + // 5 ifd_lsc_1_4- inner node disablement + // 6 lsc_1_2- inner node disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_pdaf_1_4- inner node disablement + // 18 pext_1_0- inner node disablement + // 19 pafstatistics_1_2- inner node disablement + // 20 odr_pdaf_1_4- inner node disablement + // 21 ifd_gmv_1_4- inner node disablement + // 22 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 23 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 24 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 25 ifd_segmap_bnlm_1_4- inner node disablement + // 26 smurf_bnlm_1_0- inner node disablement + // 27 bnlm_3_4- inner node disablement + // 28 bxt_demosaic- inner node disablement + // 29 vcsc_2_0_b- inner node disablement + // 30 gltm_2_0- inner node disablement + // 31 ifd_segmap_xnr_1_4- inner node disablement + // 32 smurf_xnr_1_0- inner node disablement + // 33 xnr_5_4- inner node disablement + // 34 vcr_3_1- inner node disablement + // 35 glim_2_0- inner node disablement + // 36 ifd_segmap_acm_1_4- inner node disablement + // 37 smurf_acm_1_0- inner node disablement + // 38 acm_1_2- inner node disablement + // 39 gammatm_v4- inner node disablement + // 40 csc_1_1- inner node disablement + // 41 b2i_ds_1_1- inner node disablement + // 42 lbff_crop_espa_1_4- inner node disablement + // 43 tnr7_spatial_1_1- inner node disablement + // 44 tnr_scaler_lb_1_1- inner node disablement + // 45 tnr7_ims_1_2- inner node disablement + // 46 gmv_statistics_1_1- inner node disablement + // 47 odr_gmv_feature_1_4- inner node disablement + // 48 odr_gmv_match_1_4- inner node disablement + // 49 ifd_segmap_tnr_bc_1_4- inner node disablement + // 50 smurf_tnr_bc_1_0- inner node disablement + // 51 tnr7_bc_1_2- inner node disablement + // 52 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 53 ifd_segmap_tnr_blend_1_4- inner node disablement + // 54 smurf_tnr_blend_1_0- inner node disablement + // 55 tnr7_blend_1_1- inner node disablement + // 56 odr_tnr_fp_yuvn_1_4- inner node disablement + // 57 tnr_scaler_fp_1_1- inner node disablement + // 58 image_upscaler_1_1- inner node disablement + // 59 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 60 ifd_segmap_cas_1_4- inner node disablement + // 61 smurf_cas_1_0- inner node disablement + // 62 cas_1_1- inner node disablement + // 63 odr_ofs_mp_1_4- inner node disablement + // 64 b2i_ds_output_1_1- inner node disablement + // 65 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFFFFFFF; + disabledRunKernelsBitmap[1] = 0x3; + } + else // default inner node + { + // RBM - 0x00000000000000000067FDBD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x67FDBD; + // DEB - 0x000000000000E1FFFFFFFFFEEDDBFFF1 + bitmaps.deb[0] = 0xEDDBFFF1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFF23F9F + bitmaps.teb[0] = 0xFFF23F9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F77FE7 + bitmaps.reb[0] = 0xF6F77FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffBayerPdaf2WithTnrWithSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 66; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0xFFFFFFFFFFE00180; + disabledRunKernelsBitmap[1] |= 0x3; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0xF400000000000000; + disabledRunKernelsBitmap[1] |= 0x3; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf3NoGmvWithTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 61; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FC9D58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E1FFFFF0FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFC0009F + bitmaps.teb[0] = 0xFFC0009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F787E7 + bitmaps.reb[0] = 0xF6F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 12 rgbs_grid_1_1- inner node disablement + // 13 ccm_3a_2_0- inner node disablement + // 14 fr_grid_1_0- inner node disablement + // 15 odr_awb_std_1_4- inner node disablement + // 16 odr_awb_sat_1_4- inner node disablement + // 17 aestatistics_2_1- inner node disablement + // 18 odr_ae_1_4- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFF0D0; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FD9D581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x47FD9D; + // DEB - 0x000000000000C1FFFFF0FFFEEDDBFDF1 + bitmaps.deb[0] = 0xEDDBFDF1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFC03E9F + bitmaps.teb[0] = 0xEFC03E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 58 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x400000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C1FFFFF0FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFC0009F + bitmaps.teb[0] = 0xEFC0009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F787E7 + bitmaps.reb[0] = 0xF6F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 12 rgbs_grid_1_1- inner node disablement + // 13 ccm_3a_2_0- inner node disablement + // 14 fr_grid_1_0- inner node disablement + // 15 odr_awb_std_1_4- inner node disablement + // 16 odr_awb_sat_1_4- inner node disablement + // 17 aestatistics_2_1- inner node disablement + // 18 odr_ae_1_4- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 58 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x4000000000FF0D0; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FD9D581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x27FD9D; + // DEB - 0x00000000000021FFFFF0FFFEEDDBFDF1 + bitmaps.deb[0] = 0xEDDBFDF1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFC03E9F + bitmaps.teb[0] = 0xDFC03E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 59 b2i_ds_output_1_1- inner node disablement + // 60 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1800000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x00000000000021FFFFF0FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFC0009F + bitmaps.teb[0] = 0xDFC0009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F787E7 + bitmaps.reb[0] = 0xF6F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 12 rgbs_grid_1_1- inner node disablement + // 13 ccm_3a_2_0- inner node disablement + // 14 fr_grid_1_0- inner node disablement + // 15 odr_awb_std_1_4- inner node disablement + // 16 odr_awb_sat_1_4- inner node disablement + // 17 aestatistics_2_1- inner node disablement + // 18 odr_ae_1_4- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 59 b2i_ds_output_1_1- inner node disablement + // 60 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x18000000000FF0D0; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000180081E6811 + bitmaps.rbm[0] = 0x81E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001DBFDF1 + bitmaps.deb[0] = 0x1DBFDF1; + // TEB - 0x0000000000003E97 + bitmaps.teb[0] = 0x3E97; + // REB - 0x0000000000000000000000000601FFE7 + bitmaps.reb[0] = 0x601FFE7; + + // Kernels disablement + // 10 gd_2_2- inner node disablement + // 11 wb_1_1- inner node disablement + // 20 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 21 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 22 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 23 ifd_segmap_bnlm_1_4- inner node disablement + // 24 smurf_bnlm_1_0- inner node disablement + // 25 bnlm_3_4- inner node disablement + // 26 bxt_demosaic- inner node disablement + // 27 vcsc_2_0_b- inner node disablement + // 28 gltm_2_0- inner node disablement + // 29 ifd_segmap_xnr_1_4- inner node disablement + // 30 smurf_xnr_1_0- inner node disablement + // 31 xnr_5_4- inner node disablement + // 32 vcr_3_1- inner node disablement + // 33 glim_2_0- inner node disablement + // 34 ifd_segmap_acm_1_4- inner node disablement + // 35 smurf_acm_1_0- inner node disablement + // 36 acm_1_2- inner node disablement + // 37 gammatm_v4- inner node disablement + // 38 csc_1_1- inner node disablement + // 39 b2i_ds_1_1- inner node disablement + // 40 lbff_crop_espa_1_4- inner node disablement + // 41 tnr7_spatial_1_1- inner node disablement + // 42 tnr_scaler_lb_1_1- inner node disablement + // 43 tnr7_ims_1_2- inner node disablement + // 44 ifd_segmap_tnr_bc_1_4- inner node disablement + // 45 smurf_tnr_bc_1_0- inner node disablement + // 46 tnr7_bc_1_2- inner node disablement + // 47 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 48 ifd_segmap_tnr_blend_1_4- inner node disablement + // 49 smurf_tnr_blend_1_0- inner node disablement + // 50 tnr7_blend_1_1- inner node disablement + // 51 odr_tnr_fp_yuvn_1_4- inner node disablement + // 52 tnr_scaler_fp_1_1- inner node disablement + // 53 image_upscaler_1_1- inner node disablement + // 54 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 55 ifd_segmap_cas_1_4- inner node disablement + // 56 smurf_cas_1_0- inner node disablement + // 57 cas_1_1- inner node disablement + // 58 odr_ofs_mp_1_4- inner node disablement + // 59 b2i_ds_output_1_1- inner node disablement + // 60 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFFF00C00; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 pext_1_0- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 8 ifd_lsc_1_4- inner node disablement + // 9 lsc_1_2- inner node disablement + // 10 gd_2_2- inner node disablement + // 11 wb_1_1- inner node disablement + // 12 rgbs_grid_1_1- inner node disablement + // 13 ccm_3a_2_0- inner node disablement + // 14 fr_grid_1_0- inner node disablement + // 15 odr_awb_std_1_4- inner node disablement + // 16 odr_awb_sat_1_4- inner node disablement + // 17 aestatistics_2_1- inner node disablement + // 18 odr_ae_1_4- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 20 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 21 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 22 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 23 ifd_segmap_bnlm_1_4- inner node disablement + // 24 smurf_bnlm_1_0- inner node disablement + // 25 bnlm_3_4- inner node disablement + // 26 bxt_demosaic- inner node disablement + // 27 vcsc_2_0_b- inner node disablement + // 28 gltm_2_0- inner node disablement + // 29 ifd_segmap_xnr_1_4- inner node disablement + // 30 smurf_xnr_1_0- inner node disablement + // 31 xnr_5_4- inner node disablement + // 32 vcr_3_1- inner node disablement + // 33 glim_2_0- inner node disablement + // 34 ifd_segmap_acm_1_4- inner node disablement + // 35 smurf_acm_1_0- inner node disablement + // 36 acm_1_2- inner node disablement + // 37 gammatm_v4- inner node disablement + // 38 csc_1_1- inner node disablement + // 39 b2i_ds_1_1- inner node disablement + // 40 lbff_crop_espa_1_4- inner node disablement + // 41 tnr7_spatial_1_1- inner node disablement + // 42 tnr_scaler_lb_1_1- inner node disablement + // 43 tnr7_ims_1_2- inner node disablement + // 44 ifd_segmap_tnr_bc_1_4- inner node disablement + // 45 smurf_tnr_bc_1_0- inner node disablement + // 46 tnr7_bc_1_2- inner node disablement + // 47 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 48 ifd_segmap_tnr_blend_1_4- inner node disablement + // 49 smurf_tnr_blend_1_0- inner node disablement + // 50 tnr7_blend_1_1- inner node disablement + // 51 odr_tnr_fp_yuvn_1_4- inner node disablement + // 52 tnr_scaler_fp_1_1- inner node disablement + // 53 image_upscaler_1_1- inner node disablement + // 54 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 55 ifd_segmap_cas_1_4- inner node disablement + // 56 smurf_cas_1_0- inner node disablement + // 57 cas_1_1- inner node disablement + // 58 odr_ofs_mp_1_4- inner node disablement + // 59 b2i_ds_output_1_1- inner node disablement + // 60 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000067FD9D581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x67FD9D; + // DEB - 0x000000000000E1FFFFF0FFFEEDDBFDF1 + bitmaps.deb[0] = 0xEDDBFDF1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFC03E9F + bitmaps.teb[0] = 0xFFC03E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffBayerPdaf3NoGmvWithTnrWithSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 61; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x1FFFFFFFFFF00C00; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x1FA0000000000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 63; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noPdaf | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FC9D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E1FFFFF0FFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFC8009F + bitmaps.teb[0] = 0xFFC8009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFC00; + } + else if (nodeRelevantInnerOptions == (noPdaf)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FC9D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E1FFFFF0FFFEEDBBF1F1 + bitmaps.deb[0] = 0xEDBBF1F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFC81E9F + bitmaps.teb[0] = 0xFFC81E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F6FFE7 + bitmaps.reb[0] = 0xF2F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3C0000; + } + else if (nodeRelevantInnerOptions == (no3A | noPdaf)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FC9D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E1FFFFF0FFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFC8009F + bitmaps.teb[0] = 0xFFC8009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFC00; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FD9D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x47FD9D; + // DEB - 0x000000000000C1FFFFF0FFFEEDFBFFF1 + bitmaps.deb[0] = 0xEDFBFFF1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFC83F9F + bitmaps.teb[0] = 0xEFC83F9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 60 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1000000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C1FFFFF0FFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFC8009F + bitmaps.teb[0] = 0xEFC8009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 60 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x10000000003FFC00; + } + else if (nodeRelevantInnerOptions == (noPdaf | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C1FFFFF0FFFEEDBBF1F1 + bitmaps.deb[0] = 0xEDBBF1F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFC81E9F + bitmaps.teb[0] = 0xEFC81E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F6FFE7 + bitmaps.reb[0] = 0xF2F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 60 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x10000000003C0000; + } + else if (nodeRelevantInnerOptions == (no3A | noPdaf | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C1FFFFF0FFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFC8009F + bitmaps.teb[0] = 0xEFC8009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 60 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x10000000003FFC00; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FD9D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x27FD9D; + // DEB - 0x00000000000021FFFFF0FFFEEDFBFFF1 + bitmaps.deb[0] = 0xEDFBFFF1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFC83F9F + bitmaps.teb[0] = 0xDFC83F9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 61 b2i_ds_output_1_1- inner node disablement + // 62 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x6000000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x00000000000021FFFFF0FFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFC8009F + bitmaps.teb[0] = 0xDFC8009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 61 b2i_ds_output_1_1- inner node disablement + // 62 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x60000000003FFC00; + } + else if (nodeRelevantInnerOptions == (noPdaf | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x00000000000021FFFFF0FFFEEDBBF1F1 + bitmaps.deb[0] = 0xEDBBF1F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFC81E9F + bitmaps.teb[0] = 0xDFC81E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F6FFE7 + bitmaps.reb[0] = 0xF2F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 61 b2i_ds_output_1_1- inner node disablement + // 62 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x60000000003C0000; + } + else if (nodeRelevantInnerOptions == (no3A | noPdaf | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x00000000000021FFFFF0FFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFC8009F + bitmaps.teb[0] = 0xDFC8009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 61 b2i_ds_output_1_1- inner node disablement + // 62 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x60000000003FFC00; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000180041E6811 + bitmaps.rbm[0] = 0x41E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001FBFFF1 + bitmaps.deb[0] = 0x1FBFFF1; + // TEB - 0x0000000000083F97 + bitmaps.teb[0] = 0x83F97; + // REB - 0x0000000000000000000000000601FFE7 + bitmaps.reb[0] = 0x601FFE7; + + // Kernels disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 22 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 23 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 24 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 25 ifd_segmap_bnlm_1_4- inner node disablement + // 26 smurf_bnlm_1_0- inner node disablement + // 27 bnlm_3_4- inner node disablement + // 28 bxt_demosaic- inner node disablement + // 29 vcsc_2_0_b- inner node disablement + // 30 gltm_2_0- inner node disablement + // 31 ifd_segmap_xnr_1_4- inner node disablement + // 32 smurf_xnr_1_0- inner node disablement + // 33 xnr_5_4- inner node disablement + // 34 vcr_3_1- inner node disablement + // 35 glim_2_0- inner node disablement + // 36 ifd_segmap_acm_1_4- inner node disablement + // 37 smurf_acm_1_0- inner node disablement + // 38 acm_1_2- inner node disablement + // 39 gammatm_v4- inner node disablement + // 40 csc_1_1- inner node disablement + // 41 b2i_ds_1_1- inner node disablement + // 42 lbff_crop_espa_1_4- inner node disablement + // 43 tnr7_spatial_1_1- inner node disablement + // 44 tnr_scaler_lb_1_1- inner node disablement + // 45 tnr7_ims_1_2- inner node disablement + // 46 ifd_segmap_tnr_bc_1_4- inner node disablement + // 47 smurf_tnr_bc_1_0- inner node disablement + // 48 tnr7_bc_1_2- inner node disablement + // 49 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 50 ifd_segmap_tnr_blend_1_4- inner node disablement + // 51 smurf_tnr_blend_1_0- inner node disablement + // 52 tnr7_blend_1_1- inner node disablement + // 53 odr_tnr_fp_yuvn_1_4- inner node disablement + // 54 tnr_scaler_fp_1_1- inner node disablement + // 55 image_upscaler_1_1- inner node disablement + // 56 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 57 ifd_segmap_cas_1_4- inner node disablement + // 58 smurf_cas_1_0- inner node disablement + // 59 cas_1_1- inner node disablement + // 60 odr_ofs_mp_1_4- inner node disablement + // 61 b2i_ds_output_1_1- inner node disablement + // 62 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFFFFC00300; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 odr_dpc_pdaf_1_4- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 ifd_lsc_1_4- inner node disablement + // 7 lsc_1_2- inner node disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 22 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 23 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 24 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 25 ifd_segmap_bnlm_1_4- inner node disablement + // 26 smurf_bnlm_1_0- inner node disablement + // 27 bnlm_3_4- inner node disablement + // 28 bxt_demosaic- inner node disablement + // 29 vcsc_2_0_b- inner node disablement + // 30 gltm_2_0- inner node disablement + // 31 ifd_segmap_xnr_1_4- inner node disablement + // 32 smurf_xnr_1_0- inner node disablement + // 33 xnr_5_4- inner node disablement + // 34 vcr_3_1- inner node disablement + // 35 glim_2_0- inner node disablement + // 36 ifd_segmap_acm_1_4- inner node disablement + // 37 smurf_acm_1_0- inner node disablement + // 38 acm_1_2- inner node disablement + // 39 gammatm_v4- inner node disablement + // 40 csc_1_1- inner node disablement + // 41 b2i_ds_1_1- inner node disablement + // 42 lbff_crop_espa_1_4- inner node disablement + // 43 tnr7_spatial_1_1- inner node disablement + // 44 tnr_scaler_lb_1_1- inner node disablement + // 45 tnr7_ims_1_2- inner node disablement + // 46 ifd_segmap_tnr_bc_1_4- inner node disablement + // 47 smurf_tnr_bc_1_0- inner node disablement + // 48 tnr7_bc_1_2- inner node disablement + // 49 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 50 ifd_segmap_tnr_blend_1_4- inner node disablement + // 51 smurf_tnr_blend_1_0- inner node disablement + // 52 tnr7_blend_1_1- inner node disablement + // 53 odr_tnr_fp_yuvn_1_4- inner node disablement + // 54 tnr_scaler_fp_1_1- inner node disablement + // 55 image_upscaler_1_1- inner node disablement + // 56 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 57 ifd_segmap_cas_1_4- inner node disablement + // 58 smurf_cas_1_0- inner node disablement + // 59 cas_1_1- inner node disablement + // 60 odr_ofs_mp_1_4- inner node disablement + // 61 b2i_ds_output_1_1- inner node disablement + // 62 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFFFFFFFFFF; + } + else if (nodeRelevantInnerOptions == (noPdaf | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000080041E6811 + bitmaps.rbm[0] = 0x41E6811; + bitmaps.rbm[1] = 0x80; + // DEB - 0x00000000000000000000000001BBF1F1 + bitmaps.deb[0] = 0x1BBF1F1; + // TEB - 0x0000000000081E97 + bitmaps.teb[0] = 0x81E97; + // REB - 0x0000000000000000000000000200FFE7 + bitmaps.reb[0] = 0x200FFE7; + + // Kernels disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 22 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 23 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 24 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 25 ifd_segmap_bnlm_1_4- inner node disablement + // 26 smurf_bnlm_1_0- inner node disablement + // 27 bnlm_3_4- inner node disablement + // 28 bxt_demosaic- inner node disablement + // 29 vcsc_2_0_b- inner node disablement + // 30 gltm_2_0- inner node disablement + // 31 ifd_segmap_xnr_1_4- inner node disablement + // 32 smurf_xnr_1_0- inner node disablement + // 33 xnr_5_4- inner node disablement + // 34 vcr_3_1- inner node disablement + // 35 glim_2_0- inner node disablement + // 36 ifd_segmap_acm_1_4- inner node disablement + // 37 smurf_acm_1_0- inner node disablement + // 38 acm_1_2- inner node disablement + // 39 gammatm_v4- inner node disablement + // 40 csc_1_1- inner node disablement + // 41 b2i_ds_1_1- inner node disablement + // 42 lbff_crop_espa_1_4- inner node disablement + // 43 tnr7_spatial_1_1- inner node disablement + // 44 tnr_scaler_lb_1_1- inner node disablement + // 45 tnr7_ims_1_2- inner node disablement + // 46 ifd_segmap_tnr_bc_1_4- inner node disablement + // 47 smurf_tnr_bc_1_0- inner node disablement + // 48 tnr7_bc_1_2- inner node disablement + // 49 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 50 ifd_segmap_tnr_blend_1_4- inner node disablement + // 51 smurf_tnr_blend_1_0- inner node disablement + // 52 tnr7_blend_1_1- inner node disablement + // 53 odr_tnr_fp_yuvn_1_4- inner node disablement + // 54 tnr_scaler_fp_1_1- inner node disablement + // 55 image_upscaler_1_1- inner node disablement + // 56 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 57 ifd_segmap_cas_1_4- inner node disablement + // 58 smurf_cas_1_0- inner node disablement + // 59 cas_1_1- inner node disablement + // 60 odr_ofs_mp_1_4- inner node disablement + // 61 b2i_ds_output_1_1- inner node disablement + // 62 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFFFFFC0300; + } + else if (nodeRelevantInnerOptions == (no3A | noPdaf | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 odr_dpc_pdaf_1_4- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 ifd_lsc_1_4- inner node disablement + // 7 lsc_1_2- inner node disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 22 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 23 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 24 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 25 ifd_segmap_bnlm_1_4- inner node disablement + // 26 smurf_bnlm_1_0- inner node disablement + // 27 bnlm_3_4- inner node disablement + // 28 bxt_demosaic- inner node disablement + // 29 vcsc_2_0_b- inner node disablement + // 30 gltm_2_0- inner node disablement + // 31 ifd_segmap_xnr_1_4- inner node disablement + // 32 smurf_xnr_1_0- inner node disablement + // 33 xnr_5_4- inner node disablement + // 34 vcr_3_1- inner node disablement + // 35 glim_2_0- inner node disablement + // 36 ifd_segmap_acm_1_4- inner node disablement + // 37 smurf_acm_1_0- inner node disablement + // 38 acm_1_2- inner node disablement + // 39 gammatm_v4- inner node disablement + // 40 csc_1_1- inner node disablement + // 41 b2i_ds_1_1- inner node disablement + // 42 lbff_crop_espa_1_4- inner node disablement + // 43 tnr7_spatial_1_1- inner node disablement + // 44 tnr_scaler_lb_1_1- inner node disablement + // 45 tnr7_ims_1_2- inner node disablement + // 46 ifd_segmap_tnr_bc_1_4- inner node disablement + // 47 smurf_tnr_bc_1_0- inner node disablement + // 48 tnr7_bc_1_2- inner node disablement + // 49 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 50 ifd_segmap_tnr_blend_1_4- inner node disablement + // 51 smurf_tnr_blend_1_0- inner node disablement + // 52 tnr7_blend_1_1- inner node disablement + // 53 odr_tnr_fp_yuvn_1_4- inner node disablement + // 54 tnr_scaler_fp_1_1- inner node disablement + // 55 image_upscaler_1_1- inner node disablement + // 56 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 57 ifd_segmap_cas_1_4- inner node disablement + // 58 smurf_cas_1_0- inner node disablement + // 59 cas_1_1- inner node disablement + // 60 odr_ofs_mp_1_4- inner node disablement + // 61 b2i_ds_output_1_1- inner node disablement + // 62 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000067FD9D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x67FD9D; + // DEB - 0x000000000000E1FFFFF0FFFEEDFBFFF1 + bitmaps.deb[0] = 0xEDFBFFF1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFC83F9F + bitmaps.teb[0] = 0xFFC83F9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 63; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x7FFFFFFFFFC00300; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x7E80000000000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void IsysPdaf2OuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + + // No inner nodes + (void)nodeInnerOptions; +} + +void IsysPdaf2OuterNode::configVanishStatus(VanishOption vanishStatus) +{ + (void)vanishStatus; + return; +} + +void LbffBayerPdaf2NoGmvNoTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 38; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000064009D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1200000F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x000000003000009F + bitmaps.teb[0] = 0x3000009F; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + // 34 ifd_pdaf_1_4- inner node disablement + // 35 pext_1_0- inner node disablement + // 36 pafstatistics_1_2- inner node disablement + // 37 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FE0380000; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000044019D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x44019D; + // DEB - 0x000000000000C1200000F9CE8DDBFFF1 + bitmaps.deb[0] = 0x8DDBFFF1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x0000000020003F9F + bitmaps.teb[0] = 0x20003F9F; + // REB - 0x00000000000000000000001F16F77FE7 + bitmaps.reb[0] = 0x16F77FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 26 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x4000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000044009D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1200000F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x000000002000009F + bitmaps.teb[0] = 0x2000009F; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 26 odr_ofs_mp_1_4- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + // 34 ifd_pdaf_1_4- inner node disablement + // 35 pext_1_0- inner node disablement + // 36 pafstatistics_1_2- inner node disablement + // 37 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FE4380000; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000024019D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x24019D; + // DEB - 0x00000000000021200000F9CE8DDBFFF1 + bitmaps.deb[0] = 0x8DDBFFF1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x0000000010003F9F + bitmaps.teb[0] = 0x10003F9F; + // REB - 0x00000000000000000000001F16F77FE7 + bitmaps.reb[0] = 0x16F77FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 27 b2i_ds_output_1_1- inner node disablement + // 28 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x18000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000024009D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021200000F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x000000001000009F + bitmaps.teb[0] = 0x1000009F; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 27 b2i_ds_output_1_1- inner node disablement + // 28 odr_ofs_dp_1_4- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + // 34 ifd_pdaf_1_4- inner node disablement + // 35 pext_1_0- inner node disablement + // 36 pafstatistics_1_2- inner node disablement + // 37 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FF8380000; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000180001E6811 + bitmaps.rbm[0] = 0x1E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001DBFFF1 + bitmaps.deb[0] = 0x1DBFFF1; + // TEB - 0x0000000000003F97 + bitmaps.teb[0] = 0x3F97; + // REB - 0x00000000000000000000000006017FE7 + bitmaps.reb[0] = 0x6017FE7; + + // Kernels disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 bnlm_3_4- inner node disablement + // 10 bxt_demosaic- inner node disablement + // 11 vcsc_2_0_b- inner node disablement + // 12 gltm_2_0- inner node disablement + // 13 xnr_5_4- inner node disablement + // 14 vcr_3_1- inner node disablement + // 15 glim_2_0- inner node disablement + // 16 acm_1_2- inner node disablement + // 17 gammatm_v4- inner node disablement + // 18 csc_1_1- inner node disablement + // 22 b2i_ds_1_1- inner node disablement + // 23 lbff_crop_espa_1_4- inner node disablement + // 24 image_upscaler_1_1- inner node disablement + // 25 cas_1_1- inner node disablement + // 26 odr_ofs_mp_1_4- inner node disablement + // 27 b2i_ds_output_1_1- inner node disablement + // 28 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FC7FF80; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgb_ir_2_0- inner node disablement + // 5 ifd_lsc_1_4- inner node disablement + // 6 lsc_1_2- inner node disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 bnlm_3_4- inner node disablement + // 10 bxt_demosaic- inner node disablement + // 11 vcsc_2_0_b- inner node disablement + // 12 gltm_2_0- inner node disablement + // 13 xnr_5_4- inner node disablement + // 14 vcr_3_1- inner node disablement + // 15 glim_2_0- inner node disablement + // 16 acm_1_2- inner node disablement + // 17 gammatm_v4- inner node disablement + // 18 csc_1_1- inner node disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 22 b2i_ds_1_1- inner node disablement + // 23 lbff_crop_espa_1_4- inner node disablement + // 24 image_upscaler_1_1- inner node disablement + // 25 cas_1_1- inner node disablement + // 26 odr_ofs_mp_1_4- inner node disablement + // 27 b2i_ds_output_1_1- inner node disablement + // 28 odr_ofs_dp_1_4- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + // 34 ifd_pdaf_1_4- inner node disablement + // 35 pext_1_0- inner node disablement + // 36 pafstatistics_1_2- inner node disablement + // 37 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000064019D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x64019D; + // DEB - 0x000000000000E1200000F9CE8DDBFFF1 + bitmaps.deb[0] = 0x8DDBFFF1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x0000000030003F9F + bitmaps.teb[0] = 0x30003F9F; + // REB - 0x00000000000000000000001F16F77FE7 + bitmaps.reb[0] = 0x16F77FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffBayerPdaf2NoGmvNoTnrNoSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 38; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x1FC7FF80; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x1F000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf2WithGmvNoTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 42; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x0000000000000000006400BD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E120000FF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x000000003032009F + bitmaps.teb[0] = 0x3032009F; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + // 34 ifd_pdaf_1_4- inner node disablement + // 35 pext_1_0- inner node disablement + // 36 pafstatistics_1_2- inner node disablement + // 37 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FE0380000; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x0000000000000000004401BD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x4401BD; + // DEB - 0x000000000000C120000FF9CE8DDBFFF1 + bitmaps.deb[0] = 0x8DDBFFF1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x0000000020323F9F + bitmaps.teb[0] = 0x20323F9F; + // REB - 0x00000000000000000000001F16F77FE7 + bitmaps.reb[0] = 0x16F77FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 26 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x4000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x0000000000000000004400BD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C120000FF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x000000002032009F + bitmaps.teb[0] = 0x2032009F; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 26 odr_ofs_mp_1_4- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + // 34 ifd_pdaf_1_4- inner node disablement + // 35 pext_1_0- inner node disablement + // 36 pafstatistics_1_2- inner node disablement + // 37 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FE4380000; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x0000000000000000002401BD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x2401BD; + // DEB - 0x0000000000002120000FF9CE8DDBFFF1 + bitmaps.deb[0] = 0x8DDBFFF1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x0000000010323F9F + bitmaps.teb[0] = 0x10323F9F; + // REB - 0x00000000000000000000001F16F77FE7 + bitmaps.reb[0] = 0x16F77FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 27 b2i_ds_output_1_1- inner node disablement + // 28 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x18000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x0000000000000000002400BD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x0000000000002120000FF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x000000001032009F + bitmaps.teb[0] = 0x1032009F; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 27 b2i_ds_output_1_1- inner node disablement + // 28 odr_ofs_dp_1_4- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + // 34 ifd_pdaf_1_4- inner node disablement + // 35 pext_1_0- inner node disablement + // 36 pafstatistics_1_2- inner node disablement + // 37 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FF8380000; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000180001E6811 + bitmaps.rbm[0] = 0x1E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001DBFFF1 + bitmaps.deb[0] = 0x1DBFFF1; + // TEB - 0x0000000000003F97 + bitmaps.teb[0] = 0x3F97; + // REB - 0x00000000000000000000000006017FE7 + bitmaps.reb[0] = 0x6017FE7; + + // Kernels disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 bnlm_3_4- inner node disablement + // 10 bxt_demosaic- inner node disablement + // 11 vcsc_2_0_b- inner node disablement + // 12 gltm_2_0- inner node disablement + // 13 xnr_5_4- inner node disablement + // 14 vcr_3_1- inner node disablement + // 15 glim_2_0- inner node disablement + // 16 acm_1_2- inner node disablement + // 17 gammatm_v4- inner node disablement + // 18 csc_1_1- inner node disablement + // 22 b2i_ds_1_1- inner node disablement + // 23 lbff_crop_espa_1_4- inner node disablement + // 24 image_upscaler_1_1- inner node disablement + // 25 cas_1_1- inner node disablement + // 26 odr_ofs_mp_1_4- inner node disablement + // 27 b2i_ds_output_1_1- inner node disablement + // 28 odr_ofs_dp_1_4- inner node disablement + // 38 ifd_gmv_1_4- inner node disablement + // 39 gmv_statistics_1_1- inner node disablement + // 40 odr_gmv_feature_1_4- inner node disablement + // 41 odr_gmv_match_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3C01FC7FF80; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgb_ir_2_0- inner node disablement + // 5 ifd_lsc_1_4- inner node disablement + // 6 lsc_1_2- inner node disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 bnlm_3_4- inner node disablement + // 10 bxt_demosaic- inner node disablement + // 11 vcsc_2_0_b- inner node disablement + // 12 gltm_2_0- inner node disablement + // 13 xnr_5_4- inner node disablement + // 14 vcr_3_1- inner node disablement + // 15 glim_2_0- inner node disablement + // 16 acm_1_2- inner node disablement + // 17 gammatm_v4- inner node disablement + // 18 csc_1_1- inner node disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 22 b2i_ds_1_1- inner node disablement + // 23 lbff_crop_espa_1_4- inner node disablement + // 24 image_upscaler_1_1- inner node disablement + // 25 cas_1_1- inner node disablement + // 26 odr_ofs_mp_1_4- inner node disablement + // 27 b2i_ds_output_1_1- inner node disablement + // 28 odr_ofs_dp_1_4- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + // 34 ifd_pdaf_1_4- inner node disablement + // 35 pext_1_0- inner node disablement + // 36 pafstatistics_1_2- inner node disablement + // 37 odr_pdaf_1_4- inner node disablement + // 38 ifd_gmv_1_4- inner node disablement + // 39 gmv_statistics_1_1- inner node disablement + // 40 odr_gmv_feature_1_4- inner node disablement + // 41 odr_gmv_match_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x0000000000000000006401BD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x6401BD; + // DEB - 0x000000000000E120000FF9CE8DDBFFF1 + bitmaps.deb[0] = 0x8DDBFFF1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x0000000030323F9F + bitmaps.teb[0] = 0x30323F9F; + // REB - 0x00000000000000000000001F16F77FE7 + bitmaps.reb[0] = 0x16F77FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffBayerPdaf2WithGmvNoTnrNoSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 42; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x3C01FC7FF80; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x1F000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf2NoGmvWithTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 50; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FC9D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E13E79F0F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC0009F + bitmaps.teb[0] = 0x3FC0009F; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 26 odr_awb_std_1_4- inner node disablement + // 27 odr_awb_sat_1_4- inner node disablement + // 28 aestatistics_2_1- inner node disablement + // 29 odr_ae_1_4- inner node disablement + // 30 odr_af_std_1_4- inner node disablement + // 31 ifd_pdaf_1_4- inner node disablement + // 32 pext_1_0- inner node disablement + // 33 pafstatistics_1_2- inner node disablement + // 34 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FC380000; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FD9D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x47FD9D; + // DEB - 0x000000000000C13E79F0F9CE8DDBFFF1 + bitmaps.deb[0] = 0x8DDBFFF1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC03F9F + bitmaps.teb[0] = 0x2FC03F9F; + // REB - 0x00000000000000000000001FF6F77FE7 + bitmaps.reb[0] = 0xF6F77FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 46 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x400000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C13E79F0F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC0009F + bitmaps.teb[0] = 0x2FC0009F; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 26 odr_awb_std_1_4- inner node disablement + // 27 odr_awb_sat_1_4- inner node disablement + // 28 aestatistics_2_1- inner node disablement + // 29 odr_ae_1_4- inner node disablement + // 30 odr_af_std_1_4- inner node disablement + // 31 ifd_pdaf_1_4- inner node disablement + // 32 pext_1_0- inner node disablement + // 33 pafstatistics_1_2- inner node disablement + // 34 odr_pdaf_1_4- inner node disablement + // 46 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x4007FC380000; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FD9D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x27FD9D; + // DEB - 0x000000000000213E79F0F9CE8DDBFFF1 + bitmaps.deb[0] = 0x8DDBFFF1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC03F9F + bitmaps.teb[0] = 0x1FC03F9F; + // REB - 0x00000000000000000000001FF6F77FE7 + bitmaps.reb[0] = 0xF6F77FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1800000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x000000000000213E79F0F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC0009F + bitmaps.teb[0] = 0x1FC0009F; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 26 odr_awb_std_1_4- inner node disablement + // 27 odr_awb_sat_1_4- inner node disablement + // 28 aestatistics_2_1- inner node disablement + // 29 odr_ae_1_4- inner node disablement + // 30 odr_af_std_1_4- inner node disablement + // 31 ifd_pdaf_1_4- inner node disablement + // 32 pext_1_0- inner node disablement + // 33 pafstatistics_1_2- inner node disablement + // 34 odr_pdaf_1_4- inner node disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x18007FC380000; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000180001E6811 + bitmaps.rbm[0] = 0x1E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001DBFFF1 + bitmaps.deb[0] = 0x1DBFFF1; + // TEB - 0x0000000000003F97 + bitmaps.teb[0] = 0x3F97; + // REB - 0x00000000000000000000000006017FE7 + bitmaps.reb[0] = 0x6017FE7; + + // Kernels disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 bnlm_3_4- inner node disablement + // 10 bxt_demosaic- inner node disablement + // 11 vcsc_2_0_b- inner node disablement + // 12 gltm_2_0- inner node disablement + // 13 xnr_5_4- inner node disablement + // 14 vcr_3_1- inner node disablement + // 15 glim_2_0- inner node disablement + // 16 acm_1_2- inner node disablement + // 17 gammatm_v4- inner node disablement + // 18 csc_1_1- inner node disablement + // 22 b2i_ds_1_1- inner node disablement + // 23 lbff_crop_espa_1_4- inner node disablement + // 24 tnr7_spatial_1_1- inner node disablement + // 25 tnr_scaler_lb_1_1- inner node disablement + // 35 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 36 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 37 tnr7_ims_1_2- inner node disablement + // 38 tnr7_bc_1_2- inner node disablement + // 39 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 40 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 41 tnr7_blend_1_1- inner node disablement + // 42 odr_tnr_fp_yuvn_1_4- inner node disablement + // 43 tnr_scaler_fp_1_1- inner node disablement + // 44 image_upscaler_1_1- inner node disablement + // 45 cas_1_1- inner node disablement + // 46 odr_ofs_mp_1_4- inner node disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + // 49 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFF803C7FF80; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgb_ir_2_0- inner node disablement + // 5 ifd_lsc_1_4- inner node disablement + // 6 lsc_1_2- inner node disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 bnlm_3_4- inner node disablement + // 10 bxt_demosaic- inner node disablement + // 11 vcsc_2_0_b- inner node disablement + // 12 gltm_2_0- inner node disablement + // 13 xnr_5_4- inner node disablement + // 14 vcr_3_1- inner node disablement + // 15 glim_2_0- inner node disablement + // 16 acm_1_2- inner node disablement + // 17 gammatm_v4- inner node disablement + // 18 csc_1_1- inner node disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 22 b2i_ds_1_1- inner node disablement + // 23 lbff_crop_espa_1_4- inner node disablement + // 24 tnr7_spatial_1_1- inner node disablement + // 25 tnr_scaler_lb_1_1- inner node disablement + // 26 odr_awb_std_1_4- inner node disablement + // 27 odr_awb_sat_1_4- inner node disablement + // 28 aestatistics_2_1- inner node disablement + // 29 odr_ae_1_4- inner node disablement + // 30 odr_af_std_1_4- inner node disablement + // 31 ifd_pdaf_1_4- inner node disablement + // 32 pext_1_0- inner node disablement + // 33 pafstatistics_1_2- inner node disablement + // 34 odr_pdaf_1_4- inner node disablement + // 35 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 36 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 37 tnr7_ims_1_2- inner node disablement + // 38 tnr7_bc_1_2- inner node disablement + // 39 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 40 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 41 tnr7_blend_1_1- inner node disablement + // 42 odr_tnr_fp_yuvn_1_4- inner node disablement + // 43 tnr_scaler_fp_1_1- inner node disablement + // 44 image_upscaler_1_1- inner node disablement + // 45 cas_1_1- inner node disablement + // 46 odr_ofs_mp_1_4- inner node disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + // 49 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000067FD9D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x67FD9D; + // DEB - 0x000000000000E13E79F0F9CE8DDBFFF1 + bitmaps.deb[0] = 0x8DDBFFF1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC03F9F + bitmaps.teb[0] = 0x3FC03F9F; + // REB - 0x00000000000000000000001FF6F77FE7 + bitmaps.reb[0] = 0xF6F77FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffBayerPdaf2NoGmvWithTnrNoSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 50; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x3FFF803C7FF80; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x1F00000000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf2WithGmvWithTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 54; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FCBD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E13E79FFF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FF2009F + bitmaps.teb[0] = 0x3FF2009F; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 26 odr_awb_std_1_4- inner node disablement + // 27 odr_awb_sat_1_4- inner node disablement + // 28 aestatistics_2_1- inner node disablement + // 29 odr_ae_1_4- inner node disablement + // 30 odr_af_std_1_4- inner node disablement + // 31 ifd_pdaf_1_4- inner node disablement + // 32 pext_1_0- inner node disablement + // 33 pafstatistics_1_2- inner node disablement + // 34 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FC380000; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FDBD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x47FDBD; + // DEB - 0x000000000000C13E79FFF9CE8DDBFFF1 + bitmaps.deb[0] = 0x8DDBFFF1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FF23F9F + bitmaps.teb[0] = 0x2FF23F9F; + // REB - 0x00000000000000000000001FF6F77FE7 + bitmaps.reb[0] = 0xF6F77FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 50 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x4000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C13E79FFF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FF2009F + bitmaps.teb[0] = 0x2FF2009F; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 26 odr_awb_std_1_4- inner node disablement + // 27 odr_awb_sat_1_4- inner node disablement + // 28 aestatistics_2_1- inner node disablement + // 29 odr_ae_1_4- inner node disablement + // 30 odr_af_std_1_4- inner node disablement + // 31 ifd_pdaf_1_4- inner node disablement + // 32 pext_1_0- inner node disablement + // 33 pafstatistics_1_2- inner node disablement + // 34 odr_pdaf_1_4- inner node disablement + // 50 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x40007FC380000; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FDBD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x27FDBD; + // DEB - 0x000000000000213E79FFF9CE8DDBFFF1 + bitmaps.deb[0] = 0x8DDBFFF1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FF23F9F + bitmaps.teb[0] = 0x1FF23F9F; + // REB - 0x00000000000000000000001FF6F77FE7 + bitmaps.reb[0] = 0xF6F77FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 51 b2i_ds_output_1_1- inner node disablement + // 52 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x18000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x000000000000213E79FFF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FF2009F + bitmaps.teb[0] = 0x1FF2009F; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 26 odr_awb_std_1_4- inner node disablement + // 27 odr_awb_sat_1_4- inner node disablement + // 28 aestatistics_2_1- inner node disablement + // 29 odr_ae_1_4- inner node disablement + // 30 odr_af_std_1_4- inner node disablement + // 31 ifd_pdaf_1_4- inner node disablement + // 32 pext_1_0- inner node disablement + // 33 pafstatistics_1_2- inner node disablement + // 34 odr_pdaf_1_4- inner node disablement + // 51 b2i_ds_output_1_1- inner node disablement + // 52 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x180007FC380000; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000180001E6811 + bitmaps.rbm[0] = 0x1E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001DBFFF1 + bitmaps.deb[0] = 0x1DBFFF1; + // TEB - 0x0000000000003F97 + bitmaps.teb[0] = 0x3F97; + // REB - 0x00000000000000000000000006017FE7 + bitmaps.reb[0] = 0x6017FE7; + + // Kernels disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 bnlm_3_4- inner node disablement + // 10 bxt_demosaic- inner node disablement + // 11 vcsc_2_0_b- inner node disablement + // 12 gltm_2_0- inner node disablement + // 13 xnr_5_4- inner node disablement + // 14 vcr_3_1- inner node disablement + // 15 glim_2_0- inner node disablement + // 16 acm_1_2- inner node disablement + // 17 gammatm_v4- inner node disablement + // 18 csc_1_1- inner node disablement + // 22 b2i_ds_1_1- inner node disablement + // 23 lbff_crop_espa_1_4- inner node disablement + // 24 tnr7_spatial_1_1- inner node disablement + // 25 tnr_scaler_lb_1_1- inner node disablement + // 35 ifd_gmv_1_4- inner node disablement + // 36 gmv_statistics_1_1- inner node disablement + // 37 odr_gmv_feature_1_4- inner node disablement + // 38 odr_gmv_match_1_4- inner node disablement + // 39 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 40 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 41 tnr7_ims_1_2- inner node disablement + // 42 tnr7_bc_1_2- inner node disablement + // 43 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 44 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 45 tnr7_blend_1_1- inner node disablement + // 46 odr_tnr_fp_yuvn_1_4- inner node disablement + // 47 tnr_scaler_fp_1_1- inner node disablement + // 48 image_upscaler_1_1- inner node disablement + // 49 cas_1_1- inner node disablement + // 50 odr_ofs_mp_1_4- inner node disablement + // 51 b2i_ds_output_1_1- inner node disablement + // 52 odr_ofs_dp_1_4- inner node disablement + // 53 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFF803C7FF80; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgb_ir_2_0- inner node disablement + // 5 ifd_lsc_1_4- inner node disablement + // 6 lsc_1_2- inner node disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 bnlm_3_4- inner node disablement + // 10 bxt_demosaic- inner node disablement + // 11 vcsc_2_0_b- inner node disablement + // 12 gltm_2_0- inner node disablement + // 13 xnr_5_4- inner node disablement + // 14 vcr_3_1- inner node disablement + // 15 glim_2_0- inner node disablement + // 16 acm_1_2- inner node disablement + // 17 gammatm_v4- inner node disablement + // 18 csc_1_1- inner node disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 22 b2i_ds_1_1- inner node disablement + // 23 lbff_crop_espa_1_4- inner node disablement + // 24 tnr7_spatial_1_1- inner node disablement + // 25 tnr_scaler_lb_1_1- inner node disablement + // 26 odr_awb_std_1_4- inner node disablement + // 27 odr_awb_sat_1_4- inner node disablement + // 28 aestatistics_2_1- inner node disablement + // 29 odr_ae_1_4- inner node disablement + // 30 odr_af_std_1_4- inner node disablement + // 31 ifd_pdaf_1_4- inner node disablement + // 32 pext_1_0- inner node disablement + // 33 pafstatistics_1_2- inner node disablement + // 34 odr_pdaf_1_4- inner node disablement + // 35 ifd_gmv_1_4- inner node disablement + // 36 gmv_statistics_1_1- inner node disablement + // 37 odr_gmv_feature_1_4- inner node disablement + // 38 odr_gmv_match_1_4- inner node disablement + // 39 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 40 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 41 tnr7_ims_1_2- inner node disablement + // 42 tnr7_bc_1_2- inner node disablement + // 43 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 44 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 45 tnr7_blend_1_1- inner node disablement + // 46 odr_tnr_fp_yuvn_1_4- inner node disablement + // 47 tnr_scaler_fp_1_1- inner node disablement + // 48 image_upscaler_1_1- inner node disablement + // 49 cas_1_1- inner node disablement + // 50 odr_ofs_mp_1_4- inner node disablement + // 51 b2i_ds_output_1_1- inner node disablement + // 52 odr_ofs_dp_1_4- inner node disablement + // 53 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000067FDBD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x67FDBD; + // DEB - 0x000000000000E13E79FFF9CE8DDBFFF1 + bitmaps.deb[0] = 0x8DDBFFF1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FF23F9F + bitmaps.teb[0] = 0x3FF23F9F; + // REB - 0x00000000000000000000001FF6F77FE7 + bitmaps.reb[0] = 0xF6F77FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffBayerPdaf2WithGmvWithTnrNoSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 54; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x3FFFF803C7FF80; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x1F000000000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf2WithGmvWithTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 66; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FCBD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E1FFFFFFFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFF2009F + bitmaps.teb[0] = 0xFFF2009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_pdaf_1_4- inner node disablement + // 18 pext_1_0- inner node disablement + // 19 pafstatistics_1_2- inner node disablement + // 20 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFE00; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FDBD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x47FDBD; + // DEB - 0x000000000000C1FFFFFFFFFEEDDBFFF1 + bitmaps.deb[0] = 0xEDDBFFF1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFF23F9F + bitmaps.teb[0] = 0xEFF23F9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F77FE7 + bitmaps.reb[0] = 0xF6F77FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 63 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x8000000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C1FFFFFFFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFF2009F + bitmaps.teb[0] = 0xEFF2009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_pdaf_1_4- inner node disablement + // 18 pext_1_0- inner node disablement + // 19 pafstatistics_1_2- inner node disablement + // 20 odr_pdaf_1_4- inner node disablement + // 63 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x80000000001FFE00; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FDBD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x27FDBD; + // DEB - 0x00000000000021FFFFFFFFFEEDDBFFF1 + bitmaps.deb[0] = 0xEDDBFFF1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFF23F9F + bitmaps.teb[0] = 0xDFF23F9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F77FE7 + bitmaps.reb[0] = 0xF6F77FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 64 b2i_ds_output_1_1- inner node disablement + // 65 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[1] = 0x3; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x00000000000021FFFFFFFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFF2009F + bitmaps.teb[0] = 0xDFF2009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_pdaf_1_4- inner node disablement + // 18 pext_1_0- inner node disablement + // 19 pafstatistics_1_2- inner node disablement + // 20 odr_pdaf_1_4- inner node disablement + // 64 b2i_ds_output_1_1- inner node disablement + // 65 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFE00; + disabledRunKernelsBitmap[1] = 0x3; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000180001E6811 + bitmaps.rbm[0] = 0x1E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001DBFFF1 + bitmaps.deb[0] = 0x1DBFFF1; + // TEB - 0x0000000000003F97 + bitmaps.teb[0] = 0x3F97; + // REB - 0x00000000000000000000000006017FE7 + bitmaps.reb[0] = 0x6017FE7; + + // Kernels disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 21 ifd_gmv_1_4- inner node disablement + // 22 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 23 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 24 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 25 ifd_segmap_bnlm_1_4- inner node disablement + // 26 smurf_bnlm_1_0- inner node disablement + // 27 bnlm_3_4- inner node disablement + // 28 bxt_demosaic- inner node disablement + // 29 vcsc_2_0_b- inner node disablement + // 30 gltm_2_0- inner node disablement + // 31 ifd_segmap_xnr_1_4- inner node disablement + // 32 smurf_xnr_1_0- inner node disablement + // 33 xnr_5_4- inner node disablement + // 34 vcr_3_1- inner node disablement + // 35 glim_2_0- inner node disablement + // 36 ifd_segmap_acm_1_4- inner node disablement + // 37 smurf_acm_1_0- inner node disablement + // 38 acm_1_2- inner node disablement + // 39 gammatm_v4- inner node disablement + // 40 csc_1_1- inner node disablement + // 41 b2i_ds_1_1- inner node disablement + // 42 lbff_crop_espa_1_4- inner node disablement + // 43 tnr7_spatial_1_1- inner node disablement + // 44 tnr_scaler_lb_1_1- inner node disablement + // 45 tnr7_ims_1_2- inner node disablement + // 46 gmv_statistics_1_1- inner node disablement + // 47 odr_gmv_feature_1_4- inner node disablement + // 48 odr_gmv_match_1_4- inner node disablement + // 49 ifd_segmap_tnr_bc_1_4- inner node disablement + // 50 smurf_tnr_bc_1_0- inner node disablement + // 51 tnr7_bc_1_2- inner node disablement + // 52 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 53 ifd_segmap_tnr_blend_1_4- inner node disablement + // 54 smurf_tnr_blend_1_0- inner node disablement + // 55 tnr7_blend_1_1- inner node disablement + // 56 odr_tnr_fp_yuvn_1_4- inner node disablement + // 57 tnr_scaler_fp_1_1- inner node disablement + // 58 image_upscaler_1_1- inner node disablement + // 59 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 60 ifd_segmap_cas_1_4- inner node disablement + // 61 smurf_cas_1_0- inner node disablement + // 62 cas_1_1- inner node disablement + // 63 odr_ofs_mp_1_4- inner node disablement + // 64 b2i_ds_output_1_1- inner node disablement + // 65 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFE00180; + disabledRunKernelsBitmap[1] = 0x3; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgb_ir_2_0- inner node disablement + // 5 ifd_lsc_1_4- inner node disablement + // 6 lsc_1_2- inner node disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_pdaf_1_4- inner node disablement + // 18 pext_1_0- inner node disablement + // 19 pafstatistics_1_2- inner node disablement + // 20 odr_pdaf_1_4- inner node disablement + // 21 ifd_gmv_1_4- inner node disablement + // 22 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 23 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 24 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 25 ifd_segmap_bnlm_1_4- inner node disablement + // 26 smurf_bnlm_1_0- inner node disablement + // 27 bnlm_3_4- inner node disablement + // 28 bxt_demosaic- inner node disablement + // 29 vcsc_2_0_b- inner node disablement + // 30 gltm_2_0- inner node disablement + // 31 ifd_segmap_xnr_1_4- inner node disablement + // 32 smurf_xnr_1_0- inner node disablement + // 33 xnr_5_4- inner node disablement + // 34 vcr_3_1- inner node disablement + // 35 glim_2_0- inner node disablement + // 36 ifd_segmap_acm_1_4- inner node disablement + // 37 smurf_acm_1_0- inner node disablement + // 38 acm_1_2- inner node disablement + // 39 gammatm_v4- inner node disablement + // 40 csc_1_1- inner node disablement + // 41 b2i_ds_1_1- inner node disablement + // 42 lbff_crop_espa_1_4- inner node disablement + // 43 tnr7_spatial_1_1- inner node disablement + // 44 tnr_scaler_lb_1_1- inner node disablement + // 45 tnr7_ims_1_2- inner node disablement + // 46 gmv_statistics_1_1- inner node disablement + // 47 odr_gmv_feature_1_4- inner node disablement + // 48 odr_gmv_match_1_4- inner node disablement + // 49 ifd_segmap_tnr_bc_1_4- inner node disablement + // 50 smurf_tnr_bc_1_0- inner node disablement + // 51 tnr7_bc_1_2- inner node disablement + // 52 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 53 ifd_segmap_tnr_blend_1_4- inner node disablement + // 54 smurf_tnr_blend_1_0- inner node disablement + // 55 tnr7_blend_1_1- inner node disablement + // 56 odr_tnr_fp_yuvn_1_4- inner node disablement + // 57 tnr_scaler_fp_1_1- inner node disablement + // 58 image_upscaler_1_1- inner node disablement + // 59 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 60 ifd_segmap_cas_1_4- inner node disablement + // 61 smurf_cas_1_0- inner node disablement + // 62 cas_1_1- inner node disablement + // 63 odr_ofs_mp_1_4- inner node disablement + // 64 b2i_ds_output_1_1- inner node disablement + // 65 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFFFFFFF; + disabledRunKernelsBitmap[1] = 0x3; + } + else // default inner node + { + // RBM - 0x00000000000000000067FDBD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x67FDBD; + // DEB - 0x000000000000E1FFFFFFFFFEEDDBFFF1 + bitmaps.deb[0] = 0xEDDBFFF1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFF23F9F + bitmaps.teb[0] = 0xFFF23F9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F77FE7 + bitmaps.reb[0] = 0xF6F77FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffBayerPdaf2WithGmvWithTnrWithSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 66; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0xFFFFFFFFFFE00180; + disabledRunKernelsBitmap[1] |= 0x3; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0xF400000000000000; + disabledRunKernelsBitmap[1] |= 0x3; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf3NoGmvNoTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 37; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000064009D58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1200000F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x000000003000009F + bitmaps.teb[0] = 0x3000009F; + // REB - 0x00000000000000000000001F16F787E7 + bitmaps.reb[0] = 0x16F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 22 rgbs_grid_1_1- inner node disablement + // 23 ccm_3a_2_0- inner node disablement + // 24 fr_grid_1_0- inner node disablement + // 32 odr_awb_std_1_4- inner node disablement + // 33 odr_awb_sat_1_4- inner node disablement + // 34 aestatistics_2_1- inner node disablement + // 35 odr_ae_1_4- inner node disablement + // 36 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1F01C000D0; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000044019D581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x44019D; + // DEB - 0x000000000000C1200000F9CE8DDBFDF1 + bitmaps.deb[0] = 0x8DDBFDF1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x0000000020003E9F + bitmaps.teb[0] = 0x20003E9F; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 29 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x20000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000044009D58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1200000F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x000000002000009F + bitmaps.teb[0] = 0x2000009F; + // REB - 0x00000000000000000000001F16F787E7 + bitmaps.reb[0] = 0x16F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 22 rgbs_grid_1_1- inner node disablement + // 23 ccm_3a_2_0- inner node disablement + // 24 fr_grid_1_0- inner node disablement + // 29 odr_ofs_mp_1_4- inner node disablement + // 32 odr_awb_std_1_4- inner node disablement + // 33 odr_awb_sat_1_4- inner node disablement + // 34 aestatistics_2_1- inner node disablement + // 35 odr_ae_1_4- inner node disablement + // 36 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1F21C000D0; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000024019D581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x24019D; + // DEB - 0x00000000000021200000F9CE8DDBFDF1 + bitmaps.deb[0] = 0x8DDBFDF1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x0000000010003E9F + bitmaps.teb[0] = 0x10003E9F; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 30 b2i_ds_output_1_1- inner node disablement + // 31 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC0000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000024009D58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021200000F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x000000001000009F + bitmaps.teb[0] = 0x1000009F; + // REB - 0x00000000000000000000001F16F787E7 + bitmaps.reb[0] = 0x16F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 22 rgbs_grid_1_1- inner node disablement + // 23 ccm_3a_2_0- inner node disablement + // 24 fr_grid_1_0- inner node disablement + // 30 b2i_ds_output_1_1- inner node disablement + // 31 odr_ofs_dp_1_4- inner node disablement + // 32 odr_awb_std_1_4- inner node disablement + // 33 odr_awb_sat_1_4- inner node disablement + // 34 aestatistics_2_1- inner node disablement + // 35 odr_ae_1_4- inner node disablement + // 36 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FC1C000D0; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000180081E6811 + bitmaps.rbm[0] = 0x81E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001DBFDF1 + bitmaps.deb[0] = 0x1DBFDF1; + // TEB - 0x0000000000003E97 + bitmaps.teb[0] = 0x3E97; + // REB - 0x0000000000000000000000000601FFE7 + bitmaps.reb[0] = 0x601FFE7; + + // Kernels disablement + // 10 gd_2_2- inner node disablement + // 11 wb_1_1- inner node disablement + // 12 bnlm_3_4- inner node disablement + // 13 bxt_demosaic- inner node disablement + // 14 vcsc_2_0_b- inner node disablement + // 15 gltm_2_0- inner node disablement + // 16 xnr_5_4- inner node disablement + // 17 vcr_3_1- inner node disablement + // 18 glim_2_0- inner node disablement + // 19 acm_1_2- inner node disablement + // 20 gammatm_v4- inner node disablement + // 21 csc_1_1- inner node disablement + // 25 b2i_ds_1_1- inner node disablement + // 26 lbff_crop_espa_1_4- inner node disablement + // 27 image_upscaler_1_1- inner node disablement + // 28 cas_1_1- inner node disablement + // 29 odr_ofs_mp_1_4- inner node disablement + // 30 b2i_ds_output_1_1- inner node disablement + // 31 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFE3FFC00; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 pext_1_0- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 8 ifd_lsc_1_4- inner node disablement + // 9 lsc_1_2- inner node disablement + // 10 gd_2_2- inner node disablement + // 11 wb_1_1- inner node disablement + // 12 bnlm_3_4- inner node disablement + // 13 bxt_demosaic- inner node disablement + // 14 vcsc_2_0_b- inner node disablement + // 15 gltm_2_0- inner node disablement + // 16 xnr_5_4- inner node disablement + // 17 vcr_3_1- inner node disablement + // 18 glim_2_0- inner node disablement + // 19 acm_1_2- inner node disablement + // 20 gammatm_v4- inner node disablement + // 21 csc_1_1- inner node disablement + // 22 rgbs_grid_1_1- inner node disablement + // 23 ccm_3a_2_0- inner node disablement + // 24 fr_grid_1_0- inner node disablement + // 25 b2i_ds_1_1- inner node disablement + // 26 lbff_crop_espa_1_4- inner node disablement + // 27 image_upscaler_1_1- inner node disablement + // 28 cas_1_1- inner node disablement + // 29 odr_ofs_mp_1_4- inner node disablement + // 30 b2i_ds_output_1_1- inner node disablement + // 31 odr_ofs_dp_1_4- inner node disablement + // 32 odr_awb_std_1_4- inner node disablement + // 33 odr_awb_sat_1_4- inner node disablement + // 34 aestatistics_2_1- inner node disablement + // 35 odr_ae_1_4- inner node disablement + // 36 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000064019D581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x64019D; + // DEB - 0x000000000000E1200000F9CE8DDBFDF1 + bitmaps.deb[0] = 0x8DDBFDF1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x0000000030003E9F + bitmaps.teb[0] = 0x30003E9F; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffBayerPdaf3NoGmvNoTnrNoSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 37; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0xFE3FFC00; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0xF8000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf3WithGmvNoTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 41; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x0000000000000000006400BD58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E120000FF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x000000003032009F + bitmaps.teb[0] = 0x3032009F; + // REB - 0x00000000000000000000001F16F787E7 + bitmaps.reb[0] = 0x16F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 22 rgbs_grid_1_1- inner node disablement + // 23 ccm_3a_2_0- inner node disablement + // 24 fr_grid_1_0- inner node disablement + // 32 odr_awb_std_1_4- inner node disablement + // 33 odr_awb_sat_1_4- inner node disablement + // 34 aestatistics_2_1- inner node disablement + // 35 odr_ae_1_4- inner node disablement + // 36 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1F01C000D0; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x0000000000000000004401BD581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x4401BD; + // DEB - 0x000000000000C120000FF9CE8DDBFDF1 + bitmaps.deb[0] = 0x8DDBFDF1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x0000000020323E9F + bitmaps.teb[0] = 0x20323E9F; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 29 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x20000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x0000000000000000004400BD58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C120000FF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x000000002032009F + bitmaps.teb[0] = 0x2032009F; + // REB - 0x00000000000000000000001F16F787E7 + bitmaps.reb[0] = 0x16F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 22 rgbs_grid_1_1- inner node disablement + // 23 ccm_3a_2_0- inner node disablement + // 24 fr_grid_1_0- inner node disablement + // 29 odr_ofs_mp_1_4- inner node disablement + // 32 odr_awb_std_1_4- inner node disablement + // 33 odr_awb_sat_1_4- inner node disablement + // 34 aestatistics_2_1- inner node disablement + // 35 odr_ae_1_4- inner node disablement + // 36 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1F21C000D0; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x0000000000000000002401BD581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x2401BD; + // DEB - 0x0000000000002120000FF9CE8DDBFDF1 + bitmaps.deb[0] = 0x8DDBFDF1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x0000000010323E9F + bitmaps.teb[0] = 0x10323E9F; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 30 b2i_ds_output_1_1- inner node disablement + // 31 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC0000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x0000000000000000002400BD58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x0000000000002120000FF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x000000001032009F + bitmaps.teb[0] = 0x1032009F; + // REB - 0x00000000000000000000001F16F787E7 + bitmaps.reb[0] = 0x16F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 22 rgbs_grid_1_1- inner node disablement + // 23 ccm_3a_2_0- inner node disablement + // 24 fr_grid_1_0- inner node disablement + // 30 b2i_ds_output_1_1- inner node disablement + // 31 odr_ofs_dp_1_4- inner node disablement + // 32 odr_awb_std_1_4- inner node disablement + // 33 odr_awb_sat_1_4- inner node disablement + // 34 aestatistics_2_1- inner node disablement + // 35 odr_ae_1_4- inner node disablement + // 36 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FC1C000D0; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000180081E6811 + bitmaps.rbm[0] = 0x81E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001DBFDF1 + bitmaps.deb[0] = 0x1DBFDF1; + // TEB - 0x0000000000003E97 + bitmaps.teb[0] = 0x3E97; + // REB - 0x0000000000000000000000000601FFE7 + bitmaps.reb[0] = 0x601FFE7; + + // Kernels disablement + // 10 gd_2_2- inner node disablement + // 11 wb_1_1- inner node disablement + // 12 bnlm_3_4- inner node disablement + // 13 bxt_demosaic- inner node disablement + // 14 vcsc_2_0_b- inner node disablement + // 15 gltm_2_0- inner node disablement + // 16 xnr_5_4- inner node disablement + // 17 vcr_3_1- inner node disablement + // 18 glim_2_0- inner node disablement + // 19 acm_1_2- inner node disablement + // 20 gammatm_v4- inner node disablement + // 21 csc_1_1- inner node disablement + // 25 b2i_ds_1_1- inner node disablement + // 26 lbff_crop_espa_1_4- inner node disablement + // 27 image_upscaler_1_1- inner node disablement + // 28 cas_1_1- inner node disablement + // 29 odr_ofs_mp_1_4- inner node disablement + // 30 b2i_ds_output_1_1- inner node disablement + // 31 odr_ofs_dp_1_4- inner node disablement + // 37 ifd_gmv_1_4- inner node disablement + // 38 gmv_statistics_1_1- inner node disablement + // 39 odr_gmv_feature_1_4- inner node disablement + // 40 odr_gmv_match_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1E0FE3FFC00; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 pext_1_0- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 8 ifd_lsc_1_4- inner node disablement + // 9 lsc_1_2- inner node disablement + // 10 gd_2_2- inner node disablement + // 11 wb_1_1- inner node disablement + // 12 bnlm_3_4- inner node disablement + // 13 bxt_demosaic- inner node disablement + // 14 vcsc_2_0_b- inner node disablement + // 15 gltm_2_0- inner node disablement + // 16 xnr_5_4- inner node disablement + // 17 vcr_3_1- inner node disablement + // 18 glim_2_0- inner node disablement + // 19 acm_1_2- inner node disablement + // 20 gammatm_v4- inner node disablement + // 21 csc_1_1- inner node disablement + // 22 rgbs_grid_1_1- inner node disablement + // 23 ccm_3a_2_0- inner node disablement + // 24 fr_grid_1_0- inner node disablement + // 25 b2i_ds_1_1- inner node disablement + // 26 lbff_crop_espa_1_4- inner node disablement + // 27 image_upscaler_1_1- inner node disablement + // 28 cas_1_1- inner node disablement + // 29 odr_ofs_mp_1_4- inner node disablement + // 30 b2i_ds_output_1_1- inner node disablement + // 31 odr_ofs_dp_1_4- inner node disablement + // 32 odr_awb_std_1_4- inner node disablement + // 33 odr_awb_sat_1_4- inner node disablement + // 34 aestatistics_2_1- inner node disablement + // 35 odr_ae_1_4- inner node disablement + // 36 odr_af_std_1_4- inner node disablement + // 37 ifd_gmv_1_4- inner node disablement + // 38 gmv_statistics_1_1- inner node disablement + // 39 odr_gmv_feature_1_4- inner node disablement + // 40 odr_gmv_match_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x0000000000000000006401BD581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x6401BD; + // DEB - 0x000000000000E120000FF9CE8DDBFDF1 + bitmaps.deb[0] = 0x8DDBFDF1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x0000000030323E9F + bitmaps.teb[0] = 0x30323E9F; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffBayerPdaf3WithGmvNoTnrNoSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 41; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x1E0FE3FFC00; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0xF8000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf3NoGmvWithTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 49; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FC9D58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E13E79F0F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC0009F + bitmaps.teb[0] = 0x3FC0009F; + // REB - 0x00000000000000000000001FF6F787E7 + bitmaps.reb[0] = 0xF6F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 22 rgbs_grid_1_1- inner node disablement + // 23 ccm_3a_2_0- inner node disablement + // 24 fr_grid_1_0- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3E1C000D0; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FD9D581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x47FD9D; + // DEB - 0x000000000000C13E79F0F9CE8DDBFDF1 + bitmaps.deb[0] = 0x8DDBFDF1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC03E9F + bitmaps.teb[0] = 0x2FC03E9F; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 45 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x200000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C13E79F0F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC0009F + bitmaps.teb[0] = 0x2FC0009F; + // REB - 0x00000000000000000000001FF6F787E7 + bitmaps.reb[0] = 0xF6F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 22 rgbs_grid_1_1- inner node disablement + // 23 ccm_3a_2_0- inner node disablement + // 24 fr_grid_1_0- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + // 45 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x2003E1C000D0; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FD9D581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x27FD9D; + // DEB - 0x000000000000213E79F0F9CE8DDBFDF1 + bitmaps.deb[0] = 0x8DDBFDF1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC03E9F + bitmaps.teb[0] = 0x1FC03E9F; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 46 b2i_ds_output_1_1- inner node disablement + // 47 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC00000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x000000000000213E79F0F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC0009F + bitmaps.teb[0] = 0x1FC0009F; + // REB - 0x00000000000000000000001FF6F787E7 + bitmaps.reb[0] = 0xF6F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 22 rgbs_grid_1_1- inner node disablement + // 23 ccm_3a_2_0- inner node disablement + // 24 fr_grid_1_0- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + // 46 b2i_ds_output_1_1- inner node disablement + // 47 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC003E1C000D0; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000180081E6811 + bitmaps.rbm[0] = 0x81E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001DBFDF1 + bitmaps.deb[0] = 0x1DBFDF1; + // TEB - 0x0000000000003E97 + bitmaps.teb[0] = 0x3E97; + // REB - 0x0000000000000000000000000601FFE7 + bitmaps.reb[0] = 0x601FFE7; + + // Kernels disablement + // 10 gd_2_2- inner node disablement + // 11 wb_1_1- inner node disablement + // 12 bnlm_3_4- inner node disablement + // 13 bxt_demosaic- inner node disablement + // 14 vcsc_2_0_b- inner node disablement + // 15 gltm_2_0- inner node disablement + // 16 xnr_5_4- inner node disablement + // 17 vcr_3_1- inner node disablement + // 18 glim_2_0- inner node disablement + // 19 acm_1_2- inner node disablement + // 20 gammatm_v4- inner node disablement + // 21 csc_1_1- inner node disablement + // 25 b2i_ds_1_1- inner node disablement + // 26 lbff_crop_espa_1_4- inner node disablement + // 27 tnr7_spatial_1_1- inner node disablement + // 28 tnr_scaler_lb_1_1- inner node disablement + // 34 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 35 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 36 tnr7_ims_1_2- inner node disablement + // 37 tnr7_bc_1_2- inner node disablement + // 38 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 39 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 40 tnr7_blend_1_1- inner node disablement + // 41 odr_tnr_fp_yuvn_1_4- inner node disablement + // 42 tnr_scaler_fp_1_1- inner node disablement + // 43 image_upscaler_1_1- inner node disablement + // 44 cas_1_1- inner node disablement + // 45 odr_ofs_mp_1_4- inner node disablement + // 46 b2i_ds_output_1_1- inner node disablement + // 47 odr_ofs_dp_1_4- inner node disablement + // 48 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFC1E3FFC00; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 pext_1_0- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 8 ifd_lsc_1_4- inner node disablement + // 9 lsc_1_2- inner node disablement + // 10 gd_2_2- inner node disablement + // 11 wb_1_1- inner node disablement + // 12 bnlm_3_4- inner node disablement + // 13 bxt_demosaic- inner node disablement + // 14 vcsc_2_0_b- inner node disablement + // 15 gltm_2_0- inner node disablement + // 16 xnr_5_4- inner node disablement + // 17 vcr_3_1- inner node disablement + // 18 glim_2_0- inner node disablement + // 19 acm_1_2- inner node disablement + // 20 gammatm_v4- inner node disablement + // 21 csc_1_1- inner node disablement + // 22 rgbs_grid_1_1- inner node disablement + // 23 ccm_3a_2_0- inner node disablement + // 24 fr_grid_1_0- inner node disablement + // 25 b2i_ds_1_1- inner node disablement + // 26 lbff_crop_espa_1_4- inner node disablement + // 27 tnr7_spatial_1_1- inner node disablement + // 28 tnr_scaler_lb_1_1- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + // 34 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 35 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 36 tnr7_ims_1_2- inner node disablement + // 37 tnr7_bc_1_2- inner node disablement + // 38 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 39 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 40 tnr7_blend_1_1- inner node disablement + // 41 odr_tnr_fp_yuvn_1_4- inner node disablement + // 42 tnr_scaler_fp_1_1- inner node disablement + // 43 image_upscaler_1_1- inner node disablement + // 44 cas_1_1- inner node disablement + // 45 odr_ofs_mp_1_4- inner node disablement + // 46 b2i_ds_output_1_1- inner node disablement + // 47 odr_ofs_dp_1_4- inner node disablement + // 48 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000067FD9D581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x67FD9D; + // DEB - 0x000000000000E13E79F0F9CE8DDBFDF1 + bitmaps.deb[0] = 0x8DDBFDF1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC03E9F + bitmaps.teb[0] = 0x3FC03E9F; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffBayerPdaf3NoGmvWithTnrNoSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 49; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x1FFFC1E3FFC00; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0xF80000000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf3WithGmvWithTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 53; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FCBD58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E13E79FFF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FF2009F + bitmaps.teb[0] = 0x3FF2009F; + // REB - 0x00000000000000000000001FF6F787E7 + bitmaps.reb[0] = 0xF6F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 22 rgbs_grid_1_1- inner node disablement + // 23 ccm_3a_2_0- inner node disablement + // 24 fr_grid_1_0- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3E1C000D0; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FDBD581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x47FDBD; + // DEB - 0x000000000000C13E79FFF9CE8DDBFDF1 + bitmaps.deb[0] = 0x8DDBFDF1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FF23E9F + bitmaps.teb[0] = 0x2FF23E9F; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 49 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x2000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C13E79FFF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FF2009F + bitmaps.teb[0] = 0x2FF2009F; + // REB - 0x00000000000000000000001FF6F787E7 + bitmaps.reb[0] = 0xF6F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 22 rgbs_grid_1_1- inner node disablement + // 23 ccm_3a_2_0- inner node disablement + // 24 fr_grid_1_0- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + // 49 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x20003E1C000D0; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FDBD581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x27FDBD; + // DEB - 0x000000000000213E79FFF9CE8DDBFDF1 + bitmaps.deb[0] = 0x8DDBFDF1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FF23E9F + bitmaps.teb[0] = 0x1FF23E9F; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 50 b2i_ds_output_1_1- inner node disablement + // 51 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x000000000000213E79FFF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FF2009F + bitmaps.teb[0] = 0x1FF2009F; + // REB - 0x00000000000000000000001FF6F787E7 + bitmaps.reb[0] = 0xF6F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 22 rgbs_grid_1_1- inner node disablement + // 23 ccm_3a_2_0- inner node disablement + // 24 fr_grid_1_0- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + // 50 b2i_ds_output_1_1- inner node disablement + // 51 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC0003E1C000D0; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000180081E6811 + bitmaps.rbm[0] = 0x81E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001DBFDF1 + bitmaps.deb[0] = 0x1DBFDF1; + // TEB - 0x0000000000003E97 + bitmaps.teb[0] = 0x3E97; + // REB - 0x0000000000000000000000000601FFE7 + bitmaps.reb[0] = 0x601FFE7; + + // Kernels disablement + // 10 gd_2_2- inner node disablement + // 11 wb_1_1- inner node disablement + // 12 bnlm_3_4- inner node disablement + // 13 bxt_demosaic- inner node disablement + // 14 vcsc_2_0_b- inner node disablement + // 15 gltm_2_0- inner node disablement + // 16 xnr_5_4- inner node disablement + // 17 vcr_3_1- inner node disablement + // 18 glim_2_0- inner node disablement + // 19 acm_1_2- inner node disablement + // 20 gammatm_v4- inner node disablement + // 21 csc_1_1- inner node disablement + // 25 b2i_ds_1_1- inner node disablement + // 26 lbff_crop_espa_1_4- inner node disablement + // 27 tnr7_spatial_1_1- inner node disablement + // 28 tnr_scaler_lb_1_1- inner node disablement + // 34 ifd_gmv_1_4- inner node disablement + // 35 gmv_statistics_1_1- inner node disablement + // 36 odr_gmv_feature_1_4- inner node disablement + // 37 odr_gmv_match_1_4- inner node disablement + // 38 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 39 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 40 tnr7_ims_1_2- inner node disablement + // 41 tnr7_bc_1_2- inner node disablement + // 42 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 43 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 44 tnr7_blend_1_1- inner node disablement + // 45 odr_tnr_fp_yuvn_1_4- inner node disablement + // 46 tnr_scaler_fp_1_1- inner node disablement + // 47 image_upscaler_1_1- inner node disablement + // 48 cas_1_1- inner node disablement + // 49 odr_ofs_mp_1_4- inner node disablement + // 50 b2i_ds_output_1_1- inner node disablement + // 51 odr_ofs_dp_1_4- inner node disablement + // 52 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFC1E3FFC00; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 pext_1_0- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 8 ifd_lsc_1_4- inner node disablement + // 9 lsc_1_2- inner node disablement + // 10 gd_2_2- inner node disablement + // 11 wb_1_1- inner node disablement + // 12 bnlm_3_4- inner node disablement + // 13 bxt_demosaic- inner node disablement + // 14 vcsc_2_0_b- inner node disablement + // 15 gltm_2_0- inner node disablement + // 16 xnr_5_4- inner node disablement + // 17 vcr_3_1- inner node disablement + // 18 glim_2_0- inner node disablement + // 19 acm_1_2- inner node disablement + // 20 gammatm_v4- inner node disablement + // 21 csc_1_1- inner node disablement + // 22 rgbs_grid_1_1- inner node disablement + // 23 ccm_3a_2_0- inner node disablement + // 24 fr_grid_1_0- inner node disablement + // 25 b2i_ds_1_1- inner node disablement + // 26 lbff_crop_espa_1_4- inner node disablement + // 27 tnr7_spatial_1_1- inner node disablement + // 28 tnr_scaler_lb_1_1- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + // 34 ifd_gmv_1_4- inner node disablement + // 35 gmv_statistics_1_1- inner node disablement + // 36 odr_gmv_feature_1_4- inner node disablement + // 37 odr_gmv_match_1_4- inner node disablement + // 38 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 39 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 40 tnr7_ims_1_2- inner node disablement + // 41 tnr7_bc_1_2- inner node disablement + // 42 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 43 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 44 tnr7_blend_1_1- inner node disablement + // 45 odr_tnr_fp_yuvn_1_4- inner node disablement + // 46 tnr_scaler_fp_1_1- inner node disablement + // 47 image_upscaler_1_1- inner node disablement + // 48 cas_1_1- inner node disablement + // 49 odr_ofs_mp_1_4- inner node disablement + // 50 b2i_ds_output_1_1- inner node disablement + // 51 odr_ofs_dp_1_4- inner node disablement + // 52 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000067FDBD581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x67FDBD; + // DEB - 0x000000000000E13E79FFF9CE8DDBFDF1 + bitmaps.deb[0] = 0x8DDBFDF1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FF23E9F + bitmaps.teb[0] = 0x3FF23E9F; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffBayerPdaf3WithGmvWithTnrNoSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 53; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x1FFFFC1E3FFC00; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0xF800000000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf3WithGmvWithTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 65; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FCBD58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E1FFFFFFFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFF2009F + bitmaps.teb[0] = 0xFFF2009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F787E7 + bitmaps.reb[0] = 0xF6F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 12 rgbs_grid_1_1- inner node disablement + // 13 ccm_3a_2_0- inner node disablement + // 14 fr_grid_1_0- inner node disablement + // 15 odr_awb_std_1_4- inner node disablement + // 16 odr_awb_sat_1_4- inner node disablement + // 17 aestatistics_2_1- inner node disablement + // 18 odr_ae_1_4- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFF0D0; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FDBD581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x47FDBD; + // DEB - 0x000000000000C1FFFFFFFFFEEDDBFDF1 + bitmaps.deb[0] = 0xEDDBFDF1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFF23E9F + bitmaps.teb[0] = 0xEFF23E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 62 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x4000000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C1FFFFFFFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFF2009F + bitmaps.teb[0] = 0xEFF2009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F787E7 + bitmaps.reb[0] = 0xF6F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 12 rgbs_grid_1_1- inner node disablement + // 13 ccm_3a_2_0- inner node disablement + // 14 fr_grid_1_0- inner node disablement + // 15 odr_awb_std_1_4- inner node disablement + // 16 odr_awb_sat_1_4- inner node disablement + // 17 aestatistics_2_1- inner node disablement + // 18 odr_ae_1_4- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 62 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x40000000000FF0D0; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FDBD581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x27FDBD; + // DEB - 0x00000000000021FFFFFFFFFEEDDBFDF1 + bitmaps.deb[0] = 0xEDDBFDF1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFF23E9F + bitmaps.teb[0] = 0xDFF23E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 63 b2i_ds_output_1_1- inner node disablement + // 64 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x8000000000000000; + disabledRunKernelsBitmap[1] = 0x1; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x00000000000021FFFFFFFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFF2009F + bitmaps.teb[0] = 0xDFF2009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F787E7 + bitmaps.reb[0] = 0xF6F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 12 rgbs_grid_1_1- inner node disablement + // 13 ccm_3a_2_0- inner node disablement + // 14 fr_grid_1_0- inner node disablement + // 15 odr_awb_std_1_4- inner node disablement + // 16 odr_awb_sat_1_4- inner node disablement + // 17 aestatistics_2_1- inner node disablement + // 18 odr_ae_1_4- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 63 b2i_ds_output_1_1- inner node disablement + // 64 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x80000000000FF0D0; + disabledRunKernelsBitmap[1] = 0x1; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000180081E6811 + bitmaps.rbm[0] = 0x81E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001DBFDF1 + bitmaps.deb[0] = 0x1DBFDF1; + // TEB - 0x0000000000003E97 + bitmaps.teb[0] = 0x3E97; + // REB - 0x0000000000000000000000000601FFE7 + bitmaps.reb[0] = 0x601FFE7; + + // Kernels disablement + // 10 gd_2_2- inner node disablement + // 11 wb_1_1- inner node disablement + // 20 ifd_gmv_1_4- inner node disablement + // 21 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 22 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 23 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 24 ifd_segmap_bnlm_1_4- inner node disablement + // 25 smurf_bnlm_1_0- inner node disablement + // 26 bnlm_3_4- inner node disablement + // 27 bxt_demosaic- inner node disablement + // 28 vcsc_2_0_b- inner node disablement + // 29 gltm_2_0- inner node disablement + // 30 ifd_segmap_xnr_1_4- inner node disablement + // 31 smurf_xnr_1_0- inner node disablement + // 32 xnr_5_4- inner node disablement + // 33 vcr_3_1- inner node disablement + // 34 glim_2_0- inner node disablement + // 35 ifd_segmap_acm_1_4- inner node disablement + // 36 smurf_acm_1_0- inner node disablement + // 37 acm_1_2- inner node disablement + // 38 gammatm_v4- inner node disablement + // 39 csc_1_1- inner node disablement + // 40 b2i_ds_1_1- inner node disablement + // 41 lbff_crop_espa_1_4- inner node disablement + // 42 tnr7_spatial_1_1- inner node disablement + // 43 tnr_scaler_lb_1_1- inner node disablement + // 44 tnr7_ims_1_2- inner node disablement + // 45 gmv_statistics_1_1- inner node disablement + // 46 odr_gmv_feature_1_4- inner node disablement + // 47 odr_gmv_match_1_4- inner node disablement + // 48 ifd_segmap_tnr_bc_1_4- inner node disablement + // 49 smurf_tnr_bc_1_0- inner node disablement + // 50 tnr7_bc_1_2- inner node disablement + // 51 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 52 ifd_segmap_tnr_blend_1_4- inner node disablement + // 53 smurf_tnr_blend_1_0- inner node disablement + // 54 tnr7_blend_1_1- inner node disablement + // 55 odr_tnr_fp_yuvn_1_4- inner node disablement + // 56 tnr_scaler_fp_1_1- inner node disablement + // 57 image_upscaler_1_1- inner node disablement + // 58 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 59 ifd_segmap_cas_1_4- inner node disablement + // 60 smurf_cas_1_0- inner node disablement + // 61 cas_1_1- inner node disablement + // 62 odr_ofs_mp_1_4- inner node disablement + // 63 b2i_ds_output_1_1- inner node disablement + // 64 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFF00C00; + disabledRunKernelsBitmap[1] = 0x1; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 pext_1_0- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 8 ifd_lsc_1_4- inner node disablement + // 9 lsc_1_2- inner node disablement + // 10 gd_2_2- inner node disablement + // 11 wb_1_1- inner node disablement + // 12 rgbs_grid_1_1- inner node disablement + // 13 ccm_3a_2_0- inner node disablement + // 14 fr_grid_1_0- inner node disablement + // 15 odr_awb_std_1_4- inner node disablement + // 16 odr_awb_sat_1_4- inner node disablement + // 17 aestatistics_2_1- inner node disablement + // 18 odr_ae_1_4- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 20 ifd_gmv_1_4- inner node disablement + // 21 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 22 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 23 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 24 ifd_segmap_bnlm_1_4- inner node disablement + // 25 smurf_bnlm_1_0- inner node disablement + // 26 bnlm_3_4- inner node disablement + // 27 bxt_demosaic- inner node disablement + // 28 vcsc_2_0_b- inner node disablement + // 29 gltm_2_0- inner node disablement + // 30 ifd_segmap_xnr_1_4- inner node disablement + // 31 smurf_xnr_1_0- inner node disablement + // 32 xnr_5_4- inner node disablement + // 33 vcr_3_1- inner node disablement + // 34 glim_2_0- inner node disablement + // 35 ifd_segmap_acm_1_4- inner node disablement + // 36 smurf_acm_1_0- inner node disablement + // 37 acm_1_2- inner node disablement + // 38 gammatm_v4- inner node disablement + // 39 csc_1_1- inner node disablement + // 40 b2i_ds_1_1- inner node disablement + // 41 lbff_crop_espa_1_4- inner node disablement + // 42 tnr7_spatial_1_1- inner node disablement + // 43 tnr_scaler_lb_1_1- inner node disablement + // 44 tnr7_ims_1_2- inner node disablement + // 45 gmv_statistics_1_1- inner node disablement + // 46 odr_gmv_feature_1_4- inner node disablement + // 47 odr_gmv_match_1_4- inner node disablement + // 48 ifd_segmap_tnr_bc_1_4- inner node disablement + // 49 smurf_tnr_bc_1_0- inner node disablement + // 50 tnr7_bc_1_2- inner node disablement + // 51 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 52 ifd_segmap_tnr_blend_1_4- inner node disablement + // 53 smurf_tnr_blend_1_0- inner node disablement + // 54 tnr7_blend_1_1- inner node disablement + // 55 odr_tnr_fp_yuvn_1_4- inner node disablement + // 56 tnr_scaler_fp_1_1- inner node disablement + // 57 image_upscaler_1_1- inner node disablement + // 58 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 59 ifd_segmap_cas_1_4- inner node disablement + // 60 smurf_cas_1_0- inner node disablement + // 61 cas_1_1- inner node disablement + // 62 odr_ofs_mp_1_4- inner node disablement + // 63 b2i_ds_output_1_1- inner node disablement + // 64 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFFFFFFF; + disabledRunKernelsBitmap[1] = 0x1; + } + else // default inner node + { + // RBM - 0x00000000000000000067FDBD581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x67FDBD; + // DEB - 0x000000000000E1FFFFFFFFFEEDDBFDF1 + bitmaps.deb[0] = 0xEDDBFDF1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFF23E9F + bitmaps.teb[0] = 0xFFF23E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffBayerPdaf3WithGmvWithTnrWithSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 65; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0xFFFFFFFFFFF00C00; + disabledRunKernelsBitmap[1] |= 0x1; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0xFA00000000000000; + disabledRunKernelsBitmap[1] |= 0x1; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void IsysDolOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + + // No inner nodes + (void)nodeInnerOptions; +} + +void IsysDolOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + (void)vanishStatus; + return; +} + +void LbffDol2InputsNoGmvNoTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 37; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[8].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[17].run_kernel.enable = 0; // wb_1_1 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000064009D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1200000F9CE8D8001FB + bitmaps.deb[0] = 0x8D8001FB; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x00000000300000BF + bitmaps.teb[0] = 0x300000BF; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 28 fr_grid_1_0- inner node disablement + // 36 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1010003EC0; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000044009D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1200000F9CE8D9FF1FB + bitmaps.deb[0] = 0x8D9FF1FB; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x0000000020041EBF + bitmaps.teb[0] = 0x20041EBF; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 33 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x200000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000044009D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1200000F9CE8D8001FB + bitmaps.deb[0] = 0x8D8001FB; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x00000000200000BF + bitmaps.teb[0] = 0x200000BF; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 28 fr_grid_1_0- inner node disablement + // 33 odr_ofs_mp_1_4- inner node disablement + // 36 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1210003EC0; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000024009D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021200000F9CE8D9FF1FB + bitmaps.deb[0] = 0x8D9FF1FB; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x0000000010041EBF + bitmaps.teb[0] = 0x10041EBF; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 34 b2i_ds_output_1_1- inner node disablement + // 35 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC00000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000024009D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021200000F9CE8D8001FB + bitmaps.deb[0] = 0x8D8001FB; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x00000000100000BF + bitmaps.teb[0] = 0x100000BF; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 28 fr_grid_1_0- inner node disablement + // 34 b2i_ds_output_1_1- inner node disablement + // 35 odr_ofs_dp_1_4- inner node disablement + // 36 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1C10003EC0; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000008002526E16 + bitmaps.rbm[0] = 0x2526E16; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019FF1FB + bitmaps.deb[0] = 0x19FF1FB; + // TEB - 0x0000000000041EBF + bitmaps.teb[0] = 0x41EBF; + // REB - 0x00000000000000000000000002007FF7 + bitmaps.reb[0] = 0x2007FF7; + + // Kernels disablement + // 16 gd_2_2- inner node disablement + // 17 wb_1_1- inner node disablement + // 18 bnlm_3_4- inner node disablement + // 19 bxt_demosaic- inner node disablement + // 20 vcsc_2_0_b- inner node disablement + // 21 gltm_2_0- inner node disablement + // 22 xnr_5_4- inner node disablement + // 23 vcr_3_1- inner node disablement + // 24 glim_2_0- inner node disablement + // 25 acm_1_2- inner node disablement + // 26 gammatm_v4- inner node disablement + // 27 csc_1_1- inner node disablement + // 29 b2i_ds_1_1- inner node disablement + // 30 lbff_crop_espa_1_4- inner node disablement + // 31 image_upscaler_1_1- inner node disablement + // 32 cas_1_1- inner node disablement + // 33 odr_ofs_mp_1_4- inner node disablement + // 34 b2i_ds_output_1_1- inner node disablement + // 35 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFEFFF0000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 ifd_pipe_long_1_4- inner node disablement + // 2 dol_lite_1_2- inner node disablement + // 3 bxt_blc- inner node disablement + // 4 linearization2_0- inner node disablement + // 5 dpc_2_2- inner node disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 8 rgb_ir_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 14 ifd_lsc_1_4- inner node disablement + // 15 lsc_1_2- inner node disablement + // 16 gd_2_2- inner node disablement + // 17 wb_1_1- inner node disablement + // 18 bnlm_3_4- inner node disablement + // 19 bxt_demosaic- inner node disablement + // 20 vcsc_2_0_b- inner node disablement + // 21 gltm_2_0- inner node disablement + // 22 xnr_5_4- inner node disablement + // 23 vcr_3_1- inner node disablement + // 24 glim_2_0- inner node disablement + // 25 acm_1_2- inner node disablement + // 26 gammatm_v4- inner node disablement + // 27 csc_1_1- inner node disablement + // 28 fr_grid_1_0- inner node disablement + // 29 b2i_ds_1_1- inner node disablement + // 30 lbff_crop_espa_1_4- inner node disablement + // 31 image_upscaler_1_1- inner node disablement + // 32 cas_1_1- inner node disablement + // 33 odr_ofs_mp_1_4- inner node disablement + // 34 b2i_ds_output_1_1- inner node disablement + // 35 odr_ofs_dp_1_4- inner node disablement + // 36 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000064009D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1200000F9CE8D9FF1FB + bitmaps.deb[0] = 0x8D9FF1FB; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x0000000030041EBF + bitmaps.teb[0] = 0x30041EBF; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffDol2InputsNoGmvNoTnrNoSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 37; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[8].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[17].run_kernel.enable = 0; // wb_1_1 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0xFEFFF0000; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0xF80000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffDol2InputsWithGmvNoTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 41; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[8].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[17].run_kernel.enable = 0; // wb_1_1 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x0000000000000000006400BD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E120000FF9CE8D8001FB + bitmaps.deb[0] = 0x8D8001FB; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x00000000303200BF + bitmaps.teb[0] = 0x303200BF; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 28 fr_grid_1_0- inner node disablement + // 36 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1010003EC0; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x0000000000000000004400BD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C120000FF9CE8D9FF1FB + bitmaps.deb[0] = 0x8D9FF1FB; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x0000000020361EBF + bitmaps.teb[0] = 0x20361EBF; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 33 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x200000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x0000000000000000004400BD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C120000FF9CE8D8001FB + bitmaps.deb[0] = 0x8D8001FB; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x00000000203200BF + bitmaps.teb[0] = 0x203200BF; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 28 fr_grid_1_0- inner node disablement + // 33 odr_ofs_mp_1_4- inner node disablement + // 36 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1210003EC0; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x0000000000000000002400BD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x0000000000002120000FF9CE8D9FF1FB + bitmaps.deb[0] = 0x8D9FF1FB; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x0000000010361EBF + bitmaps.teb[0] = 0x10361EBF; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 34 b2i_ds_output_1_1- inner node disablement + // 35 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC00000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x0000000000000000002400BD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x0000000000002120000FF9CE8D8001FB + bitmaps.deb[0] = 0x8D8001FB; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x00000000103200BF + bitmaps.teb[0] = 0x103200BF; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 28 fr_grid_1_0- inner node disablement + // 34 b2i_ds_output_1_1- inner node disablement + // 35 odr_ofs_dp_1_4- inner node disablement + // 36 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1C10003EC0; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000008002526E16 + bitmaps.rbm[0] = 0x2526E16; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019FF1FB + bitmaps.deb[0] = 0x19FF1FB; + // TEB - 0x0000000000041EBF + bitmaps.teb[0] = 0x41EBF; + // REB - 0x00000000000000000000000002007FF7 + bitmaps.reb[0] = 0x2007FF7; + + // Kernels disablement + // 16 gd_2_2- inner node disablement + // 17 wb_1_1- inner node disablement + // 18 bnlm_3_4- inner node disablement + // 19 bxt_demosaic- inner node disablement + // 20 vcsc_2_0_b- inner node disablement + // 21 gltm_2_0- inner node disablement + // 22 xnr_5_4- inner node disablement + // 23 vcr_3_1- inner node disablement + // 24 glim_2_0- inner node disablement + // 25 acm_1_2- inner node disablement + // 26 gammatm_v4- inner node disablement + // 27 csc_1_1- inner node disablement + // 29 b2i_ds_1_1- inner node disablement + // 30 lbff_crop_espa_1_4- inner node disablement + // 31 image_upscaler_1_1- inner node disablement + // 32 cas_1_1- inner node disablement + // 33 odr_ofs_mp_1_4- inner node disablement + // 34 b2i_ds_output_1_1- inner node disablement + // 35 odr_ofs_dp_1_4- inner node disablement + // 37 ifd_gmv_1_4- inner node disablement + // 38 gmv_statistics_1_1- inner node disablement + // 39 odr_gmv_feature_1_4- inner node disablement + // 40 odr_gmv_match_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1EFEFFF0000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 ifd_pipe_long_1_4- inner node disablement + // 2 dol_lite_1_2- inner node disablement + // 3 bxt_blc- inner node disablement + // 4 linearization2_0- inner node disablement + // 5 dpc_2_2- inner node disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 8 rgb_ir_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 14 ifd_lsc_1_4- inner node disablement + // 15 lsc_1_2- inner node disablement + // 16 gd_2_2- inner node disablement + // 17 wb_1_1- inner node disablement + // 18 bnlm_3_4- inner node disablement + // 19 bxt_demosaic- inner node disablement + // 20 vcsc_2_0_b- inner node disablement + // 21 gltm_2_0- inner node disablement + // 22 xnr_5_4- inner node disablement + // 23 vcr_3_1- inner node disablement + // 24 glim_2_0- inner node disablement + // 25 acm_1_2- inner node disablement + // 26 gammatm_v4- inner node disablement + // 27 csc_1_1- inner node disablement + // 28 fr_grid_1_0- inner node disablement + // 29 b2i_ds_1_1- inner node disablement + // 30 lbff_crop_espa_1_4- inner node disablement + // 31 image_upscaler_1_1- inner node disablement + // 32 cas_1_1- inner node disablement + // 33 odr_ofs_mp_1_4- inner node disablement + // 34 b2i_ds_output_1_1- inner node disablement + // 35 odr_ofs_dp_1_4- inner node disablement + // 36 odr_af_std_1_4- inner node disablement + // 37 ifd_gmv_1_4- inner node disablement + // 38 gmv_statistics_1_1- inner node disablement + // 39 odr_gmv_feature_1_4- inner node disablement + // 40 odr_gmv_match_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x0000000000000000006400BD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E120000FF9CE8D9FF1FB + bitmaps.deb[0] = 0x8D9FF1FB; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x0000000030361EBF + bitmaps.teb[0] = 0x30361EBF; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffDol2InputsWithGmvNoTnrNoSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 41; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[8].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[17].run_kernel.enable = 0; // wb_1_1 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x1EFEFFF0000; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0xF80000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffDol2InputsNoGmvWithTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 49; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[8].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[17].run_kernel.enable = 0; // wb_1_1 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FC9D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E13E79F0F9CE8D8001FB + bitmaps.deb[0] = 0x8D8001FB; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC000BF + bitmaps.teb[0] = 0x3FC000BF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 28 fr_grid_1_0- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x210003EC0; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C13E79F0F9CE8D9FF1FB + bitmaps.deb[0] = 0x8D9FF1FB; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC41EBF + bitmaps.teb[0] = 0x2FC41EBF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 45 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x200000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C13E79F0F9CE8D8001FB + bitmaps.deb[0] = 0x8D8001FB; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC000BF + bitmaps.teb[0] = 0x2FC000BF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 28 fr_grid_1_0- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + // 45 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x200210003EC0; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x000000000000213E79F0F9CE8D9FF1FB + bitmaps.deb[0] = 0x8D9FF1FB; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC41EBF + bitmaps.teb[0] = 0x1FC41EBF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 46 b2i_ds_output_1_1- inner node disablement + // 47 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC00000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x000000000000213E79F0F9CE8D8001FB + bitmaps.deb[0] = 0x8D8001FB; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC000BF + bitmaps.teb[0] = 0x1FC000BF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 28 fr_grid_1_0- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + // 46 b2i_ds_output_1_1- inner node disablement + // 47 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC00210003EC0; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000008002526E16 + bitmaps.rbm[0] = 0x2526E16; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019FF1FB + bitmaps.deb[0] = 0x19FF1FB; + // TEB - 0x0000000000041EBF + bitmaps.teb[0] = 0x41EBF; + // REB - 0x00000000000000000000000002007FF7 + bitmaps.reb[0] = 0x2007FF7; + + // Kernels disablement + // 16 gd_2_2- inner node disablement + // 17 wb_1_1- inner node disablement + // 18 bnlm_3_4- inner node disablement + // 19 bxt_demosaic- inner node disablement + // 20 vcsc_2_0_b- inner node disablement + // 21 gltm_2_0- inner node disablement + // 22 xnr_5_4- inner node disablement + // 23 vcr_3_1- inner node disablement + // 24 glim_2_0- inner node disablement + // 25 acm_1_2- inner node disablement + // 26 gammatm_v4- inner node disablement + // 27 csc_1_1- inner node disablement + // 29 b2i_ds_1_1- inner node disablement + // 30 lbff_crop_espa_1_4- inner node disablement + // 31 tnr7_spatial_1_1- inner node disablement + // 32 tnr_scaler_lb_1_1- inner node disablement + // 34 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 35 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 36 tnr7_ims_1_2- inner node disablement + // 37 tnr7_bc_1_2- inner node disablement + // 38 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 39 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 40 tnr7_blend_1_1- inner node disablement + // 41 odr_tnr_fp_yuvn_1_4- inner node disablement + // 42 tnr_scaler_fp_1_1- inner node disablement + // 43 image_upscaler_1_1- inner node disablement + // 44 cas_1_1- inner node disablement + // 45 odr_ofs_mp_1_4- inner node disablement + // 46 b2i_ds_output_1_1- inner node disablement + // 47 odr_ofs_dp_1_4- inner node disablement + // 48 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFDEFFF0000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 ifd_pipe_long_1_4- inner node disablement + // 2 dol_lite_1_2- inner node disablement + // 3 bxt_blc- inner node disablement + // 4 linearization2_0- inner node disablement + // 5 dpc_2_2- inner node disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 8 rgb_ir_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 14 ifd_lsc_1_4- inner node disablement + // 15 lsc_1_2- inner node disablement + // 16 gd_2_2- inner node disablement + // 17 wb_1_1- inner node disablement + // 18 bnlm_3_4- inner node disablement + // 19 bxt_demosaic- inner node disablement + // 20 vcsc_2_0_b- inner node disablement + // 21 gltm_2_0- inner node disablement + // 22 xnr_5_4- inner node disablement + // 23 vcr_3_1- inner node disablement + // 24 glim_2_0- inner node disablement + // 25 acm_1_2- inner node disablement + // 26 gammatm_v4- inner node disablement + // 27 csc_1_1- inner node disablement + // 28 fr_grid_1_0- inner node disablement + // 29 b2i_ds_1_1- inner node disablement + // 30 lbff_crop_espa_1_4- inner node disablement + // 31 tnr7_spatial_1_1- inner node disablement + // 32 tnr_scaler_lb_1_1- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + // 34 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 35 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 36 tnr7_ims_1_2- inner node disablement + // 37 tnr7_bc_1_2- inner node disablement + // 38 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 39 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 40 tnr7_blend_1_1- inner node disablement + // 41 odr_tnr_fp_yuvn_1_4- inner node disablement + // 42 tnr_scaler_fp_1_1- inner node disablement + // 43 image_upscaler_1_1- inner node disablement + // 44 cas_1_1- inner node disablement + // 45 odr_ofs_mp_1_4- inner node disablement + // 46 b2i_ds_output_1_1- inner node disablement + // 47 odr_ofs_dp_1_4- inner node disablement + // 48 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000067FC9D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E13E79F0F9CE8D9FF1FB + bitmaps.deb[0] = 0x8D9FF1FB; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC41EBF + bitmaps.teb[0] = 0x3FC41EBF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffDol2InputsNoGmvWithTnrNoSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 49; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[8].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[17].run_kernel.enable = 0; // wb_1_1 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x1FFFDEFFF0000; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0xF80000000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffDol2InputsWithGmvWithTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 53; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[8].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[17].run_kernel.enable = 0; // wb_1_1 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FCBD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E13E79FFF9CE8D8001FB + bitmaps.deb[0] = 0x8D8001FB; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FF200BF + bitmaps.teb[0] = 0x3FF200BF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 28 fr_grid_1_0- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x210003EC0; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C13E79FFF9CE8D9FF1FB + bitmaps.deb[0] = 0x8D9FF1FB; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FF61EBF + bitmaps.teb[0] = 0x2FF61EBF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 49 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x2000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C13E79FFF9CE8D8001FB + bitmaps.deb[0] = 0x8D8001FB; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FF200BF + bitmaps.teb[0] = 0x2FF200BF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 28 fr_grid_1_0- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + // 49 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x2000210003EC0; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x000000000000213E79FFF9CE8D9FF1FB + bitmaps.deb[0] = 0x8D9FF1FB; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FF61EBF + bitmaps.teb[0] = 0x1FF61EBF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 50 b2i_ds_output_1_1- inner node disablement + // 51 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x000000000000213E79FFF9CE8D8001FB + bitmaps.deb[0] = 0x8D8001FB; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FF200BF + bitmaps.teb[0] = 0x1FF200BF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 28 fr_grid_1_0- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + // 50 b2i_ds_output_1_1- inner node disablement + // 51 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC000210003EC0; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000008002526E16 + bitmaps.rbm[0] = 0x2526E16; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019FF1FB + bitmaps.deb[0] = 0x19FF1FB; + // TEB - 0x0000000000041EBF + bitmaps.teb[0] = 0x41EBF; + // REB - 0x00000000000000000000000002007FF7 + bitmaps.reb[0] = 0x2007FF7; + + // Kernels disablement + // 16 gd_2_2- inner node disablement + // 17 wb_1_1- inner node disablement + // 18 bnlm_3_4- inner node disablement + // 19 bxt_demosaic- inner node disablement + // 20 vcsc_2_0_b- inner node disablement + // 21 gltm_2_0- inner node disablement + // 22 xnr_5_4- inner node disablement + // 23 vcr_3_1- inner node disablement + // 24 glim_2_0- inner node disablement + // 25 acm_1_2- inner node disablement + // 26 gammatm_v4- inner node disablement + // 27 csc_1_1- inner node disablement + // 29 b2i_ds_1_1- inner node disablement + // 30 lbff_crop_espa_1_4- inner node disablement + // 31 tnr7_spatial_1_1- inner node disablement + // 32 tnr_scaler_lb_1_1- inner node disablement + // 34 ifd_gmv_1_4- inner node disablement + // 35 gmv_statistics_1_1- inner node disablement + // 36 odr_gmv_feature_1_4- inner node disablement + // 37 odr_gmv_match_1_4- inner node disablement + // 38 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 39 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 40 tnr7_ims_1_2- inner node disablement + // 41 tnr7_bc_1_2- inner node disablement + // 42 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 43 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 44 tnr7_blend_1_1- inner node disablement + // 45 odr_tnr_fp_yuvn_1_4- inner node disablement + // 46 tnr_scaler_fp_1_1- inner node disablement + // 47 image_upscaler_1_1- inner node disablement + // 48 cas_1_1- inner node disablement + // 49 odr_ofs_mp_1_4- inner node disablement + // 50 b2i_ds_output_1_1- inner node disablement + // 51 odr_ofs_dp_1_4- inner node disablement + // 52 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFDEFFF0000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 ifd_pipe_long_1_4- inner node disablement + // 2 dol_lite_1_2- inner node disablement + // 3 bxt_blc- inner node disablement + // 4 linearization2_0- inner node disablement + // 5 dpc_2_2- inner node disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 8 rgb_ir_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 14 ifd_lsc_1_4- inner node disablement + // 15 lsc_1_2- inner node disablement + // 16 gd_2_2- inner node disablement + // 17 wb_1_1- inner node disablement + // 18 bnlm_3_4- inner node disablement + // 19 bxt_demosaic- inner node disablement + // 20 vcsc_2_0_b- inner node disablement + // 21 gltm_2_0- inner node disablement + // 22 xnr_5_4- inner node disablement + // 23 vcr_3_1- inner node disablement + // 24 glim_2_0- inner node disablement + // 25 acm_1_2- inner node disablement + // 26 gammatm_v4- inner node disablement + // 27 csc_1_1- inner node disablement + // 28 fr_grid_1_0- inner node disablement + // 29 b2i_ds_1_1- inner node disablement + // 30 lbff_crop_espa_1_4- inner node disablement + // 31 tnr7_spatial_1_1- inner node disablement + // 32 tnr_scaler_lb_1_1- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + // 34 ifd_gmv_1_4- inner node disablement + // 35 gmv_statistics_1_1- inner node disablement + // 36 odr_gmv_feature_1_4- inner node disablement + // 37 odr_gmv_match_1_4- inner node disablement + // 38 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 39 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 40 tnr7_ims_1_2- inner node disablement + // 41 tnr7_bc_1_2- inner node disablement + // 42 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 43 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 44 tnr7_blend_1_1- inner node disablement + // 45 odr_tnr_fp_yuvn_1_4- inner node disablement + // 46 tnr_scaler_fp_1_1- inner node disablement + // 47 image_upscaler_1_1- inner node disablement + // 48 cas_1_1- inner node disablement + // 49 odr_ofs_mp_1_4- inner node disablement + // 50 b2i_ds_output_1_1- inner node disablement + // 51 odr_ofs_dp_1_4- inner node disablement + // 52 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000067FCBD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E13E79FFF9CE8D9FF1FB + bitmaps.deb[0] = 0x8D9FF1FB; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FF61EBF + bitmaps.teb[0] = 0x3FF61EBF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffDol2InputsWithGmvWithTnrNoSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 53; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[8].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[17].run_kernel.enable = 0; // wb_1_1 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x1FFFFDEFFF0000; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0xF800000000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffDolSmoothOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 8; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // RBM - 0x0000000000000000000000025001A011 + bitmaps.rbm[0] = 0x5001A011; + bitmaps.rbm[1] = 0x2; + // DEB - 0x0000000000000000000000018C000131 + bitmaps.deb[0] = 0x8C000131; + bitmaps.deb[1] = 0x1; + // TEB - 0x0000000000010017 + bitmaps.teb[0] = 0x10017; + // REB - 0x00000000000000000000000000160787 + bitmaps.reb[0] = 0x160787; + // No inner nodes + (void)nodeInnerOptions; +} + +void LbffDolSmoothOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 8; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0xF0; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffDol3InputsNoGmvNoTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 38; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[9].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[18].run_kernel.enable = 0; // wb_1_1 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000064009D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1200000F9CE8D8001FF + bitmaps.deb[0] = 0x8D8001FF; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x00000000300000FF + bitmaps.teb[0] = 0x300000FF; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 29 fr_grid_1_0- inner node disablement + // 37 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x2020007D80; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000044009D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1200000F9CE8D9FF1FF + bitmaps.deb[0] = 0x8D9FF1FF; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x0000000020041EFF + bitmaps.teb[0] = 0x20041EFF; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 34 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x400000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000044009D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1200000F9CE8D8001FF + bitmaps.deb[0] = 0x8D8001FF; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x00000000200000FF + bitmaps.teb[0] = 0x200000FF; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 29 fr_grid_1_0- inner node disablement + // 34 odr_ofs_mp_1_4- inner node disablement + // 37 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x2420007D80; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000024009D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021200000F9CE8D9FF1FF + bitmaps.deb[0] = 0x8D9FF1FF; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x0000000010041EFF + bitmaps.teb[0] = 0x10041EFF; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 35 b2i_ds_output_1_1- inner node disablement + // 36 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1800000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000024009D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021200000F9CE8D8001FF + bitmaps.deb[0] = 0x8D8001FF; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x00000000100000FF + bitmaps.teb[0] = 0x100000FF; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 29 fr_grid_1_0- inner node disablement + // 35 b2i_ds_output_1_1- inner node disablement + // 36 odr_ofs_dp_1_4- inner node disablement + // 37 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3820007D80; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000008002526E16 + bitmaps.rbm[0] = 0x2526E16; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019FF1FF + bitmaps.deb[0] = 0x19FF1FF; + // TEB - 0x0000000000041EFF + bitmaps.teb[0] = 0x41EFF; + // REB - 0x00000000000000000000000002007FF7 + bitmaps.reb[0] = 0x2007FF7; + + // Kernels disablement + // 17 gd_2_2- inner node disablement + // 18 wb_1_1- inner node disablement + // 19 bnlm_3_4- inner node disablement + // 20 bxt_demosaic- inner node disablement + // 21 vcsc_2_0_b- inner node disablement + // 22 gltm_2_0- inner node disablement + // 23 xnr_5_4- inner node disablement + // 24 vcr_3_1- inner node disablement + // 25 glim_2_0- inner node disablement + // 26 acm_1_2- inner node disablement + // 27 gammatm_v4- inner node disablement + // 28 csc_1_1- inner node disablement + // 30 b2i_ds_1_1- inner node disablement + // 31 lbff_crop_espa_1_4- inner node disablement + // 32 image_upscaler_1_1- inner node disablement + // 33 cas_1_1- inner node disablement + // 34 odr_ofs_mp_1_4- inner node disablement + // 35 b2i_ds_output_1_1- inner node disablement + // 36 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FDFFE0000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 ifd_pipe_long_1_4- inner node disablement + // 2 ifd_pipe_short_smth_1_4- inner node disablement + // 3 dol_lite_1_2- inner node disablement + // 4 bxt_blc- inner node disablement + // 5 linearization2_0- inner node disablement + // 6 dpc_2_2- inner node disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 9 rgb_ir_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 ifd_lsc_1_4- inner node disablement + // 16 lsc_1_2- inner node disablement + // 17 gd_2_2- inner node disablement + // 18 wb_1_1- inner node disablement + // 19 bnlm_3_4- inner node disablement + // 20 bxt_demosaic- inner node disablement + // 21 vcsc_2_0_b- inner node disablement + // 22 gltm_2_0- inner node disablement + // 23 xnr_5_4- inner node disablement + // 24 vcr_3_1- inner node disablement + // 25 glim_2_0- inner node disablement + // 26 acm_1_2- inner node disablement + // 27 gammatm_v4- inner node disablement + // 28 csc_1_1- inner node disablement + // 29 fr_grid_1_0- inner node disablement + // 30 b2i_ds_1_1- inner node disablement + // 31 lbff_crop_espa_1_4- inner node disablement + // 32 image_upscaler_1_1- inner node disablement + // 33 cas_1_1- inner node disablement + // 34 odr_ofs_mp_1_4- inner node disablement + // 35 b2i_ds_output_1_1- inner node disablement + // 36 odr_ofs_dp_1_4- inner node disablement + // 37 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000064009D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1200000F9CE8D9FF1FF + bitmaps.deb[0] = 0x8D9FF1FF; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x0000000030041EFF + bitmaps.teb[0] = 0x30041EFF; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffDol3InputsNoGmvNoTnrNoSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 38; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[9].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[18].run_kernel.enable = 0; // wb_1_1 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x1FDFFE0000; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x1F00000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffDol3InputsWithGmvNoTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 42; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[9].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[18].run_kernel.enable = 0; // wb_1_1 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x0000000000000000006400BD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E120000FF9CE8D8001FF + bitmaps.deb[0] = 0x8D8001FF; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x00000000303200FF + bitmaps.teb[0] = 0x303200FF; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 29 fr_grid_1_0- inner node disablement + // 37 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x2020007D80; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x0000000000000000004400BD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C120000FF9CE8D9FF1FF + bitmaps.deb[0] = 0x8D9FF1FF; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x0000000020361EFF + bitmaps.teb[0] = 0x20361EFF; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 34 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x400000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x0000000000000000004400BD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C120000FF9CE8D8001FF + bitmaps.deb[0] = 0x8D8001FF; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x00000000203200FF + bitmaps.teb[0] = 0x203200FF; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 29 fr_grid_1_0- inner node disablement + // 34 odr_ofs_mp_1_4- inner node disablement + // 37 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x2420007D80; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x0000000000000000002400BD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x0000000000002120000FF9CE8D9FF1FF + bitmaps.deb[0] = 0x8D9FF1FF; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x0000000010361EFF + bitmaps.teb[0] = 0x10361EFF; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 35 b2i_ds_output_1_1- inner node disablement + // 36 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1800000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x0000000000000000002400BD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x0000000000002120000FF9CE8D8001FF + bitmaps.deb[0] = 0x8D8001FF; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x00000000103200FF + bitmaps.teb[0] = 0x103200FF; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 29 fr_grid_1_0- inner node disablement + // 35 b2i_ds_output_1_1- inner node disablement + // 36 odr_ofs_dp_1_4- inner node disablement + // 37 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3820007D80; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000008002526E16 + bitmaps.rbm[0] = 0x2526E16; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019FF1FF + bitmaps.deb[0] = 0x19FF1FF; + // TEB - 0x0000000000041EFF + bitmaps.teb[0] = 0x41EFF; + // REB - 0x00000000000000000000000002007FF7 + bitmaps.reb[0] = 0x2007FF7; + + // Kernels disablement + // 17 gd_2_2- inner node disablement + // 18 wb_1_1- inner node disablement + // 19 bnlm_3_4- inner node disablement + // 20 bxt_demosaic- inner node disablement + // 21 vcsc_2_0_b- inner node disablement + // 22 gltm_2_0- inner node disablement + // 23 xnr_5_4- inner node disablement + // 24 vcr_3_1- inner node disablement + // 25 glim_2_0- inner node disablement + // 26 acm_1_2- inner node disablement + // 27 gammatm_v4- inner node disablement + // 28 csc_1_1- inner node disablement + // 30 b2i_ds_1_1- inner node disablement + // 31 lbff_crop_espa_1_4- inner node disablement + // 32 image_upscaler_1_1- inner node disablement + // 33 cas_1_1- inner node disablement + // 34 odr_ofs_mp_1_4- inner node disablement + // 35 b2i_ds_output_1_1- inner node disablement + // 36 odr_ofs_dp_1_4- inner node disablement + // 38 ifd_gmv_1_4- inner node disablement + // 39 gmv_statistics_1_1- inner node disablement + // 40 odr_gmv_feature_1_4- inner node disablement + // 41 odr_gmv_match_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3DFDFFE0000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 ifd_pipe_long_1_4- inner node disablement + // 2 ifd_pipe_short_smth_1_4- inner node disablement + // 3 dol_lite_1_2- inner node disablement + // 4 bxt_blc- inner node disablement + // 5 linearization2_0- inner node disablement + // 6 dpc_2_2- inner node disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 9 rgb_ir_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 ifd_lsc_1_4- inner node disablement + // 16 lsc_1_2- inner node disablement + // 17 gd_2_2- inner node disablement + // 18 wb_1_1- inner node disablement + // 19 bnlm_3_4- inner node disablement + // 20 bxt_demosaic- inner node disablement + // 21 vcsc_2_0_b- inner node disablement + // 22 gltm_2_0- inner node disablement + // 23 xnr_5_4- inner node disablement + // 24 vcr_3_1- inner node disablement + // 25 glim_2_0- inner node disablement + // 26 acm_1_2- inner node disablement + // 27 gammatm_v4- inner node disablement + // 28 csc_1_1- inner node disablement + // 29 fr_grid_1_0- inner node disablement + // 30 b2i_ds_1_1- inner node disablement + // 31 lbff_crop_espa_1_4- inner node disablement + // 32 image_upscaler_1_1- inner node disablement + // 33 cas_1_1- inner node disablement + // 34 odr_ofs_mp_1_4- inner node disablement + // 35 b2i_ds_output_1_1- inner node disablement + // 36 odr_ofs_dp_1_4- inner node disablement + // 37 odr_af_std_1_4- inner node disablement + // 38 ifd_gmv_1_4- inner node disablement + // 39 gmv_statistics_1_1- inner node disablement + // 40 odr_gmv_feature_1_4- inner node disablement + // 41 odr_gmv_match_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x0000000000000000006400BD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E120000FF9CE8D9FF1FF + bitmaps.deb[0] = 0x8D9FF1FF; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x0000000030361EFF + bitmaps.teb[0] = 0x30361EFF; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffDol3InputsWithGmvNoTnrNoSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 42; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[9].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[18].run_kernel.enable = 0; // wb_1_1 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x3DFDFFE0000; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x1F00000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffDol3InputsNoGmvWithTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 50; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[9].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[18].run_kernel.enable = 0; // wb_1_1 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FC9D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E13E79F0F9CE8D8001FF + bitmaps.deb[0] = 0x8D8001FF; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC000FF + bitmaps.teb[0] = 0x3FC000FF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 29 fr_grid_1_0- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x420007D80; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C13E79F0F9CE8D9FF1FF + bitmaps.deb[0] = 0x8D9FF1FF; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC41EFF + bitmaps.teb[0] = 0x2FC41EFF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 46 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x400000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C13E79F0F9CE8D8001FF + bitmaps.deb[0] = 0x8D8001FF; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC000FF + bitmaps.teb[0] = 0x2FC000FF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 29 fr_grid_1_0- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 46 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x400420007D80; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x000000000000213E79F0F9CE8D9FF1FF + bitmaps.deb[0] = 0x8D9FF1FF; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC41EFF + bitmaps.teb[0] = 0x1FC41EFF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1800000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x000000000000213E79F0F9CE8D8001FF + bitmaps.deb[0] = 0x8D8001FF; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC000FF + bitmaps.teb[0] = 0x1FC000FF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 29 fr_grid_1_0- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1800420007D80; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000008002526E16 + bitmaps.rbm[0] = 0x2526E16; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019FF1FF + bitmaps.deb[0] = 0x19FF1FF; + // TEB - 0x0000000000041EFF + bitmaps.teb[0] = 0x41EFF; + // REB - 0x00000000000000000000000002007FF7 + bitmaps.reb[0] = 0x2007FF7; + + // Kernels disablement + // 17 gd_2_2- inner node disablement + // 18 wb_1_1- inner node disablement + // 19 bnlm_3_4- inner node disablement + // 20 bxt_demosaic- inner node disablement + // 21 vcsc_2_0_b- inner node disablement + // 22 gltm_2_0- inner node disablement + // 23 xnr_5_4- inner node disablement + // 24 vcr_3_1- inner node disablement + // 25 glim_2_0- inner node disablement + // 26 acm_1_2- inner node disablement + // 27 gammatm_v4- inner node disablement + // 28 csc_1_1- inner node disablement + // 30 b2i_ds_1_1- inner node disablement + // 31 lbff_crop_espa_1_4- inner node disablement + // 32 tnr7_spatial_1_1- inner node disablement + // 33 tnr_scaler_lb_1_1- inner node disablement + // 35 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 36 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 37 tnr7_ims_1_2- inner node disablement + // 38 tnr7_bc_1_2- inner node disablement + // 39 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 40 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 41 tnr7_blend_1_1- inner node disablement + // 42 odr_tnr_fp_yuvn_1_4- inner node disablement + // 43 tnr_scaler_fp_1_1- inner node disablement + // 44 image_upscaler_1_1- inner node disablement + // 45 cas_1_1- inner node disablement + // 46 odr_ofs_mp_1_4- inner node disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + // 49 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFBDFFE0000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 ifd_pipe_long_1_4- inner node disablement + // 2 ifd_pipe_short_smth_1_4- inner node disablement + // 3 dol_lite_1_2- inner node disablement + // 4 bxt_blc- inner node disablement + // 5 linearization2_0- inner node disablement + // 6 dpc_2_2- inner node disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 9 rgb_ir_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 ifd_lsc_1_4- inner node disablement + // 16 lsc_1_2- inner node disablement + // 17 gd_2_2- inner node disablement + // 18 wb_1_1- inner node disablement + // 19 bnlm_3_4- inner node disablement + // 20 bxt_demosaic- inner node disablement + // 21 vcsc_2_0_b- inner node disablement + // 22 gltm_2_0- inner node disablement + // 23 xnr_5_4- inner node disablement + // 24 vcr_3_1- inner node disablement + // 25 glim_2_0- inner node disablement + // 26 acm_1_2- inner node disablement + // 27 gammatm_v4- inner node disablement + // 28 csc_1_1- inner node disablement + // 29 fr_grid_1_0- inner node disablement + // 30 b2i_ds_1_1- inner node disablement + // 31 lbff_crop_espa_1_4- inner node disablement + // 32 tnr7_spatial_1_1- inner node disablement + // 33 tnr_scaler_lb_1_1- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 35 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 36 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 37 tnr7_ims_1_2- inner node disablement + // 38 tnr7_bc_1_2- inner node disablement + // 39 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 40 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 41 tnr7_blend_1_1- inner node disablement + // 42 odr_tnr_fp_yuvn_1_4- inner node disablement + // 43 tnr_scaler_fp_1_1- inner node disablement + // 44 image_upscaler_1_1- inner node disablement + // 45 cas_1_1- inner node disablement + // 46 odr_ofs_mp_1_4- inner node disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + // 49 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000067FC9D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E13E79F0F9CE8D9FF1FF + bitmaps.deb[0] = 0x8D9FF1FF; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC41EFF + bitmaps.teb[0] = 0x3FC41EFF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffDol3InputsNoGmvWithTnrNoSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 50; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[9].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[18].run_kernel.enable = 0; // wb_1_1 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x3FFFBDFFE0000; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x1F00000000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffDol3InputsWithGmvWithTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 54; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[9].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[18].run_kernel.enable = 0; // wb_1_1 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FCBD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E13E79FFF9CE8D8001FF + bitmaps.deb[0] = 0x8D8001FF; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FF200FF + bitmaps.teb[0] = 0x3FF200FF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 29 fr_grid_1_0- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x420007D80; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C13E79FFF9CE8D9FF1FF + bitmaps.deb[0] = 0x8D9FF1FF; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FF61EFF + bitmaps.teb[0] = 0x2FF61EFF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 50 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x4000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C13E79FFF9CE8D8001FF + bitmaps.deb[0] = 0x8D8001FF; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FF200FF + bitmaps.teb[0] = 0x2FF200FF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 29 fr_grid_1_0- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 50 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x4000420007D80; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x000000000000213E79FFF9CE8D9FF1FF + bitmaps.deb[0] = 0x8D9FF1FF; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FF61EFF + bitmaps.teb[0] = 0x1FF61EFF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 51 b2i_ds_output_1_1- inner node disablement + // 52 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x18000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x000000000000213E79FFF9CE8D8001FF + bitmaps.deb[0] = 0x8D8001FF; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FF200FF + bitmaps.teb[0] = 0x1FF200FF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 29 fr_grid_1_0- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 51 b2i_ds_output_1_1- inner node disablement + // 52 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x18000420007D80; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000008002526E16 + bitmaps.rbm[0] = 0x2526E16; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019FF1FF + bitmaps.deb[0] = 0x19FF1FF; + // TEB - 0x0000000000041EFF + bitmaps.teb[0] = 0x41EFF; + // REB - 0x00000000000000000000000002007FF7 + bitmaps.reb[0] = 0x2007FF7; + + // Kernels disablement + // 17 gd_2_2- inner node disablement + // 18 wb_1_1- inner node disablement + // 19 bnlm_3_4- inner node disablement + // 20 bxt_demosaic- inner node disablement + // 21 vcsc_2_0_b- inner node disablement + // 22 gltm_2_0- inner node disablement + // 23 xnr_5_4- inner node disablement + // 24 vcr_3_1- inner node disablement + // 25 glim_2_0- inner node disablement + // 26 acm_1_2- inner node disablement + // 27 gammatm_v4- inner node disablement + // 28 csc_1_1- inner node disablement + // 30 b2i_ds_1_1- inner node disablement + // 31 lbff_crop_espa_1_4- inner node disablement + // 32 tnr7_spatial_1_1- inner node disablement + // 33 tnr_scaler_lb_1_1- inner node disablement + // 35 ifd_gmv_1_4- inner node disablement + // 36 gmv_statistics_1_1- inner node disablement + // 37 odr_gmv_feature_1_4- inner node disablement + // 38 odr_gmv_match_1_4- inner node disablement + // 39 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 40 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 41 tnr7_ims_1_2- inner node disablement + // 42 tnr7_bc_1_2- inner node disablement + // 43 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 44 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 45 tnr7_blend_1_1- inner node disablement + // 46 odr_tnr_fp_yuvn_1_4- inner node disablement + // 47 tnr_scaler_fp_1_1- inner node disablement + // 48 image_upscaler_1_1- inner node disablement + // 49 cas_1_1- inner node disablement + // 50 odr_ofs_mp_1_4- inner node disablement + // 51 b2i_ds_output_1_1- inner node disablement + // 52 odr_ofs_dp_1_4- inner node disablement + // 53 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFBDFFE0000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 ifd_pipe_long_1_4- inner node disablement + // 2 ifd_pipe_short_smth_1_4- inner node disablement + // 3 dol_lite_1_2- inner node disablement + // 4 bxt_blc- inner node disablement + // 5 linearization2_0- inner node disablement + // 6 dpc_2_2- inner node disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 9 rgb_ir_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 ifd_lsc_1_4- inner node disablement + // 16 lsc_1_2- inner node disablement + // 17 gd_2_2- inner node disablement + // 18 wb_1_1- inner node disablement + // 19 bnlm_3_4- inner node disablement + // 20 bxt_demosaic- inner node disablement + // 21 vcsc_2_0_b- inner node disablement + // 22 gltm_2_0- inner node disablement + // 23 xnr_5_4- inner node disablement + // 24 vcr_3_1- inner node disablement + // 25 glim_2_0- inner node disablement + // 26 acm_1_2- inner node disablement + // 27 gammatm_v4- inner node disablement + // 28 csc_1_1- inner node disablement + // 29 fr_grid_1_0- inner node disablement + // 30 b2i_ds_1_1- inner node disablement + // 31 lbff_crop_espa_1_4- inner node disablement + // 32 tnr7_spatial_1_1- inner node disablement + // 33 tnr_scaler_lb_1_1- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 35 ifd_gmv_1_4- inner node disablement + // 36 gmv_statistics_1_1- inner node disablement + // 37 odr_gmv_feature_1_4- inner node disablement + // 38 odr_gmv_match_1_4- inner node disablement + // 39 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 40 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 41 tnr7_ims_1_2- inner node disablement + // 42 tnr7_bc_1_2- inner node disablement + // 43 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 44 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 45 tnr7_blend_1_1- inner node disablement + // 46 odr_tnr_fp_yuvn_1_4- inner node disablement + // 47 tnr_scaler_fp_1_1- inner node disablement + // 48 image_upscaler_1_1- inner node disablement + // 49 cas_1_1- inner node disablement + // 50 odr_ofs_mp_1_4- inner node disablement + // 51 b2i_ds_output_1_1- inner node disablement + // 52 odr_ofs_dp_1_4- inner node disablement + // 53 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000067FCBD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E13E79FFF9CE8D9FF1FF + bitmaps.deb[0] = 0x8D9FF1FF; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FF61EFF + bitmaps.teb[0] = 0x3FF61EFF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffDol3InputsWithGmvWithTnrNoSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 54; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[9].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[18].run_kernel.enable = 0; // wb_1_1 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x3FFFFBDFFE0000; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x1F000000000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffRgbIrNoGmvNoTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 36; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noIr | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x0000000000000000006400DD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x6400DD; + // DEB - 0x000000000000E1200000F9CE8F8001F1 + bitmaps.deb[0] = 0x8F8001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x000000003000409F + bitmaps.teb[0] = 0x3000409F; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 33 aestatistics_2_1- inner node disablement + // 34 odr_ae_1_4- inner node disablement + // 35 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xE03000390; + } + else if (nodeRelevantInnerOptions == (noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000064009D503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1200000F9CE8D9FF1F1 + bitmaps.deb[0] = 0x8D9FF1F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x0000000030041E9F + bitmaps.teb[0] = 0x30041E9F; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x40; + } + else if (nodeRelevantInnerOptions == (no3A | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000064009D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1200000F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x000000003000009F + bitmaps.teb[0] = 0x3000009F; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 33 aestatistics_2_1- inner node disablement + // 34 odr_ae_1_4- inner node disablement + // 35 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xE030003D0; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x0000000000000000004400DD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x4400DD; + // DEB - 0x000000000000C1200000F9CE8F9FF1F1 + bitmaps.deb[0] = 0x8F9FF1F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x0000000020045E9F + bitmaps.teb[0] = 0x20045E9F; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 30 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x40000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x0000000000000000004400DD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x4400DD; + // DEB - 0x000000000000C1200000F9CE8F8001F1 + bitmaps.deb[0] = 0x8F8001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x000000002000409F + bitmaps.teb[0] = 0x2000409F; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 30 odr_ofs_mp_1_4- inner node disablement + // 33 aestatistics_2_1- inner node disablement + // 34 odr_ae_1_4- inner node disablement + // 35 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xE43000390; + } + else if (nodeRelevantInnerOptions == (noMp | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000044009D503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1200000F9CE8D9FF1F1 + bitmaps.deb[0] = 0x8D9FF1F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x0000000020041E9F + bitmaps.teb[0] = 0x20041E9F; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + // 30 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x40000040; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000044009D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1200000F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x000000002000009F + bitmaps.teb[0] = 0x2000009F; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 30 odr_ofs_mp_1_4- inner node disablement + // 33 aestatistics_2_1- inner node disablement + // 34 odr_ae_1_4- inner node disablement + // 35 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xE430003D0; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x0000000000000000002400DD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x2400DD; + // DEB - 0x00000000000021200000F9CE8F9FF1F1 + bitmaps.deb[0] = 0x8F9FF1F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x0000000010045E9F + bitmaps.teb[0] = 0x10045E9F; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 31 b2i_ds_output_1_1- inner node disablement + // 32 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x180000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x0000000000000000002400DD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x2400DD; + // DEB - 0x00000000000021200000F9CE8F8001F1 + bitmaps.deb[0] = 0x8F8001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x000000001000409F + bitmaps.teb[0] = 0x1000409F; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 31 b2i_ds_output_1_1- inner node disablement + // 32 odr_ofs_dp_1_4- inner node disablement + // 33 aestatistics_2_1- inner node disablement + // 34 odr_ae_1_4- inner node disablement + // 35 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xF83000390; + } + else if (nodeRelevantInnerOptions == (noDp | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000024009D503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021200000F9CE8D9FF1F1 + bitmaps.deb[0] = 0x8D9FF1F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x0000000010041E9F + bitmaps.teb[0] = 0x10041E9F; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + // 31 b2i_ds_output_1_1- inner node disablement + // 32 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x180000040; + } + else if (nodeRelevantInnerOptions == (no3A | noDp | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000024009D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021200000F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x000000001000009F + bitmaps.teb[0] = 0x1000009F; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 31 b2i_ds_output_1_1- inner node disablement + // 32 odr_ofs_dp_1_4- inner node disablement + // 33 aestatistics_2_1- inner node disablement + // 34 odr_ae_1_4- inner node disablement + // 35 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xF830003D0; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000004000206071 + bitmaps.rbm[0] = 0x206071; + bitmaps.rbm[1] = 0x40; + // DEB - 0x00000000000000000000000003871131 + bitmaps.deb[0] = 0x3871131; + // TEB - 0x0000000000045817 + bitmaps.teb[0] = 0x45817; + // REB - 0x0000000000000000000000000300118F + bitmaps.reb[0] = 0x300118F; + + // Kernels disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 bnlm_3_4- inner node disablement + // 15 bxt_demosaic- inner node disablement + // 16 vcsc_2_0_b- inner node disablement + // 17 gltm_2_0- inner node disablement + // 18 xnr_5_4- inner node disablement + // 19 vcr_3_1- inner node disablement + // 20 glim_2_0- inner node disablement + // 21 acm_1_2- inner node disablement + // 22 gammatm_v4- inner node disablement + // 23 csc_1_1- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 26 b2i_ds_1_1- inner node disablement + // 27 lbff_crop_espa_1_4- inner node disablement + // 28 image_upscaler_1_1- inner node disablement + // 29 cas_1_1- inner node disablement + // 30 odr_ofs_mp_1_4- inner node disablement + // 31 b2i_ds_output_1_1- inner node disablement + // 32 odr_ofs_dp_1_4- inner node disablement + // 33 aestatistics_2_1- inner node disablement + // 34 odr_ae_1_4- inner node disablement + // 35 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFC00; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000004000006011 + bitmaps.rbm[0] = 0x6011; + bitmaps.rbm[1] = 0x40; + // DEB - 0x00000000000000000000000003800131 + bitmaps.deb[0] = 0x3800131; + // TEB - 0x0000000000004017 + bitmaps.teb[0] = 0x4017; + // REB - 0x00000000000000000000000003000187 + bitmaps.reb[0] = 0x3000187; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 bnlm_3_4- inner node disablement + // 15 bxt_demosaic- inner node disablement + // 16 vcsc_2_0_b- inner node disablement + // 17 gltm_2_0- inner node disablement + // 18 xnr_5_4- inner node disablement + // 19 vcr_3_1- inner node disablement + // 20 glim_2_0- inner node disablement + // 21 acm_1_2- inner node disablement + // 22 gammatm_v4- inner node disablement + // 23 csc_1_1- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 26 b2i_ds_1_1- inner node disablement + // 27 lbff_crop_espa_1_4- inner node disablement + // 28 image_upscaler_1_1- inner node disablement + // 29 cas_1_1- inner node disablement + // 30 odr_ofs_mp_1_4- inner node disablement + // 31 b2i_ds_output_1_1- inner node disablement + // 32 odr_ofs_dp_1_4- inner node disablement + // 33 aestatistics_2_1- inner node disablement + // 34 odr_ae_1_4- inner node disablement + // 35 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFF90; + } + else if (nodeRelevantInnerOptions == (noMp | noDp | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000200061 + bitmaps.rbm[0] = 0x200061; + // DEB - 0x00000000000000000000000000071031 + bitmaps.deb[0] = 0x71031; + // TEB - 0x0000000000041817 + bitmaps.teb[0] = 0x41817; + // REB - 0x0000000000000000000000000000100F + bitmaps.reb[0] = 0x100F; + + // Kernels disablement + // 3 dpc_2_2- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 bnlm_3_4- inner node disablement + // 15 bxt_demosaic- inner node disablement + // 16 vcsc_2_0_b- inner node disablement + // 17 gltm_2_0- inner node disablement + // 18 xnr_5_4- inner node disablement + // 19 vcr_3_1- inner node disablement + // 20 glim_2_0- inner node disablement + // 21 acm_1_2- inner node disablement + // 22 gammatm_v4- inner node disablement + // 23 csc_1_1- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 26 b2i_ds_1_1- inner node disablement + // 27 lbff_crop_espa_1_4- inner node disablement + // 28 image_upscaler_1_1- inner node disablement + // 29 cas_1_1- inner node disablement + // 30 odr_ofs_mp_1_4- inner node disablement + // 31 b2i_ds_output_1_1- inner node disablement + // 32 odr_ofs_dp_1_4- inner node disablement + // 33 aestatistics_2_1- inner node disablement + // 34 odr_ae_1_4- inner node disablement + // 35 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFC68; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgbs_grid_1_1- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 bnlm_3_4- inner node disablement + // 15 bxt_demosaic- inner node disablement + // 16 vcsc_2_0_b- inner node disablement + // 17 gltm_2_0- inner node disablement + // 18 xnr_5_4- inner node disablement + // 19 vcr_3_1- inner node disablement + // 20 glim_2_0- inner node disablement + // 21 acm_1_2- inner node disablement + // 22 gammatm_v4- inner node disablement + // 23 csc_1_1- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 26 b2i_ds_1_1- inner node disablement + // 27 lbff_crop_espa_1_4- inner node disablement + // 28 image_upscaler_1_1- inner node disablement + // 29 cas_1_1- inner node disablement + // 30 odr_ofs_mp_1_4- inner node disablement + // 31 b2i_ds_output_1_1- inner node disablement + // 32 odr_ofs_dp_1_4- inner node disablement + // 33 aestatistics_2_1- inner node disablement + // 34 odr_ae_1_4- inner node disablement + // 35 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x0000000000000000006400DD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x6400DD; + // DEB - 0x000000000000E1200000F9CE8F9FF1F1 + bitmaps.deb[0] = 0x8F9FF1F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x0000000030045E9F + bitmaps.teb[0] = 0x30045E9F; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffRgbIrNoGmvNoTnrNoSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 36; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x1FCFFF000; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x1F0000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffRgbIrIrNoGmvNoTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 32; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[1].run_kernel.enable = 0; // bxt_blc + nodeKernels.kernelList[2].run_kernel.enable = 0; // linearization2_0 + nodeKernels.kernelList[6].run_kernel.enable = 0; // wb_1_1 + nodeKernels.kernelList[8].run_kernel.enable = 0; // bxt_demosaic + nodeKernels.kernelList[14].run_kernel.enable = 0; // acm_1_2 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000064001D50010009 + bitmaps.rbm[0] = 0x50010009; + bitmaps.rbm[1] = 0x64001D; + // DEB - 0x000000000000E1200000F9CE8C0000F1 + bitmaps.deb[0] = 0x8C0000F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x000000003000009F + bitmaps.teb[0] = 0x3000009F; + // REB - 0x00000000000000000000001F10F60667 + bitmaps.reb[0] = 0x10F60667; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 17 rgbs_grid_1_1- inner node disablement + // 18 ccm_3a_2_0- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 27 odr_awb_std_1_4- inner node disablement + // 28 odr_awb_sat_1_4- inner node disablement + // 29 aestatistics_2_1- inner node disablement + // 30 odr_ae_1_4- inner node disablement + // 31 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xF80E0000; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000044001D501F0009 + bitmaps.rbm[0] = 0x501F0009; + bitmaps.rbm[1] = 0x44001D; + // DEB - 0x000000000000C1200000F9CE8C1BF0F1 + bitmaps.deb[0] = 0x8C1BF0F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x0000000020001E9F + bitmaps.teb[0] = 0x20001E9F; + // REB - 0x00000000000000000000001F10F67E67 + bitmaps.reb[0] = 0x10F67E67; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 24 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000044001D50010009 + bitmaps.rbm[0] = 0x50010009; + bitmaps.rbm[1] = 0x44001D; + // DEB - 0x000000000000C1200000F9CE8C0000F1 + bitmaps.deb[0] = 0x8C0000F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x000000002000009F + bitmaps.teb[0] = 0x2000009F; + // REB - 0x00000000000000000000001F10F60667 + bitmaps.reb[0] = 0x10F60667; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 17 rgbs_grid_1_1- inner node disablement + // 18 ccm_3a_2_0- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 24 odr_ofs_mp_1_4- inner node disablement + // 27 odr_awb_std_1_4- inner node disablement + // 28 odr_awb_sat_1_4- inner node disablement + // 29 aestatistics_2_1- inner node disablement + // 30 odr_ae_1_4- inner node disablement + // 31 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xF90E0000; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000024001D501F0009 + bitmaps.rbm[0] = 0x501F0009; + bitmaps.rbm[1] = 0x24001D; + // DEB - 0x00000000000021200000F9CE8C1BF0F1 + bitmaps.deb[0] = 0x8C1BF0F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x0000000010001E9F + bitmaps.teb[0] = 0x10001E9F; + // REB - 0x00000000000000000000001F10F67E67 + bitmaps.reb[0] = 0x10F67E67; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 25 b2i_ds_output_1_1- inner node disablement + // 26 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x6000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000024001D50010009 + bitmaps.rbm[0] = 0x50010009; + bitmaps.rbm[1] = 0x24001D; + // DEB - 0x00000000000021200000F9CE8C0000F1 + bitmaps.deb[0] = 0x8C0000F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x000000001000009F + bitmaps.teb[0] = 0x1000009F; + // REB - 0x00000000000000000000001F10F60667 + bitmaps.reb[0] = 0x10F60667; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 17 rgbs_grid_1_1- inner node disablement + // 18 ccm_3a_2_0- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 25 b2i_ds_output_1_1- inner node disablement + // 26 odr_ofs_dp_1_4- inner node disablement + // 27 odr_awb_std_1_4- inner node disablement + // 28 odr_awb_sat_1_4- inner node disablement + // 29 aestatistics_2_1- inner node disablement + // 30 odr_ae_1_4- inner node disablement + // 31 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFE0E0000; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000000001E0009 + bitmaps.rbm[0] = 0x1E0009; + // DEB - 0x000000000000000000000000001BF0F1 + bitmaps.deb[0] = 0x1BF0F1; + // TEB - 0x0000000000001E97 + bitmaps.teb[0] = 0x1E97; + // REB - 0x00000000000000000000000000007E67 + bitmaps.reb[0] = 0x7E67; + + // Kernels disablement + // 5 gd_2_2- inner node disablement + // 6 wb_1_1- inner node disablement + // 7 bnlm_3_4- inner node disablement + // 8 bxt_demosaic- inner node disablement + // 9 vcsc_2_0_b- inner node disablement + // 10 gltm_2_0- inner node disablement + // 11 xnr_5_4- inner node disablement + // 12 vcr_3_1- inner node disablement + // 13 glim_2_0- inner node disablement + // 14 acm_1_2- inner node disablement + // 15 gammatm_v4- inner node disablement + // 16 csc_1_1- inner node disablement + // 20 b2i_ds_1_1- inner node disablement + // 21 lbff_crop_espa_1_4- inner node disablement + // 22 image_upscaler_1_1- inner node disablement + // 23 cas_1_1- inner node disablement + // 24 odr_ofs_mp_1_4- inner node disablement + // 25 b2i_ds_output_1_1- inner node disablement + // 26 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7F1FFE0; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 ifd_lsc_1_4- inner node disablement + // 4 lsc_1_2- inner node disablement + // 5 gd_2_2- inner node disablement + // 6 wb_1_1- inner node disablement + // 7 bnlm_3_4- inner node disablement + // 8 bxt_demosaic- inner node disablement + // 9 vcsc_2_0_b- inner node disablement + // 10 gltm_2_0- inner node disablement + // 11 xnr_5_4- inner node disablement + // 12 vcr_3_1- inner node disablement + // 13 glim_2_0- inner node disablement + // 14 acm_1_2- inner node disablement + // 15 gammatm_v4- inner node disablement + // 16 csc_1_1- inner node disablement + // 17 rgbs_grid_1_1- inner node disablement + // 18 ccm_3a_2_0- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 20 b2i_ds_1_1- inner node disablement + // 21 lbff_crop_espa_1_4- inner node disablement + // 22 image_upscaler_1_1- inner node disablement + // 23 cas_1_1- inner node disablement + // 24 odr_ofs_mp_1_4- inner node disablement + // 25 b2i_ds_output_1_1- inner node disablement + // 26 odr_ofs_dp_1_4- inner node disablement + // 27 odr_awb_std_1_4- inner node disablement + // 28 odr_awb_sat_1_4- inner node disablement + // 29 aestatistics_2_1- inner node disablement + // 30 odr_ae_1_4- inner node disablement + // 31 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000064001D501F0009 + bitmaps.rbm[0] = 0x501F0009; + bitmaps.rbm[1] = 0x64001D; + // DEB - 0x000000000000E1200000F9CE8C1BF0F1 + bitmaps.deb[0] = 0x8C1BF0F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x0000000030001E9F + bitmaps.teb[0] = 0x30001E9F; + // REB - 0x00000000000000000000001F10F67E67 + bitmaps.reb[0] = 0x10F67E67; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffRgbIrIrNoGmvNoTnrNoSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 32; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[1].run_kernel.enable = 0; // bxt_blc + nodeKernels.kernelList[2].run_kernel.enable = 0; // linearization2_0 + nodeKernels.kernelList[6].run_kernel.enable = 0; // wb_1_1 + nodeKernels.kernelList[8].run_kernel.enable = 0; // bxt_demosaic + nodeKernels.kernelList[14].run_kernel.enable = 0; // acm_1_2 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x7F1FFE0; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x7C00000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffRgbIrWithGmvNoTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 40; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noIr | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x0000000000000000006400FD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x6400FD; + // DEB - 0x000000000000E120000FF9CE8F8001F1 + bitmaps.deb[0] = 0x8F8001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x000000003032409F + bitmaps.teb[0] = 0x3032409F; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 33 aestatistics_2_1- inner node disablement + // 34 odr_ae_1_4- inner node disablement + // 35 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xE03000390; + } + else if (nodeRelevantInnerOptions == (noIr)) + { + // HW bitmaps + // RBM - 0x0000000000000000006400BD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E120000FF9CE8D9FF1F1 + bitmaps.deb[0] = 0x8D9FF1F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x0000000030361E9F + bitmaps.teb[0] = 0x30361E9F; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x40; + } + else if (nodeRelevantInnerOptions == (no3A | noIr)) + { + // HW bitmaps + // RBM - 0x0000000000000000006400BD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E120000FF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x000000003032009F + bitmaps.teb[0] = 0x3032009F; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 33 aestatistics_2_1- inner node disablement + // 34 odr_ae_1_4- inner node disablement + // 35 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xE030003D0; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x0000000000000000004400FD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x4400FD; + // DEB - 0x000000000000C120000FF9CE8F9FF1F1 + bitmaps.deb[0] = 0x8F9FF1F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x0000000020365E9F + bitmaps.teb[0] = 0x20365E9F; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 30 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x40000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x0000000000000000004400FD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x4400FD; + // DEB - 0x000000000000C120000FF9CE8F8001F1 + bitmaps.deb[0] = 0x8F8001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x000000002032409F + bitmaps.teb[0] = 0x2032409F; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 30 odr_ofs_mp_1_4- inner node disablement + // 33 aestatistics_2_1- inner node disablement + // 34 odr_ae_1_4- inner node disablement + // 35 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xE43000390; + } + else if (nodeRelevantInnerOptions == (noMp | noIr)) + { + // HW bitmaps + // RBM - 0x0000000000000000004400BD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C120000FF9CE8D9FF1F1 + bitmaps.deb[0] = 0x8D9FF1F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x0000000020361E9F + bitmaps.teb[0] = 0x20361E9F; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + // 30 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x40000040; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noIr)) + { + // HW bitmaps + // RBM - 0x0000000000000000004400BD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C120000FF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x000000002032009F + bitmaps.teb[0] = 0x2032009F; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 30 odr_ofs_mp_1_4- inner node disablement + // 33 aestatistics_2_1- inner node disablement + // 34 odr_ae_1_4- inner node disablement + // 35 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xE430003D0; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x0000000000000000002400FD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x2400FD; + // DEB - 0x0000000000002120000FF9CE8F9FF1F1 + bitmaps.deb[0] = 0x8F9FF1F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x0000000010365E9F + bitmaps.teb[0] = 0x10365E9F; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 31 b2i_ds_output_1_1- inner node disablement + // 32 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x180000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x0000000000000000002400FD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x2400FD; + // DEB - 0x0000000000002120000FF9CE8F8001F1 + bitmaps.deb[0] = 0x8F8001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x000000001032409F + bitmaps.teb[0] = 0x1032409F; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 31 b2i_ds_output_1_1- inner node disablement + // 32 odr_ofs_dp_1_4- inner node disablement + // 33 aestatistics_2_1- inner node disablement + // 34 odr_ae_1_4- inner node disablement + // 35 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xF83000390; + } + else if (nodeRelevantInnerOptions == (noDp | noIr)) + { + // HW bitmaps + // RBM - 0x0000000000000000002400BD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x0000000000002120000FF9CE8D9FF1F1 + bitmaps.deb[0] = 0x8D9FF1F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x0000000010361E9F + bitmaps.teb[0] = 0x10361E9F; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + // 31 b2i_ds_output_1_1- inner node disablement + // 32 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x180000040; + } + else if (nodeRelevantInnerOptions == (no3A | noDp | noIr)) + { + // HW bitmaps + // RBM - 0x0000000000000000002400BD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x0000000000002120000FF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x000000001032009F + bitmaps.teb[0] = 0x1032009F; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 31 b2i_ds_output_1_1- inner node disablement + // 32 odr_ofs_dp_1_4- inner node disablement + // 33 aestatistics_2_1- inner node disablement + // 34 odr_ae_1_4- inner node disablement + // 35 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xF830003D0; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000004000206071 + bitmaps.rbm[0] = 0x206071; + bitmaps.rbm[1] = 0x40; + // DEB - 0x00000000000000000000000003871131 + bitmaps.deb[0] = 0x3871131; + // TEB - 0x0000000000045817 + bitmaps.teb[0] = 0x45817; + // REB - 0x0000000000000000000000000300118F + bitmaps.reb[0] = 0x300118F; + + // Kernels disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 bnlm_3_4- inner node disablement + // 15 bxt_demosaic- inner node disablement + // 16 vcsc_2_0_b- inner node disablement + // 17 gltm_2_0- inner node disablement + // 18 xnr_5_4- inner node disablement + // 19 vcr_3_1- inner node disablement + // 20 glim_2_0- inner node disablement + // 21 acm_1_2- inner node disablement + // 22 gammatm_v4- inner node disablement + // 23 csc_1_1- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 26 b2i_ds_1_1- inner node disablement + // 27 lbff_crop_espa_1_4- inner node disablement + // 28 image_upscaler_1_1- inner node disablement + // 29 cas_1_1- inner node disablement + // 30 odr_ofs_mp_1_4- inner node disablement + // 31 b2i_ds_output_1_1- inner node disablement + // 32 odr_ofs_dp_1_4- inner node disablement + // 33 aestatistics_2_1- inner node disablement + // 34 odr_ae_1_4- inner node disablement + // 35 odr_af_std_1_4- inner node disablement + // 36 ifd_gmv_1_4- inner node disablement + // 37 gmv_statistics_1_1- inner node disablement + // 38 odr_gmv_feature_1_4- inner node disablement + // 39 odr_gmv_match_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFC00; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000004000006011 + bitmaps.rbm[0] = 0x6011; + bitmaps.rbm[1] = 0x40; + // DEB - 0x00000000000000000000000003800131 + bitmaps.deb[0] = 0x3800131; + // TEB - 0x0000000000004017 + bitmaps.teb[0] = 0x4017; + // REB - 0x00000000000000000000000003000187 + bitmaps.reb[0] = 0x3000187; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 bnlm_3_4- inner node disablement + // 15 bxt_demosaic- inner node disablement + // 16 vcsc_2_0_b- inner node disablement + // 17 gltm_2_0- inner node disablement + // 18 xnr_5_4- inner node disablement + // 19 vcr_3_1- inner node disablement + // 20 glim_2_0- inner node disablement + // 21 acm_1_2- inner node disablement + // 22 gammatm_v4- inner node disablement + // 23 csc_1_1- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 26 b2i_ds_1_1- inner node disablement + // 27 lbff_crop_espa_1_4- inner node disablement + // 28 image_upscaler_1_1- inner node disablement + // 29 cas_1_1- inner node disablement + // 30 odr_ofs_mp_1_4- inner node disablement + // 31 b2i_ds_output_1_1- inner node disablement + // 32 odr_ofs_dp_1_4- inner node disablement + // 33 aestatistics_2_1- inner node disablement + // 34 odr_ae_1_4- inner node disablement + // 35 odr_af_std_1_4- inner node disablement + // 36 ifd_gmv_1_4- inner node disablement + // 37 gmv_statistics_1_1- inner node disablement + // 38 odr_gmv_feature_1_4- inner node disablement + // 39 odr_gmv_match_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFF90; + } + else if (nodeRelevantInnerOptions == (noMp | noDp | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000200061 + bitmaps.rbm[0] = 0x200061; + // DEB - 0x00000000000000000000000000071031 + bitmaps.deb[0] = 0x71031; + // TEB - 0x0000000000041817 + bitmaps.teb[0] = 0x41817; + // REB - 0x0000000000000000000000000000100F + bitmaps.reb[0] = 0x100F; + + // Kernels disablement + // 3 dpc_2_2- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 bnlm_3_4- inner node disablement + // 15 bxt_demosaic- inner node disablement + // 16 vcsc_2_0_b- inner node disablement + // 17 gltm_2_0- inner node disablement + // 18 xnr_5_4- inner node disablement + // 19 vcr_3_1- inner node disablement + // 20 glim_2_0- inner node disablement + // 21 acm_1_2- inner node disablement + // 22 gammatm_v4- inner node disablement + // 23 csc_1_1- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 26 b2i_ds_1_1- inner node disablement + // 27 lbff_crop_espa_1_4- inner node disablement + // 28 image_upscaler_1_1- inner node disablement + // 29 cas_1_1- inner node disablement + // 30 odr_ofs_mp_1_4- inner node disablement + // 31 b2i_ds_output_1_1- inner node disablement + // 32 odr_ofs_dp_1_4- inner node disablement + // 33 aestatistics_2_1- inner node disablement + // 34 odr_ae_1_4- inner node disablement + // 35 odr_af_std_1_4- inner node disablement + // 36 ifd_gmv_1_4- inner node disablement + // 37 gmv_statistics_1_1- inner node disablement + // 38 odr_gmv_feature_1_4- inner node disablement + // 39 odr_gmv_match_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFC68; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgbs_grid_1_1- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 bnlm_3_4- inner node disablement + // 15 bxt_demosaic- inner node disablement + // 16 vcsc_2_0_b- inner node disablement + // 17 gltm_2_0- inner node disablement + // 18 xnr_5_4- inner node disablement + // 19 vcr_3_1- inner node disablement + // 20 glim_2_0- inner node disablement + // 21 acm_1_2- inner node disablement + // 22 gammatm_v4- inner node disablement + // 23 csc_1_1- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 26 b2i_ds_1_1- inner node disablement + // 27 lbff_crop_espa_1_4- inner node disablement + // 28 image_upscaler_1_1- inner node disablement + // 29 cas_1_1- inner node disablement + // 30 odr_ofs_mp_1_4- inner node disablement + // 31 b2i_ds_output_1_1- inner node disablement + // 32 odr_ofs_dp_1_4- inner node disablement + // 33 aestatistics_2_1- inner node disablement + // 34 odr_ae_1_4- inner node disablement + // 35 odr_af_std_1_4- inner node disablement + // 36 ifd_gmv_1_4- inner node disablement + // 37 gmv_statistics_1_1- inner node disablement + // 38 odr_gmv_feature_1_4- inner node disablement + // 39 odr_gmv_match_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x0000000000000000006400FD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x6400FD; + // DEB - 0x000000000000E120000FF9CE8F9FF1F1 + bitmaps.deb[0] = 0x8F9FF1F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x0000000030365E9F + bitmaps.teb[0] = 0x30365E9F; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffRgbIrWithGmvNoTnrNoSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 40; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0xF1FCFFF000; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x1F0000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffRgbIrNoGmvWithTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 48; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noIr | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FCDD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x67FCDD; + // DEB - 0x000000000000E13E79F0F9CE8F8001F1 + bitmaps.deb[0] = 0x8F8001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC0409F + bitmaps.teb[0] = 0x3FC0409F; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1C3000390; + } + else if (nodeRelevantInnerOptions == (noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FC9D503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E13E79F0F9CE8D9FF1F1 + bitmaps.deb[0] = 0x8D9FF1F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC41E9F + bitmaps.teb[0] = 0x3FC41E9F; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x40; + } + else if (nodeRelevantInnerOptions == (no3A | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FC9D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E13E79F0F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC0009F + bitmaps.teb[0] = 0x3FC0009F; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1C30003D0; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FCDD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x47FCDD; + // DEB - 0x000000000000C13E79F0F9CE8F9FF1F1 + bitmaps.deb[0] = 0x8F9FF1F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC45E9F + bitmaps.teb[0] = 0x2FC45E9F; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 44 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x100000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FCDD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x47FCDD; + // DEB - 0x000000000000C13E79F0F9CE8F8001F1 + bitmaps.deb[0] = 0x8F8001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC0409F + bitmaps.teb[0] = 0x2FC0409F; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + // 44 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1001C3000390; + } + else if (nodeRelevantInnerOptions == (noMp | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C13E79F0F9CE8D9FF1F1 + bitmaps.deb[0] = 0x8D9FF1F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC41E9F + bitmaps.teb[0] = 0x2FC41E9F; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + // 44 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x100000000040; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C13E79F0F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC0009F + bitmaps.teb[0] = 0x2FC0009F; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + // 44 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1001C30003D0; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FCDD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x27FCDD; + // DEB - 0x000000000000213E79F0F9CE8F9FF1F1 + bitmaps.deb[0] = 0x8F9FF1F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC45E9F + bitmaps.teb[0] = 0x1FC45E9F; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 45 b2i_ds_output_1_1- inner node disablement + // 46 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x600000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FCDD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x27FCDD; + // DEB - 0x000000000000213E79F0F9CE8F8001F1 + bitmaps.deb[0] = 0x8F8001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC0409F + bitmaps.teb[0] = 0x1FC0409F; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + // 45 b2i_ds_output_1_1- inner node disablement + // 46 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x6001C3000390; + } + else if (nodeRelevantInnerOptions == (noDp | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x000000000000213E79F0F9CE8D9FF1F1 + bitmaps.deb[0] = 0x8D9FF1F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC41E9F + bitmaps.teb[0] = 0x1FC41E9F; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + // 45 b2i_ds_output_1_1- inner node disablement + // 46 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x600000000040; + } + else if (nodeRelevantInnerOptions == (no3A | noDp | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x000000000000213E79F0F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC0009F + bitmaps.teb[0] = 0x1FC0009F; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + // 45 b2i_ds_output_1_1- inner node disablement + // 46 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x6001C30003D0; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000004000206071 + bitmaps.rbm[0] = 0x206071; + bitmaps.rbm[1] = 0x40; + // DEB - 0x00000000000000000000000003871131 + bitmaps.deb[0] = 0x3871131; + // TEB - 0x0000000000045817 + bitmaps.teb[0] = 0x45817; + // REB - 0x0000000000000000000000000300118F + bitmaps.reb[0] = 0x300118F; + + // Kernels disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 bnlm_3_4- inner node disablement + // 15 bxt_demosaic- inner node disablement + // 16 vcsc_2_0_b- inner node disablement + // 17 gltm_2_0- inner node disablement + // 18 xnr_5_4- inner node disablement + // 19 vcr_3_1- inner node disablement + // 20 glim_2_0- inner node disablement + // 21 acm_1_2- inner node disablement + // 22 gammatm_v4- inner node disablement + // 23 csc_1_1- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 26 b2i_ds_1_1- inner node disablement + // 27 lbff_crop_espa_1_4- inner node disablement + // 28 tnr7_spatial_1_1- inner node disablement + // 29 tnr_scaler_lb_1_1- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + // 33 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 34 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 35 tnr7_ims_1_2- inner node disablement + // 36 tnr7_bc_1_2- inner node disablement + // 37 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 38 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 39 tnr7_blend_1_1- inner node disablement + // 40 odr_tnr_fp_yuvn_1_4- inner node disablement + // 41 tnr_scaler_fp_1_1- inner node disablement + // 42 image_upscaler_1_1- inner node disablement + // 43 cas_1_1- inner node disablement + // 44 odr_ofs_mp_1_4- inner node disablement + // 45 b2i_ds_output_1_1- inner node disablement + // 46 odr_ofs_dp_1_4- inner node disablement + // 47 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFC00; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000004000006011 + bitmaps.rbm[0] = 0x6011; + bitmaps.rbm[1] = 0x40; + // DEB - 0x00000000000000000000000003800131 + bitmaps.deb[0] = 0x3800131; + // TEB - 0x0000000000004017 + bitmaps.teb[0] = 0x4017; + // REB - 0x00000000000000000000000003000187 + bitmaps.reb[0] = 0x3000187; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 bnlm_3_4- inner node disablement + // 15 bxt_demosaic- inner node disablement + // 16 vcsc_2_0_b- inner node disablement + // 17 gltm_2_0- inner node disablement + // 18 xnr_5_4- inner node disablement + // 19 vcr_3_1- inner node disablement + // 20 glim_2_0- inner node disablement + // 21 acm_1_2- inner node disablement + // 22 gammatm_v4- inner node disablement + // 23 csc_1_1- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 26 b2i_ds_1_1- inner node disablement + // 27 lbff_crop_espa_1_4- inner node disablement + // 28 tnr7_spatial_1_1- inner node disablement + // 29 tnr_scaler_lb_1_1- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + // 33 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 34 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 35 tnr7_ims_1_2- inner node disablement + // 36 tnr7_bc_1_2- inner node disablement + // 37 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 38 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 39 tnr7_blend_1_1- inner node disablement + // 40 odr_tnr_fp_yuvn_1_4- inner node disablement + // 41 tnr_scaler_fp_1_1- inner node disablement + // 42 image_upscaler_1_1- inner node disablement + // 43 cas_1_1- inner node disablement + // 44 odr_ofs_mp_1_4- inner node disablement + // 45 b2i_ds_output_1_1- inner node disablement + // 46 odr_ofs_dp_1_4- inner node disablement + // 47 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFF90; + } + else if (nodeRelevantInnerOptions == (noMp | noDp | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000200061 + bitmaps.rbm[0] = 0x200061; + // DEB - 0x00000000000000000000000000071031 + bitmaps.deb[0] = 0x71031; + // TEB - 0x0000000000041817 + bitmaps.teb[0] = 0x41817; + // REB - 0x0000000000000000000000000000100F + bitmaps.reb[0] = 0x100F; + + // Kernels disablement + // 3 dpc_2_2- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 bnlm_3_4- inner node disablement + // 15 bxt_demosaic- inner node disablement + // 16 vcsc_2_0_b- inner node disablement + // 17 gltm_2_0- inner node disablement + // 18 xnr_5_4- inner node disablement + // 19 vcr_3_1- inner node disablement + // 20 glim_2_0- inner node disablement + // 21 acm_1_2- inner node disablement + // 22 gammatm_v4- inner node disablement + // 23 csc_1_1- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 26 b2i_ds_1_1- inner node disablement + // 27 lbff_crop_espa_1_4- inner node disablement + // 28 tnr7_spatial_1_1- inner node disablement + // 29 tnr_scaler_lb_1_1- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + // 33 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 34 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 35 tnr7_ims_1_2- inner node disablement + // 36 tnr7_bc_1_2- inner node disablement + // 37 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 38 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 39 tnr7_blend_1_1- inner node disablement + // 40 odr_tnr_fp_yuvn_1_4- inner node disablement + // 41 tnr_scaler_fp_1_1- inner node disablement + // 42 image_upscaler_1_1- inner node disablement + // 43 cas_1_1- inner node disablement + // 44 odr_ofs_mp_1_4- inner node disablement + // 45 b2i_ds_output_1_1- inner node disablement + // 46 odr_ofs_dp_1_4- inner node disablement + // 47 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFC68; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgbs_grid_1_1- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 bnlm_3_4- inner node disablement + // 15 bxt_demosaic- inner node disablement + // 16 vcsc_2_0_b- inner node disablement + // 17 gltm_2_0- inner node disablement + // 18 xnr_5_4- inner node disablement + // 19 vcr_3_1- inner node disablement + // 20 glim_2_0- inner node disablement + // 21 acm_1_2- inner node disablement + // 22 gammatm_v4- inner node disablement + // 23 csc_1_1- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 26 b2i_ds_1_1- inner node disablement + // 27 lbff_crop_espa_1_4- inner node disablement + // 28 tnr7_spatial_1_1- inner node disablement + // 29 tnr_scaler_lb_1_1- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + // 33 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 34 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 35 tnr7_ims_1_2- inner node disablement + // 36 tnr7_bc_1_2- inner node disablement + // 37 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 38 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 39 tnr7_blend_1_1- inner node disablement + // 40 odr_tnr_fp_yuvn_1_4- inner node disablement + // 41 tnr_scaler_fp_1_1- inner node disablement + // 42 image_upscaler_1_1- inner node disablement + // 43 cas_1_1- inner node disablement + // 44 odr_ofs_mp_1_4- inner node disablement + // 45 b2i_ds_output_1_1- inner node disablement + // 46 odr_ofs_dp_1_4- inner node disablement + // 47 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000067FCDD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x67FCDD; + // DEB - 0x000000000000E13E79F0F9CE8F9FF1F1 + bitmaps.deb[0] = 0x8F9FF1F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC45E9F + bitmaps.teb[0] = 0x3FC45E9F; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffRgbIrNoGmvWithTnrNoSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 48; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0xFFFE3CFFF000; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x7C0000000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffRgbIrIrNoGmvWithTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 44; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[1].run_kernel.enable = 0; // bxt_blc + nodeKernels.kernelList[2].run_kernel.enable = 0; // linearization2_0 + nodeKernels.kernelList[6].run_kernel.enable = 0; // wb_1_1 + nodeKernels.kernelList[8].run_kernel.enable = 0; // bxt_demosaic + nodeKernels.kernelList[14].run_kernel.enable = 0; // acm_1_2 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FC1D50010009 + bitmaps.rbm[0] = 0x50010009; + bitmaps.rbm[1] = 0x67FC1D; + // DEB - 0x000000000000E13E79F0F9CE8C0000F1 + bitmaps.deb[0] = 0x8C0000F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC0009F + bitmaps.teb[0] = 0x3FC0009F; + // REB - 0x00000000000000000000001FF0F60667 + bitmaps.reb[0] = 0xF0F60667; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 17 rgbs_grid_1_1- inner node disablement + // 18 ccm_3a_2_0- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 24 odr_awb_std_1_4- inner node disablement + // 25 odr_awb_sat_1_4- inner node disablement + // 26 aestatistics_2_1- inner node disablement + // 27 odr_ae_1_4- inner node disablement + // 28 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1F0E0000; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FC1D501F0009 + bitmaps.rbm[0] = 0x501F0009; + bitmaps.rbm[1] = 0x47FC1D; + // DEB - 0x000000000000C13E79F0F9CE8C1BF0F1 + bitmaps.deb[0] = 0x8C1BF0F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC01E9F + bitmaps.teb[0] = 0x2FC01E9F; + // REB - 0x00000000000000000000001FF0F67E67 + bitmaps.reb[0] = 0xF0F67E67; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 40 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x10000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FC1D50010009 + bitmaps.rbm[0] = 0x50010009; + bitmaps.rbm[1] = 0x47FC1D; + // DEB - 0x000000000000C13E79F0F9CE8C0000F1 + bitmaps.deb[0] = 0x8C0000F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC0009F + bitmaps.teb[0] = 0x2FC0009F; + // REB - 0x00000000000000000000001FF0F60667 + bitmaps.reb[0] = 0xF0F60667; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 17 rgbs_grid_1_1- inner node disablement + // 18 ccm_3a_2_0- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 24 odr_awb_std_1_4- inner node disablement + // 25 odr_awb_sat_1_4- inner node disablement + // 26 aestatistics_2_1- inner node disablement + // 27 odr_ae_1_4- inner node disablement + // 28 odr_af_std_1_4- inner node disablement + // 40 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1001F0E0000; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FC1D501F0009 + bitmaps.rbm[0] = 0x501F0009; + bitmaps.rbm[1] = 0x27FC1D; + // DEB - 0x000000000000213E79F0F9CE8C1BF0F1 + bitmaps.deb[0] = 0x8C1BF0F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC01E9F + bitmaps.teb[0] = 0x1FC01E9F; + // REB - 0x00000000000000000000001FF0F67E67 + bitmaps.reb[0] = 0xF0F67E67; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 41 b2i_ds_output_1_1- inner node disablement + // 42 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x60000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FC1D50010009 + bitmaps.rbm[0] = 0x50010009; + bitmaps.rbm[1] = 0x27FC1D; + // DEB - 0x000000000000213E79F0F9CE8C0000F1 + bitmaps.deb[0] = 0x8C0000F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC0009F + bitmaps.teb[0] = 0x1FC0009F; + // REB - 0x00000000000000000000001FF0F60667 + bitmaps.reb[0] = 0xF0F60667; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 17 rgbs_grid_1_1- inner node disablement + // 18 ccm_3a_2_0- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 24 odr_awb_std_1_4- inner node disablement + // 25 odr_awb_sat_1_4- inner node disablement + // 26 aestatistics_2_1- inner node disablement + // 27 odr_ae_1_4- inner node disablement + // 28 odr_af_std_1_4- inner node disablement + // 41 b2i_ds_output_1_1- inner node disablement + // 42 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x6001F0E0000; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000000001E0009 + bitmaps.rbm[0] = 0x1E0009; + // DEB - 0x000000000000000000000000001BF0F1 + bitmaps.deb[0] = 0x1BF0F1; + // TEB - 0x0000000000001E97 + bitmaps.teb[0] = 0x1E97; + // REB - 0x00000000000000000000000000007E67 + bitmaps.reb[0] = 0x7E67; + + // Kernels disablement + // 5 gd_2_2- inner node disablement + // 6 wb_1_1- inner node disablement + // 7 bnlm_3_4- inner node disablement + // 8 bxt_demosaic- inner node disablement + // 9 vcsc_2_0_b- inner node disablement + // 10 gltm_2_0- inner node disablement + // 11 xnr_5_4- inner node disablement + // 12 vcr_3_1- inner node disablement + // 13 glim_2_0- inner node disablement + // 14 acm_1_2- inner node disablement + // 15 gammatm_v4- inner node disablement + // 16 csc_1_1- inner node disablement + // 20 b2i_ds_1_1- inner node disablement + // 21 lbff_crop_espa_1_4- inner node disablement + // 22 tnr7_spatial_1_1- inner node disablement + // 23 tnr_scaler_lb_1_1- inner node disablement + // 29 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 30 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 31 tnr7_ims_1_2- inner node disablement + // 32 tnr7_bc_1_2- inner node disablement + // 33 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 34 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 35 tnr7_blend_1_1- inner node disablement + // 36 odr_tnr_fp_yuvn_1_4- inner node disablement + // 37 tnr_scaler_fp_1_1- inner node disablement + // 38 image_upscaler_1_1- inner node disablement + // 39 cas_1_1- inner node disablement + // 40 odr_ofs_mp_1_4- inner node disablement + // 41 b2i_ds_output_1_1- inner node disablement + // 42 odr_ofs_dp_1_4- inner node disablement + // 43 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFE0F1FFE0; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 ifd_lsc_1_4- inner node disablement + // 4 lsc_1_2- inner node disablement + // 5 gd_2_2- inner node disablement + // 6 wb_1_1- inner node disablement + // 7 bnlm_3_4- inner node disablement + // 8 bxt_demosaic- inner node disablement + // 9 vcsc_2_0_b- inner node disablement + // 10 gltm_2_0- inner node disablement + // 11 xnr_5_4- inner node disablement + // 12 vcr_3_1- inner node disablement + // 13 glim_2_0- inner node disablement + // 14 acm_1_2- inner node disablement + // 15 gammatm_v4- inner node disablement + // 16 csc_1_1- inner node disablement + // 17 rgbs_grid_1_1- inner node disablement + // 18 ccm_3a_2_0- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 20 b2i_ds_1_1- inner node disablement + // 21 lbff_crop_espa_1_4- inner node disablement + // 22 tnr7_spatial_1_1- inner node disablement + // 23 tnr_scaler_lb_1_1- inner node disablement + // 24 odr_awb_std_1_4- inner node disablement + // 25 odr_awb_sat_1_4- inner node disablement + // 26 aestatistics_2_1- inner node disablement + // 27 odr_ae_1_4- inner node disablement + // 28 odr_af_std_1_4- inner node disablement + // 29 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 30 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 31 tnr7_ims_1_2- inner node disablement + // 32 tnr7_bc_1_2- inner node disablement + // 33 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 34 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 35 tnr7_blend_1_1- inner node disablement + // 36 odr_tnr_fp_yuvn_1_4- inner node disablement + // 37 tnr_scaler_fp_1_1- inner node disablement + // 38 image_upscaler_1_1- inner node disablement + // 39 cas_1_1- inner node disablement + // 40 odr_ofs_mp_1_4- inner node disablement + // 41 b2i_ds_output_1_1- inner node disablement + // 42 odr_ofs_dp_1_4- inner node disablement + // 43 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000067FC1D501F0009 + bitmaps.rbm[0] = 0x501F0009; + bitmaps.rbm[1] = 0x67FC1D; + // DEB - 0x000000000000E13E79F0F9CE8C1BF0F1 + bitmaps.deb[0] = 0x8C1BF0F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC01E9F + bitmaps.teb[0] = 0x3FC01E9F; + // REB - 0x00000000000000000000001FF0F67E67 + bitmaps.reb[0] = 0xF0F67E67; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffRgbIrIrNoGmvWithTnrNoSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 44; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[1].run_kernel.enable = 0; // bxt_blc + nodeKernels.kernelList[2].run_kernel.enable = 0; // linearization2_0 + nodeKernels.kernelList[6].run_kernel.enable = 0; // wb_1_1 + nodeKernels.kernelList[8].run_kernel.enable = 0; // bxt_demosaic + nodeKernels.kernelList[14].run_kernel.enable = 0; // acm_1_2 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0xFFFE0F1FFE0; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x7C000000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffRgbIrWithGmvWithTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 52; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noIr | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FCFD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x67FCFD; + // DEB - 0x000000000000E13E79FFF9CE8F8001F1 + bitmaps.deb[0] = 0x8F8001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FF2409F + bitmaps.teb[0] = 0x3FF2409F; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1C3000390; + } + else if (nodeRelevantInnerOptions == (noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FCBD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E13E79FFF9CE8D9FF1F1 + bitmaps.deb[0] = 0x8D9FF1F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FF61E9F + bitmaps.teb[0] = 0x3FF61E9F; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x40; + } + else if (nodeRelevantInnerOptions == (no3A | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FCBD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E13E79FFF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FF2009F + bitmaps.teb[0] = 0x3FF2009F; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1C30003D0; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FCFD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x47FCFD; + // DEB - 0x000000000000C13E79FFF9CE8F9FF1F1 + bitmaps.deb[0] = 0x8F9FF1F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FF65E9F + bitmaps.teb[0] = 0x2FF65E9F; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 48 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FCFD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x47FCFD; + // DEB - 0x000000000000C13E79FFF9CE8F8001F1 + bitmaps.deb[0] = 0x8F8001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FF2409F + bitmaps.teb[0] = 0x2FF2409F; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + // 48 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x10001C3000390; + } + else if (nodeRelevantInnerOptions == (noMp | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C13E79FFF9CE8D9FF1F1 + bitmaps.deb[0] = 0x8D9FF1F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FF61E9F + bitmaps.teb[0] = 0x2FF61E9F; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + // 48 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1000000000040; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C13E79FFF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FF2009F + bitmaps.teb[0] = 0x2FF2009F; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + // 48 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x10001C30003D0; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FCFD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x27FCFD; + // DEB - 0x000000000000213E79FFF9CE8F9FF1F1 + bitmaps.deb[0] = 0x8F9FF1F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FF65E9F + bitmaps.teb[0] = 0x1FF65E9F; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 49 b2i_ds_output_1_1- inner node disablement + // 50 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x6000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FCFD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x27FCFD; + // DEB - 0x000000000000213E79FFF9CE8F8001F1 + bitmaps.deb[0] = 0x8F8001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FF2409F + bitmaps.teb[0] = 0x1FF2409F; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + // 49 b2i_ds_output_1_1- inner node disablement + // 50 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x60001C3000390; + } + else if (nodeRelevantInnerOptions == (noDp | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x000000000000213E79FFF9CE8D9FF1F1 + bitmaps.deb[0] = 0x8D9FF1F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FF61E9F + bitmaps.teb[0] = 0x1FF61E9F; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + // 49 b2i_ds_output_1_1- inner node disablement + // 50 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x6000000000040; + } + else if (nodeRelevantInnerOptions == (no3A | noDp | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x000000000000213E79FFF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FF2009F + bitmaps.teb[0] = 0x1FF2009F; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + // 49 b2i_ds_output_1_1- inner node disablement + // 50 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x60001C30003D0; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000004000206071 + bitmaps.rbm[0] = 0x206071; + bitmaps.rbm[1] = 0x40; + // DEB - 0x00000000000000000000000003871131 + bitmaps.deb[0] = 0x3871131; + // TEB - 0x0000000000045817 + bitmaps.teb[0] = 0x45817; + // REB - 0x0000000000000000000000000300118F + bitmaps.reb[0] = 0x300118F; + + // Kernels disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 bnlm_3_4- inner node disablement + // 15 bxt_demosaic- inner node disablement + // 16 vcsc_2_0_b- inner node disablement + // 17 gltm_2_0- inner node disablement + // 18 xnr_5_4- inner node disablement + // 19 vcr_3_1- inner node disablement + // 20 glim_2_0- inner node disablement + // 21 acm_1_2- inner node disablement + // 22 gammatm_v4- inner node disablement + // 23 csc_1_1- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 26 b2i_ds_1_1- inner node disablement + // 27 lbff_crop_espa_1_4- inner node disablement + // 28 tnr7_spatial_1_1- inner node disablement + // 29 tnr_scaler_lb_1_1- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + // 33 ifd_gmv_1_4- inner node disablement + // 34 gmv_statistics_1_1- inner node disablement + // 35 odr_gmv_feature_1_4- inner node disablement + // 36 odr_gmv_match_1_4- inner node disablement + // 37 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 38 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 39 tnr7_ims_1_2- inner node disablement + // 40 tnr7_bc_1_2- inner node disablement + // 41 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 42 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 43 tnr7_blend_1_1- inner node disablement + // 44 odr_tnr_fp_yuvn_1_4- inner node disablement + // 45 tnr_scaler_fp_1_1- inner node disablement + // 46 image_upscaler_1_1- inner node disablement + // 47 cas_1_1- inner node disablement + // 48 odr_ofs_mp_1_4- inner node disablement + // 49 b2i_ds_output_1_1- inner node disablement + // 50 odr_ofs_dp_1_4- inner node disablement + // 51 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFC00; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000004000006011 + bitmaps.rbm[0] = 0x6011; + bitmaps.rbm[1] = 0x40; + // DEB - 0x00000000000000000000000003800131 + bitmaps.deb[0] = 0x3800131; + // TEB - 0x0000000000004017 + bitmaps.teb[0] = 0x4017; + // REB - 0x00000000000000000000000003000187 + bitmaps.reb[0] = 0x3000187; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 bnlm_3_4- inner node disablement + // 15 bxt_demosaic- inner node disablement + // 16 vcsc_2_0_b- inner node disablement + // 17 gltm_2_0- inner node disablement + // 18 xnr_5_4- inner node disablement + // 19 vcr_3_1- inner node disablement + // 20 glim_2_0- inner node disablement + // 21 acm_1_2- inner node disablement + // 22 gammatm_v4- inner node disablement + // 23 csc_1_1- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 26 b2i_ds_1_1- inner node disablement + // 27 lbff_crop_espa_1_4- inner node disablement + // 28 tnr7_spatial_1_1- inner node disablement + // 29 tnr_scaler_lb_1_1- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + // 33 ifd_gmv_1_4- inner node disablement + // 34 gmv_statistics_1_1- inner node disablement + // 35 odr_gmv_feature_1_4- inner node disablement + // 36 odr_gmv_match_1_4- inner node disablement + // 37 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 38 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 39 tnr7_ims_1_2- inner node disablement + // 40 tnr7_bc_1_2- inner node disablement + // 41 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 42 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 43 tnr7_blend_1_1- inner node disablement + // 44 odr_tnr_fp_yuvn_1_4- inner node disablement + // 45 tnr_scaler_fp_1_1- inner node disablement + // 46 image_upscaler_1_1- inner node disablement + // 47 cas_1_1- inner node disablement + // 48 odr_ofs_mp_1_4- inner node disablement + // 49 b2i_ds_output_1_1- inner node disablement + // 50 odr_ofs_dp_1_4- inner node disablement + // 51 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFF90; + } + else if (nodeRelevantInnerOptions == (noMp | noDp | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000200061 + bitmaps.rbm[0] = 0x200061; + // DEB - 0x00000000000000000000000000071031 + bitmaps.deb[0] = 0x71031; + // TEB - 0x0000000000041817 + bitmaps.teb[0] = 0x41817; + // REB - 0x0000000000000000000000000000100F + bitmaps.reb[0] = 0x100F; + + // Kernels disablement + // 3 dpc_2_2- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 bnlm_3_4- inner node disablement + // 15 bxt_demosaic- inner node disablement + // 16 vcsc_2_0_b- inner node disablement + // 17 gltm_2_0- inner node disablement + // 18 xnr_5_4- inner node disablement + // 19 vcr_3_1- inner node disablement + // 20 glim_2_0- inner node disablement + // 21 acm_1_2- inner node disablement + // 22 gammatm_v4- inner node disablement + // 23 csc_1_1- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 26 b2i_ds_1_1- inner node disablement + // 27 lbff_crop_espa_1_4- inner node disablement + // 28 tnr7_spatial_1_1- inner node disablement + // 29 tnr_scaler_lb_1_1- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + // 33 ifd_gmv_1_4- inner node disablement + // 34 gmv_statistics_1_1- inner node disablement + // 35 odr_gmv_feature_1_4- inner node disablement + // 36 odr_gmv_match_1_4- inner node disablement + // 37 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 38 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 39 tnr7_ims_1_2- inner node disablement + // 40 tnr7_bc_1_2- inner node disablement + // 41 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 42 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 43 tnr7_blend_1_1- inner node disablement + // 44 odr_tnr_fp_yuvn_1_4- inner node disablement + // 45 tnr_scaler_fp_1_1- inner node disablement + // 46 image_upscaler_1_1- inner node disablement + // 47 cas_1_1- inner node disablement + // 48 odr_ofs_mp_1_4- inner node disablement + // 49 b2i_ds_output_1_1- inner node disablement + // 50 odr_ofs_dp_1_4- inner node disablement + // 51 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFC68; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgbs_grid_1_1- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 bnlm_3_4- inner node disablement + // 15 bxt_demosaic- inner node disablement + // 16 vcsc_2_0_b- inner node disablement + // 17 gltm_2_0- inner node disablement + // 18 xnr_5_4- inner node disablement + // 19 vcr_3_1- inner node disablement + // 20 glim_2_0- inner node disablement + // 21 acm_1_2- inner node disablement + // 22 gammatm_v4- inner node disablement + // 23 csc_1_1- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 26 b2i_ds_1_1- inner node disablement + // 27 lbff_crop_espa_1_4- inner node disablement + // 28 tnr7_spatial_1_1- inner node disablement + // 29 tnr_scaler_lb_1_1- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + // 33 ifd_gmv_1_4- inner node disablement + // 34 gmv_statistics_1_1- inner node disablement + // 35 odr_gmv_feature_1_4- inner node disablement + // 36 odr_gmv_match_1_4- inner node disablement + // 37 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 38 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 39 tnr7_ims_1_2- inner node disablement + // 40 tnr7_bc_1_2- inner node disablement + // 41 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 42 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 43 tnr7_blend_1_1- inner node disablement + // 44 odr_tnr_fp_yuvn_1_4- inner node disablement + // 45 tnr_scaler_fp_1_1- inner node disablement + // 46 image_upscaler_1_1- inner node disablement + // 47 cas_1_1- inner node disablement + // 48 odr_ofs_mp_1_4- inner node disablement + // 49 b2i_ds_output_1_1- inner node disablement + // 50 odr_ofs_dp_1_4- inner node disablement + // 51 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000067FCFD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x67FCFD; + // DEB - 0x000000000000E13E79FFF9CE8F9FF1F1 + bitmaps.deb[0] = 0x8F9FF1F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FF65E9F + bitmaps.teb[0] = 0x3FF65E9F; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffRgbIrWithGmvWithTnrNoSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 52; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0xFFFFE3CFFF000; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x7C00000000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffIrNoGmvNoTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 33; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[7].run_kernel.enable = 0; // wb_1_1 + nodeKernels.kernelList[9].run_kernel.enable = 0; // bxt_demosaic + nodeKernels.kernelList[15].run_kernel.enable = 0; // acm_1_2 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000064001D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x64001D; + // DEB - 0x000000000000E1200000F9CE8C0001F1 + bitmaps.deb[0] = 0x8C0001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x000000003000009F + bitmaps.teb[0] = 0x3000009F; + // REB - 0x00000000000000000000001F10F607E7 + bitmaps.reb[0] = 0x10F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 rgbs_grid_1_1- inner node disablement + // 19 ccm_3a_2_0- inner node disablement + // 20 fr_grid_1_0- inner node disablement + // 28 odr_awb_std_1_4- inner node disablement + // 29 odr_awb_sat_1_4- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1F01C0000; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000044001D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x44001D; + // DEB - 0x000000000000C1200000F9CE8C1BF1F1 + bitmaps.deb[0] = 0x8C1BF1F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x0000000020001E9F + bitmaps.teb[0] = 0x20001E9F; + // REB - 0x00000000000000000000001F10F67FE7 + bitmaps.reb[0] = 0x10F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 25 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x2000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000044001D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x44001D; + // DEB - 0x000000000000C1200000F9CE8C0001F1 + bitmaps.deb[0] = 0x8C0001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x000000002000009F + bitmaps.teb[0] = 0x2000009F; + // REB - 0x00000000000000000000001F10F607E7 + bitmaps.reb[0] = 0x10F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 rgbs_grid_1_1- inner node disablement + // 19 ccm_3a_2_0- inner node disablement + // 20 fr_grid_1_0- inner node disablement + // 25 odr_ofs_mp_1_4- inner node disablement + // 28 odr_awb_std_1_4- inner node disablement + // 29 odr_awb_sat_1_4- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1F21C0000; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000024001D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x24001D; + // DEB - 0x00000000000021200000F9CE8C1BF1F1 + bitmaps.deb[0] = 0x8C1BF1F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x0000000010001E9F + bitmaps.teb[0] = 0x10001E9F; + // REB - 0x00000000000000000000001F10F67FE7 + bitmaps.reb[0] = 0x10F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 26 b2i_ds_output_1_1- inner node disablement + // 27 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000024001D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x24001D; + // DEB - 0x00000000000021200000F9CE8C0001F1 + bitmaps.deb[0] = 0x8C0001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x000000001000009F + bitmaps.teb[0] = 0x1000009F; + // REB - 0x00000000000000000000001F10F607E7 + bitmaps.reb[0] = 0x10F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 rgbs_grid_1_1- inner node disablement + // 19 ccm_3a_2_0- inner node disablement + // 20 fr_grid_1_0- inner node disablement + // 26 b2i_ds_output_1_1- inner node disablement + // 27 odr_ofs_dp_1_4- inner node disablement + // 28 odr_awb_std_1_4- inner node disablement + // 29 odr_awb_sat_1_4- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FC1C0000; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000000001E9009 + bitmaps.rbm[0] = 0x1E9009; + // DEB - 0x000000000000000000000000001BF1F1 + bitmaps.deb[0] = 0x1BF1F1; + // TEB - 0x0000000000001E97 + bitmaps.teb[0] = 0x1E97; + // REB - 0x00000000000000000000000000007FE7 + bitmaps.reb[0] = 0x7FE7; + + // Kernels disablement + // 6 gd_2_2- inner node disablement + // 7 wb_1_1- inner node disablement + // 8 bnlm_3_4- inner node disablement + // 9 bxt_demosaic- inner node disablement + // 10 vcsc_2_0_b- inner node disablement + // 11 gltm_2_0- inner node disablement + // 12 xnr_5_4- inner node disablement + // 13 vcr_3_1- inner node disablement + // 14 glim_2_0- inner node disablement + // 15 acm_1_2- inner node disablement + // 16 gammatm_v4- inner node disablement + // 17 csc_1_1- inner node disablement + // 21 b2i_ds_1_1- inner node disablement + // 22 lbff_crop_espa_1_4- inner node disablement + // 23 image_upscaler_1_1- inner node disablement + // 24 cas_1_1- inner node disablement + // 25 odr_ofs_mp_1_4- inner node disablement + // 26 b2i_ds_output_1_1- inner node disablement + // 27 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFE3FFC0; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 ifd_lsc_1_4- inner node disablement + // 4 lsc_1_2- inner node disablement + // 5 dpc_2_2- inner node disablement + // 6 gd_2_2- inner node disablement + // 7 wb_1_1- inner node disablement + // 8 bnlm_3_4- inner node disablement + // 9 bxt_demosaic- inner node disablement + // 10 vcsc_2_0_b- inner node disablement + // 11 gltm_2_0- inner node disablement + // 12 xnr_5_4- inner node disablement + // 13 vcr_3_1- inner node disablement + // 14 glim_2_0- inner node disablement + // 15 acm_1_2- inner node disablement + // 16 gammatm_v4- inner node disablement + // 17 csc_1_1- inner node disablement + // 18 rgbs_grid_1_1- inner node disablement + // 19 ccm_3a_2_0- inner node disablement + // 20 fr_grid_1_0- inner node disablement + // 21 b2i_ds_1_1- inner node disablement + // 22 lbff_crop_espa_1_4- inner node disablement + // 23 image_upscaler_1_1- inner node disablement + // 24 cas_1_1- inner node disablement + // 25 odr_ofs_mp_1_4- inner node disablement + // 26 b2i_ds_output_1_1- inner node disablement + // 27 odr_ofs_dp_1_4- inner node disablement + // 28 odr_awb_std_1_4- inner node disablement + // 29 odr_awb_sat_1_4- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000064001D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x64001D; + // DEB - 0x000000000000E1200000F9CE8C1BF1F1 + bitmaps.deb[0] = 0x8C1BF1F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x0000000030001E9F + bitmaps.teb[0] = 0x30001E9F; + // REB - 0x00000000000000000000001F10F67FE7 + bitmaps.reb[0] = 0x10F67FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffIrNoGmvNoTnrNoSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 33; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[7].run_kernel.enable = 0; // wb_1_1 + nodeKernels.kernelList[9].run_kernel.enable = 0; // bxt_demosaic + nodeKernels.kernelList[15].run_kernel.enable = 0; // acm_1_2 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0xFE3FFC0; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0xF800000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffIrWithGmvNoTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 37; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[7].run_kernel.enable = 0; // wb_1_1 + nodeKernels.kernelList[9].run_kernel.enable = 0; // bxt_demosaic + nodeKernels.kernelList[15].run_kernel.enable = 0; // acm_1_2 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000064003D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x64003D; + // DEB - 0x000000000000E120000FF9CE8C0001F1 + bitmaps.deb[0] = 0x8C0001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x000000003032009F + bitmaps.teb[0] = 0x3032009F; + // REB - 0x00000000000000000000001F10F607E7 + bitmaps.reb[0] = 0x10F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 rgbs_grid_1_1- inner node disablement + // 19 ccm_3a_2_0- inner node disablement + // 20 fr_grid_1_0- inner node disablement + // 28 odr_awb_std_1_4- inner node disablement + // 29 odr_awb_sat_1_4- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1F01C0000; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000044003D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x44003D; + // DEB - 0x000000000000C120000FF9CE8C1BF1F1 + bitmaps.deb[0] = 0x8C1BF1F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x0000000020321E9F + bitmaps.teb[0] = 0x20321E9F; + // REB - 0x00000000000000000000001F10F67FE7 + bitmaps.reb[0] = 0x10F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 25 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x2000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000044003D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x44003D; + // DEB - 0x000000000000C120000FF9CE8C0001F1 + bitmaps.deb[0] = 0x8C0001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x000000002032009F + bitmaps.teb[0] = 0x2032009F; + // REB - 0x00000000000000000000001F10F607E7 + bitmaps.reb[0] = 0x10F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 rgbs_grid_1_1- inner node disablement + // 19 ccm_3a_2_0- inner node disablement + // 20 fr_grid_1_0- inner node disablement + // 25 odr_ofs_mp_1_4- inner node disablement + // 28 odr_awb_std_1_4- inner node disablement + // 29 odr_awb_sat_1_4- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1F21C0000; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000024003D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x24003D; + // DEB - 0x0000000000002120000FF9CE8C1BF1F1 + bitmaps.deb[0] = 0x8C1BF1F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x0000000010321E9F + bitmaps.teb[0] = 0x10321E9F; + // REB - 0x00000000000000000000001F10F67FE7 + bitmaps.reb[0] = 0x10F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 26 b2i_ds_output_1_1- inner node disablement + // 27 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000024003D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x24003D; + // DEB - 0x0000000000002120000FF9CE8C0001F1 + bitmaps.deb[0] = 0x8C0001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x000000001032009F + bitmaps.teb[0] = 0x1032009F; + // REB - 0x00000000000000000000001F10F607E7 + bitmaps.reb[0] = 0x10F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 rgbs_grid_1_1- inner node disablement + // 19 ccm_3a_2_0- inner node disablement + // 20 fr_grid_1_0- inner node disablement + // 26 b2i_ds_output_1_1- inner node disablement + // 27 odr_ofs_dp_1_4- inner node disablement + // 28 odr_awb_std_1_4- inner node disablement + // 29 odr_awb_sat_1_4- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FC1C0000; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000000001E9009 + bitmaps.rbm[0] = 0x1E9009; + // DEB - 0x000000000000000000000000001BF1F1 + bitmaps.deb[0] = 0x1BF1F1; + // TEB - 0x0000000000001E97 + bitmaps.teb[0] = 0x1E97; + // REB - 0x00000000000000000000000000007FE7 + bitmaps.reb[0] = 0x7FE7; + + // Kernels disablement + // 6 gd_2_2- inner node disablement + // 7 wb_1_1- inner node disablement + // 8 bnlm_3_4- inner node disablement + // 9 bxt_demosaic- inner node disablement + // 10 vcsc_2_0_b- inner node disablement + // 11 gltm_2_0- inner node disablement + // 12 xnr_5_4- inner node disablement + // 13 vcr_3_1- inner node disablement + // 14 glim_2_0- inner node disablement + // 15 acm_1_2- inner node disablement + // 16 gammatm_v4- inner node disablement + // 17 csc_1_1- inner node disablement + // 21 b2i_ds_1_1- inner node disablement + // 22 lbff_crop_espa_1_4- inner node disablement + // 23 image_upscaler_1_1- inner node disablement + // 24 cas_1_1- inner node disablement + // 25 odr_ofs_mp_1_4- inner node disablement + // 26 b2i_ds_output_1_1- inner node disablement + // 27 odr_ofs_dp_1_4- inner node disablement + // 33 ifd_gmv_1_4- inner node disablement + // 34 gmv_statistics_1_1- inner node disablement + // 35 odr_gmv_feature_1_4- inner node disablement + // 36 odr_gmv_match_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1E0FE3FFC0; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 ifd_lsc_1_4- inner node disablement + // 4 lsc_1_2- inner node disablement + // 5 dpc_2_2- inner node disablement + // 6 gd_2_2- inner node disablement + // 7 wb_1_1- inner node disablement + // 8 bnlm_3_4- inner node disablement + // 9 bxt_demosaic- inner node disablement + // 10 vcsc_2_0_b- inner node disablement + // 11 gltm_2_0- inner node disablement + // 12 xnr_5_4- inner node disablement + // 13 vcr_3_1- inner node disablement + // 14 glim_2_0- inner node disablement + // 15 acm_1_2- inner node disablement + // 16 gammatm_v4- inner node disablement + // 17 csc_1_1- inner node disablement + // 18 rgbs_grid_1_1- inner node disablement + // 19 ccm_3a_2_0- inner node disablement + // 20 fr_grid_1_0- inner node disablement + // 21 b2i_ds_1_1- inner node disablement + // 22 lbff_crop_espa_1_4- inner node disablement + // 23 image_upscaler_1_1- inner node disablement + // 24 cas_1_1- inner node disablement + // 25 odr_ofs_mp_1_4- inner node disablement + // 26 b2i_ds_output_1_1- inner node disablement + // 27 odr_ofs_dp_1_4- inner node disablement + // 28 odr_awb_std_1_4- inner node disablement + // 29 odr_awb_sat_1_4- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + // 33 ifd_gmv_1_4- inner node disablement + // 34 gmv_statistics_1_1- inner node disablement + // 35 odr_gmv_feature_1_4- inner node disablement + // 36 odr_gmv_match_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000064003D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x64003D; + // DEB - 0x000000000000E120000FF9CE8C1BF1F1 + bitmaps.deb[0] = 0x8C1BF1F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x0000000030321E9F + bitmaps.teb[0] = 0x30321E9F; + // REB - 0x00000000000000000000001F10F67FE7 + bitmaps.reb[0] = 0x10F67FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffIrWithGmvNoTnrNoSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 37; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[7].run_kernel.enable = 0; // wb_1_1 + nodeKernels.kernelList[9].run_kernel.enable = 0; // bxt_demosaic + nodeKernels.kernelList[15].run_kernel.enable = 0; // acm_1_2 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x1E0FE3FFC0; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0xF800000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffIrNoGmvWithTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 45; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[7].run_kernel.enable = 0; // wb_1_1 + nodeKernels.kernelList[9].run_kernel.enable = 0; // bxt_demosaic + nodeKernels.kernelList[15].run_kernel.enable = 0; // acm_1_2 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FC1D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x67FC1D; + // DEB - 0x000000000000E13E79F0F9CE8C0001F1 + bitmaps.deb[0] = 0x8C0001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC0009F + bitmaps.teb[0] = 0x3FC0009F; + // REB - 0x00000000000000000000001FF0F607E7 + bitmaps.reb[0] = 0xF0F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 rgbs_grid_1_1- inner node disablement + // 19 ccm_3a_2_0- inner node disablement + // 20 fr_grid_1_0- inner node disablement + // 25 odr_awb_std_1_4- inner node disablement + // 26 odr_awb_sat_1_4- inner node disablement + // 27 aestatistics_2_1- inner node disablement + // 28 odr_ae_1_4- inner node disablement + // 29 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3E1C0000; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FC1D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x47FC1D; + // DEB - 0x000000000000C13E79F0F9CE8C1BF1F1 + bitmaps.deb[0] = 0x8C1BF1F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC01E9F + bitmaps.teb[0] = 0x2FC01E9F; + // REB - 0x00000000000000000000001FF0F67FE7 + bitmaps.reb[0] = 0xF0F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 41 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x20000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FC1D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x47FC1D; + // DEB - 0x000000000000C13E79F0F9CE8C0001F1 + bitmaps.deb[0] = 0x8C0001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC0009F + bitmaps.teb[0] = 0x2FC0009F; + // REB - 0x00000000000000000000001FF0F607E7 + bitmaps.reb[0] = 0xF0F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 rgbs_grid_1_1- inner node disablement + // 19 ccm_3a_2_0- inner node disablement + // 20 fr_grid_1_0- inner node disablement + // 25 odr_awb_std_1_4- inner node disablement + // 26 odr_awb_sat_1_4- inner node disablement + // 27 aestatistics_2_1- inner node disablement + // 28 odr_ae_1_4- inner node disablement + // 29 odr_af_std_1_4- inner node disablement + // 41 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x2003E1C0000; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FC1D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x27FC1D; + // DEB - 0x000000000000213E79F0F9CE8C1BF1F1 + bitmaps.deb[0] = 0x8C1BF1F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC01E9F + bitmaps.teb[0] = 0x1FC01E9F; + // REB - 0x00000000000000000000001FF0F67FE7 + bitmaps.reb[0] = 0xF0F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 42 b2i_ds_output_1_1- inner node disablement + // 43 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC0000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FC1D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x27FC1D; + // DEB - 0x000000000000213E79F0F9CE8C0001F1 + bitmaps.deb[0] = 0x8C0001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC0009F + bitmaps.teb[0] = 0x1FC0009F; + // REB - 0x00000000000000000000001FF0F607E7 + bitmaps.reb[0] = 0xF0F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 rgbs_grid_1_1- inner node disablement + // 19 ccm_3a_2_0- inner node disablement + // 20 fr_grid_1_0- inner node disablement + // 25 odr_awb_std_1_4- inner node disablement + // 26 odr_awb_sat_1_4- inner node disablement + // 27 aestatistics_2_1- inner node disablement + // 28 odr_ae_1_4- inner node disablement + // 29 odr_af_std_1_4- inner node disablement + // 42 b2i_ds_output_1_1- inner node disablement + // 43 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC003E1C0000; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000000001E9009 + bitmaps.rbm[0] = 0x1E9009; + // DEB - 0x000000000000000000000000001BF1F1 + bitmaps.deb[0] = 0x1BF1F1; + // TEB - 0x0000000000001E97 + bitmaps.teb[0] = 0x1E97; + // REB - 0x00000000000000000000000000007FE7 + bitmaps.reb[0] = 0x7FE7; + + // Kernels disablement + // 6 gd_2_2- inner node disablement + // 7 wb_1_1- inner node disablement + // 8 bnlm_3_4- inner node disablement + // 9 bxt_demosaic- inner node disablement + // 10 vcsc_2_0_b- inner node disablement + // 11 gltm_2_0- inner node disablement + // 12 xnr_5_4- inner node disablement + // 13 vcr_3_1- inner node disablement + // 14 glim_2_0- inner node disablement + // 15 acm_1_2- inner node disablement + // 16 gammatm_v4- inner node disablement + // 17 csc_1_1- inner node disablement + // 21 b2i_ds_1_1- inner node disablement + // 22 lbff_crop_espa_1_4- inner node disablement + // 23 tnr7_spatial_1_1- inner node disablement + // 24 tnr_scaler_lb_1_1- inner node disablement + // 30 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 31 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 32 tnr7_ims_1_2- inner node disablement + // 33 tnr7_bc_1_2- inner node disablement + // 34 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 35 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 36 tnr7_blend_1_1- inner node disablement + // 37 odr_tnr_fp_yuvn_1_4- inner node disablement + // 38 tnr_scaler_fp_1_1- inner node disablement + // 39 image_upscaler_1_1- inner node disablement + // 40 cas_1_1- inner node disablement + // 41 odr_ofs_mp_1_4- inner node disablement + // 42 b2i_ds_output_1_1- inner node disablement + // 43 odr_ofs_dp_1_4- inner node disablement + // 44 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFC1E3FFC0; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 ifd_lsc_1_4- inner node disablement + // 4 lsc_1_2- inner node disablement + // 5 dpc_2_2- inner node disablement + // 6 gd_2_2- inner node disablement + // 7 wb_1_1- inner node disablement + // 8 bnlm_3_4- inner node disablement + // 9 bxt_demosaic- inner node disablement + // 10 vcsc_2_0_b- inner node disablement + // 11 gltm_2_0- inner node disablement + // 12 xnr_5_4- inner node disablement + // 13 vcr_3_1- inner node disablement + // 14 glim_2_0- inner node disablement + // 15 acm_1_2- inner node disablement + // 16 gammatm_v4- inner node disablement + // 17 csc_1_1- inner node disablement + // 18 rgbs_grid_1_1- inner node disablement + // 19 ccm_3a_2_0- inner node disablement + // 20 fr_grid_1_0- inner node disablement + // 21 b2i_ds_1_1- inner node disablement + // 22 lbff_crop_espa_1_4- inner node disablement + // 23 tnr7_spatial_1_1- inner node disablement + // 24 tnr_scaler_lb_1_1- inner node disablement + // 25 odr_awb_std_1_4- inner node disablement + // 26 odr_awb_sat_1_4- inner node disablement + // 27 aestatistics_2_1- inner node disablement + // 28 odr_ae_1_4- inner node disablement + // 29 odr_af_std_1_4- inner node disablement + // 30 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 31 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 32 tnr7_ims_1_2- inner node disablement + // 33 tnr7_bc_1_2- inner node disablement + // 34 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 35 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 36 tnr7_blend_1_1- inner node disablement + // 37 odr_tnr_fp_yuvn_1_4- inner node disablement + // 38 tnr_scaler_fp_1_1- inner node disablement + // 39 image_upscaler_1_1- inner node disablement + // 40 cas_1_1- inner node disablement + // 41 odr_ofs_mp_1_4- inner node disablement + // 42 b2i_ds_output_1_1- inner node disablement + // 43 odr_ofs_dp_1_4- inner node disablement + // 44 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000067FC1D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x67FC1D; + // DEB - 0x000000000000E13E79F0F9CE8C1BF1F1 + bitmaps.deb[0] = 0x8C1BF1F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC01E9F + bitmaps.teb[0] = 0x3FC01E9F; + // REB - 0x00000000000000000000001FF0F67FE7 + bitmaps.reb[0] = 0xF0F67FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffIrNoGmvWithTnrNoSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 45; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[7].run_kernel.enable = 0; // wb_1_1 + nodeKernels.kernelList[9].run_kernel.enable = 0; // bxt_demosaic + nodeKernels.kernelList[15].run_kernel.enable = 0; // acm_1_2 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x1FFFC1E3FFC0; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0xF8000000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffIrWithGmvWithTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 49; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[7].run_kernel.enable = 0; // wb_1_1 + nodeKernels.kernelList[9].run_kernel.enable = 0; // bxt_demosaic + nodeKernels.kernelList[15].run_kernel.enable = 0; // acm_1_2 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FC3D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x67FC3D; + // DEB - 0x000000000000E13E79FFF9CE8C0001F1 + bitmaps.deb[0] = 0x8C0001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FF2009F + bitmaps.teb[0] = 0x3FF2009F; + // REB - 0x00000000000000000000001FF0F607E7 + bitmaps.reb[0] = 0xF0F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 rgbs_grid_1_1- inner node disablement + // 19 ccm_3a_2_0- inner node disablement + // 20 fr_grid_1_0- inner node disablement + // 25 odr_awb_std_1_4- inner node disablement + // 26 odr_awb_sat_1_4- inner node disablement + // 27 aestatistics_2_1- inner node disablement + // 28 odr_ae_1_4- inner node disablement + // 29 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3E1C0000; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FC3D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x47FC3D; + // DEB - 0x000000000000C13E79FFF9CE8C1BF1F1 + bitmaps.deb[0] = 0x8C1BF1F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FF21E9F + bitmaps.teb[0] = 0x2FF21E9F; + // REB - 0x00000000000000000000001FF0F67FE7 + bitmaps.reb[0] = 0xF0F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 45 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x200000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FC3D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x47FC3D; + // DEB - 0x000000000000C13E79FFF9CE8C0001F1 + bitmaps.deb[0] = 0x8C0001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FF2009F + bitmaps.teb[0] = 0x2FF2009F; + // REB - 0x00000000000000000000001FF0F607E7 + bitmaps.reb[0] = 0xF0F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 rgbs_grid_1_1- inner node disablement + // 19 ccm_3a_2_0- inner node disablement + // 20 fr_grid_1_0- inner node disablement + // 25 odr_awb_std_1_4- inner node disablement + // 26 odr_awb_sat_1_4- inner node disablement + // 27 aestatistics_2_1- inner node disablement + // 28 odr_ae_1_4- inner node disablement + // 29 odr_af_std_1_4- inner node disablement + // 45 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x20003E1C0000; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FC3D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x27FC3D; + // DEB - 0x000000000000213E79FFF9CE8C1BF1F1 + bitmaps.deb[0] = 0x8C1BF1F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FF21E9F + bitmaps.teb[0] = 0x1FF21E9F; + // REB - 0x00000000000000000000001FF0F67FE7 + bitmaps.reb[0] = 0xF0F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 46 b2i_ds_output_1_1- inner node disablement + // 47 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC00000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FC3D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x27FC3D; + // DEB - 0x000000000000213E79FFF9CE8C0001F1 + bitmaps.deb[0] = 0x8C0001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FF2009F + bitmaps.teb[0] = 0x1FF2009F; + // REB - 0x00000000000000000000001FF0F607E7 + bitmaps.reb[0] = 0xF0F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 rgbs_grid_1_1- inner node disablement + // 19 ccm_3a_2_0- inner node disablement + // 20 fr_grid_1_0- inner node disablement + // 25 odr_awb_std_1_4- inner node disablement + // 26 odr_awb_sat_1_4- inner node disablement + // 27 aestatistics_2_1- inner node disablement + // 28 odr_ae_1_4- inner node disablement + // 29 odr_af_std_1_4- inner node disablement + // 46 b2i_ds_output_1_1- inner node disablement + // 47 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC0003E1C0000; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000000001E9009 + bitmaps.rbm[0] = 0x1E9009; + // DEB - 0x000000000000000000000000001BF1F1 + bitmaps.deb[0] = 0x1BF1F1; + // TEB - 0x0000000000001E97 + bitmaps.teb[0] = 0x1E97; + // REB - 0x00000000000000000000000000007FE7 + bitmaps.reb[0] = 0x7FE7; + + // Kernels disablement + // 6 gd_2_2- inner node disablement + // 7 wb_1_1- inner node disablement + // 8 bnlm_3_4- inner node disablement + // 9 bxt_demosaic- inner node disablement + // 10 vcsc_2_0_b- inner node disablement + // 11 gltm_2_0- inner node disablement + // 12 xnr_5_4- inner node disablement + // 13 vcr_3_1- inner node disablement + // 14 glim_2_0- inner node disablement + // 15 acm_1_2- inner node disablement + // 16 gammatm_v4- inner node disablement + // 17 csc_1_1- inner node disablement + // 21 b2i_ds_1_1- inner node disablement + // 22 lbff_crop_espa_1_4- inner node disablement + // 23 tnr7_spatial_1_1- inner node disablement + // 24 tnr_scaler_lb_1_1- inner node disablement + // 30 ifd_gmv_1_4- inner node disablement + // 31 gmv_statistics_1_1- inner node disablement + // 32 odr_gmv_feature_1_4- inner node disablement + // 33 odr_gmv_match_1_4- inner node disablement + // 34 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 35 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 36 tnr7_ims_1_2- inner node disablement + // 37 tnr7_bc_1_2- inner node disablement + // 38 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 39 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 40 tnr7_blend_1_1- inner node disablement + // 41 odr_tnr_fp_yuvn_1_4- inner node disablement + // 42 tnr_scaler_fp_1_1- inner node disablement + // 43 image_upscaler_1_1- inner node disablement + // 44 cas_1_1- inner node disablement + // 45 odr_ofs_mp_1_4- inner node disablement + // 46 b2i_ds_output_1_1- inner node disablement + // 47 odr_ofs_dp_1_4- inner node disablement + // 48 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFC1E3FFC0; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 ifd_lsc_1_4- inner node disablement + // 4 lsc_1_2- inner node disablement + // 5 dpc_2_2- inner node disablement + // 6 gd_2_2- inner node disablement + // 7 wb_1_1- inner node disablement + // 8 bnlm_3_4- inner node disablement + // 9 bxt_demosaic- inner node disablement + // 10 vcsc_2_0_b- inner node disablement + // 11 gltm_2_0- inner node disablement + // 12 xnr_5_4- inner node disablement + // 13 vcr_3_1- inner node disablement + // 14 glim_2_0- inner node disablement + // 15 acm_1_2- inner node disablement + // 16 gammatm_v4- inner node disablement + // 17 csc_1_1- inner node disablement + // 18 rgbs_grid_1_1- inner node disablement + // 19 ccm_3a_2_0- inner node disablement + // 20 fr_grid_1_0- inner node disablement + // 21 b2i_ds_1_1- inner node disablement + // 22 lbff_crop_espa_1_4- inner node disablement + // 23 tnr7_spatial_1_1- inner node disablement + // 24 tnr_scaler_lb_1_1- inner node disablement + // 25 odr_awb_std_1_4- inner node disablement + // 26 odr_awb_sat_1_4- inner node disablement + // 27 aestatistics_2_1- inner node disablement + // 28 odr_ae_1_4- inner node disablement + // 29 odr_af_std_1_4- inner node disablement + // 30 ifd_gmv_1_4- inner node disablement + // 31 gmv_statistics_1_1- inner node disablement + // 32 odr_gmv_feature_1_4- inner node disablement + // 33 odr_gmv_match_1_4- inner node disablement + // 34 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 35 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 36 tnr7_ims_1_2- inner node disablement + // 37 tnr7_bc_1_2- inner node disablement + // 38 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 39 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 40 tnr7_blend_1_1- inner node disablement + // 41 odr_tnr_fp_yuvn_1_4- inner node disablement + // 42 tnr_scaler_fp_1_1- inner node disablement + // 43 image_upscaler_1_1- inner node disablement + // 44 cas_1_1- inner node disablement + // 45 odr_ofs_mp_1_4- inner node disablement + // 46 b2i_ds_output_1_1- inner node disablement + // 47 odr_ofs_dp_1_4- inner node disablement + // 48 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000067FC3D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x67FC3D; + // DEB - 0x000000000000E13E79FFF9CE8C1BF1F1 + bitmaps.deb[0] = 0x8C1BF1F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FF21E9F + bitmaps.teb[0] = 0x3FF21E9F; + // REB - 0x00000000000000000000001FF0F67FE7 + bitmaps.reb[0] = 0xF0F67FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffIrWithGmvWithTnrNoSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 49; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[7].run_kernel.enable = 0; // wb_1_1 + nodeKernels.kernelList[9].run_kernel.enable = 0; // bxt_demosaic + nodeKernels.kernelList[15].run_kernel.enable = 0; // acm_1_2 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x1FFFFC1E3FFC0; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0xF80000000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 39; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noPdaf | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000064009D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1200000F9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x000000003008009F + bitmaps.teb[0] = 0x3008009F; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 30 odr_awb_std_1_4- inner node disablement + // 31 odr_awb_sat_1_4- inner node disablement + // 32 aestatistics_2_1- inner node disablement + // 33 odr_ae_1_4- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FC0700000; + } + else if (nodeRelevantInnerOptions == (noPdaf)) + { + // HW bitmaps + // RBM - 0x00000000000000000064009D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1200000F9CE8DBBF1F1 + bitmaps.deb[0] = 0x8DBBF1F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x0000000030081E9F + bitmaps.teb[0] = 0x30081E9F; + // REB - 0x00000000000000000000001F12F6FFE7 + bitmaps.reb[0] = 0x12F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7800000000; + } + else if (nodeRelevantInnerOptions == (no3A | noPdaf)) + { + // HW bitmaps + // RBM - 0x00000000000000000064009D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1200000F9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x000000003008009F + bitmaps.teb[0] = 0x3008009F; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 30 odr_awb_std_1_4- inner node disablement + // 31 odr_awb_sat_1_4- inner node disablement + // 32 aestatistics_2_1- inner node disablement + // 33 odr_ae_1_4- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FC0700000; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000044019D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x44019D; + // DEB - 0x000000000000C1200000F9CE8DFBFFF1 + bitmaps.deb[0] = 0x8DFBFFF1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x0000000020083F9F + bitmaps.teb[0] = 0x20083F9F; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 27 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x8000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000044009D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1200000F9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x000000002008009F + bitmaps.teb[0] = 0x2008009F; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 27 odr_ofs_mp_1_4- inner node disablement + // 30 odr_awb_std_1_4- inner node disablement + // 31 odr_awb_sat_1_4- inner node disablement + // 32 aestatistics_2_1- inner node disablement + // 33 odr_ae_1_4- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FC8700000; + } + else if (nodeRelevantInnerOptions == (noPdaf | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000044009D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1200000F9CE8DBBF1F1 + bitmaps.deb[0] = 0x8DBBF1F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x0000000020081E9F + bitmaps.teb[0] = 0x20081E9F; + // REB - 0x00000000000000000000001F12F6FFE7 + bitmaps.reb[0] = 0x12F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 27 odr_ofs_mp_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7808000000; + } + else if (nodeRelevantInnerOptions == (no3A | noPdaf | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000044009D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1200000F9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x000000002008009F + bitmaps.teb[0] = 0x2008009F; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 27 odr_ofs_mp_1_4- inner node disablement + // 30 odr_awb_std_1_4- inner node disablement + // 31 odr_awb_sat_1_4- inner node disablement + // 32 aestatistics_2_1- inner node disablement + // 33 odr_ae_1_4- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FC8700000; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000024019D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x24019D; + // DEB - 0x00000000000021200000F9CE8DFBFFF1 + bitmaps.deb[0] = 0x8DFBFFF1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x0000000010083F9F + bitmaps.teb[0] = 0x10083F9F; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 28 b2i_ds_output_1_1- inner node disablement + // 29 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x30000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000024009D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021200000F9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x000000001008009F + bitmaps.teb[0] = 0x1008009F; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 28 b2i_ds_output_1_1- inner node disablement + // 29 odr_ofs_dp_1_4- inner node disablement + // 30 odr_awb_std_1_4- inner node disablement + // 31 odr_awb_sat_1_4- inner node disablement + // 32 aestatistics_2_1- inner node disablement + // 33 odr_ae_1_4- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FF0700000; + } + else if (nodeRelevantInnerOptions == (noPdaf | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000024009D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021200000F9CE8DBBF1F1 + bitmaps.deb[0] = 0x8DBBF1F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x0000000010081E9F + bitmaps.teb[0] = 0x10081E9F; + // REB - 0x00000000000000000000001F12F6FFE7 + bitmaps.reb[0] = 0x12F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 28 b2i_ds_output_1_1- inner node disablement + // 29 odr_ofs_dp_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7830000000; + } + else if (nodeRelevantInnerOptions == (no3A | noPdaf | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000024009D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021200000F9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x000000001008009F + bitmaps.teb[0] = 0x1008009F; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 28 b2i_ds_output_1_1- inner node disablement + // 29 odr_ofs_dp_1_4- inner node disablement + // 30 odr_awb_std_1_4- inner node disablement + // 31 odr_awb_sat_1_4- inner node disablement + // 32 aestatistics_2_1- inner node disablement + // 33 odr_ae_1_4- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FF0700000; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000180041E6811 + bitmaps.rbm[0] = 0x41E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001FBFFF1 + bitmaps.deb[0] = 0x1FBFFF1; + // TEB - 0x0000000000083F97 + bitmaps.teb[0] = 0x83F97; + // REB - 0x0000000000000000000000000601FFE7 + bitmaps.reb[0] = 0x601FFE7; + + // Kernels disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 bnlm_3_4- inner node disablement + // 11 bxt_demosaic- inner node disablement + // 12 vcsc_2_0_b- inner node disablement + // 13 gltm_2_0- inner node disablement + // 14 xnr_5_4- inner node disablement + // 15 vcr_3_1- inner node disablement + // 16 glim_2_0- inner node disablement + // 17 acm_1_2- inner node disablement + // 18 gammatm_v4- inner node disablement + // 19 csc_1_1- inner node disablement + // 23 b2i_ds_1_1- inner node disablement + // 24 lbff_crop_espa_1_4- inner node disablement + // 25 image_upscaler_1_1- inner node disablement + // 26 cas_1_1- inner node disablement + // 27 odr_ofs_mp_1_4- inner node disablement + // 28 b2i_ds_output_1_1- inner node disablement + // 29 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3F8FFF00; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 odr_dpc_pdaf_1_4- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 ifd_lsc_1_4- inner node disablement + // 7 lsc_1_2- inner node disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 bnlm_3_4- inner node disablement + // 11 bxt_demosaic- inner node disablement + // 12 vcsc_2_0_b- inner node disablement + // 13 gltm_2_0- inner node disablement + // 14 xnr_5_4- inner node disablement + // 15 vcr_3_1- inner node disablement + // 16 glim_2_0- inner node disablement + // 17 acm_1_2- inner node disablement + // 18 gammatm_v4- inner node disablement + // 19 csc_1_1- inner node disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 23 b2i_ds_1_1- inner node disablement + // 24 lbff_crop_espa_1_4- inner node disablement + // 25 image_upscaler_1_1- inner node disablement + // 26 cas_1_1- inner node disablement + // 27 odr_ofs_mp_1_4- inner node disablement + // 28 b2i_ds_output_1_1- inner node disablement + // 29 odr_ofs_dp_1_4- inner node disablement + // 30 odr_awb_std_1_4- inner node disablement + // 31 odr_awb_sat_1_4- inner node disablement + // 32 aestatistics_2_1- inner node disablement + // 33 odr_ae_1_4- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFFFF; + } + else if (nodeRelevantInnerOptions == (noPdaf | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000080041E6811 + bitmaps.rbm[0] = 0x41E6811; + bitmaps.rbm[1] = 0x80; + // DEB - 0x00000000000000000000000001BBF1F1 + bitmaps.deb[0] = 0x1BBF1F1; + // TEB - 0x0000000000081E97 + bitmaps.teb[0] = 0x81E97; + // REB - 0x0000000000000000000000000200FFE7 + bitmaps.reb[0] = 0x200FFE7; + + // Kernels disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 bnlm_3_4- inner node disablement + // 11 bxt_demosaic- inner node disablement + // 12 vcsc_2_0_b- inner node disablement + // 13 gltm_2_0- inner node disablement + // 14 xnr_5_4- inner node disablement + // 15 vcr_3_1- inner node disablement + // 16 glim_2_0- inner node disablement + // 17 acm_1_2- inner node disablement + // 18 gammatm_v4- inner node disablement + // 19 csc_1_1- inner node disablement + // 23 b2i_ds_1_1- inner node disablement + // 24 lbff_crop_espa_1_4- inner node disablement + // 25 image_upscaler_1_1- inner node disablement + // 26 cas_1_1- inner node disablement + // 27 odr_ofs_mp_1_4- inner node disablement + // 28 b2i_ds_output_1_1- inner node disablement + // 29 odr_ofs_dp_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x783F8FFF00; + } + else if (nodeRelevantInnerOptions == (no3A | noPdaf | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 odr_dpc_pdaf_1_4- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 ifd_lsc_1_4- inner node disablement + // 7 lsc_1_2- inner node disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 bnlm_3_4- inner node disablement + // 11 bxt_demosaic- inner node disablement + // 12 vcsc_2_0_b- inner node disablement + // 13 gltm_2_0- inner node disablement + // 14 xnr_5_4- inner node disablement + // 15 vcr_3_1- inner node disablement + // 16 glim_2_0- inner node disablement + // 17 acm_1_2- inner node disablement + // 18 gammatm_v4- inner node disablement + // 19 csc_1_1- inner node disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 23 b2i_ds_1_1- inner node disablement + // 24 lbff_crop_espa_1_4- inner node disablement + // 25 image_upscaler_1_1- inner node disablement + // 26 cas_1_1- inner node disablement + // 27 odr_ofs_mp_1_4- inner node disablement + // 28 b2i_ds_output_1_1- inner node disablement + // 29 odr_ofs_dp_1_4- inner node disablement + // 30 odr_awb_std_1_4- inner node disablement + // 31 odr_awb_sat_1_4- inner node disablement + // 32 aestatistics_2_1- inner node disablement + // 33 odr_ae_1_4- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000064019D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x64019D; + // DEB - 0x000000000000E1200000F9CE8DFBFFF1 + bitmaps.deb[0] = 0x8DFBFFF1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x0000000030083F9F + bitmaps.teb[0] = 0x30083F9F; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 39; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x3F8FFF00; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x3E000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 43; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noPdaf | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x0000000000000000006400BD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E120000FF9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x00000000303A009F + bitmaps.teb[0] = 0x303A009F; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 30 odr_awb_std_1_4- inner node disablement + // 31 odr_awb_sat_1_4- inner node disablement + // 32 aestatistics_2_1- inner node disablement + // 33 odr_ae_1_4- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FC0700000; + } + else if (nodeRelevantInnerOptions == (noPdaf)) + { + // HW bitmaps + // RBM - 0x0000000000000000006400BD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E120000FF9CE8DBBF1F1 + bitmaps.deb[0] = 0x8DBBF1F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x00000000303A1E9F + bitmaps.teb[0] = 0x303A1E9F; + // REB - 0x00000000000000000000001F12F6FFE7 + bitmaps.reb[0] = 0x12F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7800000000; + } + else if (nodeRelevantInnerOptions == (no3A | noPdaf)) + { + // HW bitmaps + // RBM - 0x0000000000000000006400BD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E120000FF9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x00000000303A009F + bitmaps.teb[0] = 0x303A009F; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 30 odr_awb_std_1_4- inner node disablement + // 31 odr_awb_sat_1_4- inner node disablement + // 32 aestatistics_2_1- inner node disablement + // 33 odr_ae_1_4- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FC0700000; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x0000000000000000004401BD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x4401BD; + // DEB - 0x000000000000C120000FF9CE8DFBFFF1 + bitmaps.deb[0] = 0x8DFBFFF1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x00000000203A3F9F + bitmaps.teb[0] = 0x203A3F9F; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 27 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x8000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x0000000000000000004400BD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C120000FF9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x00000000203A009F + bitmaps.teb[0] = 0x203A009F; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 27 odr_ofs_mp_1_4- inner node disablement + // 30 odr_awb_std_1_4- inner node disablement + // 31 odr_awb_sat_1_4- inner node disablement + // 32 aestatistics_2_1- inner node disablement + // 33 odr_ae_1_4- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FC8700000; + } + else if (nodeRelevantInnerOptions == (noPdaf | noMp)) + { + // HW bitmaps + // RBM - 0x0000000000000000004400BD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C120000FF9CE8DBBF1F1 + bitmaps.deb[0] = 0x8DBBF1F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x00000000203A1E9F + bitmaps.teb[0] = 0x203A1E9F; + // REB - 0x00000000000000000000001F12F6FFE7 + bitmaps.reb[0] = 0x12F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 27 odr_ofs_mp_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7808000000; + } + else if (nodeRelevantInnerOptions == (no3A | noPdaf | noMp)) + { + // HW bitmaps + // RBM - 0x0000000000000000004400BD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C120000FF9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x00000000203A009F + bitmaps.teb[0] = 0x203A009F; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 27 odr_ofs_mp_1_4- inner node disablement + // 30 odr_awb_std_1_4- inner node disablement + // 31 odr_awb_sat_1_4- inner node disablement + // 32 aestatistics_2_1- inner node disablement + // 33 odr_ae_1_4- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FC8700000; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x0000000000000000002401BD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x2401BD; + // DEB - 0x0000000000002120000FF9CE8DFBFFF1 + bitmaps.deb[0] = 0x8DFBFFF1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x00000000103A3F9F + bitmaps.teb[0] = 0x103A3F9F; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 28 b2i_ds_output_1_1- inner node disablement + // 29 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x30000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x0000000000000000002400BD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x0000000000002120000FF9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x00000000103A009F + bitmaps.teb[0] = 0x103A009F; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 28 b2i_ds_output_1_1- inner node disablement + // 29 odr_ofs_dp_1_4- inner node disablement + // 30 odr_awb_std_1_4- inner node disablement + // 31 odr_awb_sat_1_4- inner node disablement + // 32 aestatistics_2_1- inner node disablement + // 33 odr_ae_1_4- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FF0700000; + } + else if (nodeRelevantInnerOptions == (noPdaf | noDp)) + { + // HW bitmaps + // RBM - 0x0000000000000000002400BD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x0000000000002120000FF9CE8DBBF1F1 + bitmaps.deb[0] = 0x8DBBF1F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x00000000103A1E9F + bitmaps.teb[0] = 0x103A1E9F; + // REB - 0x00000000000000000000001F12F6FFE7 + bitmaps.reb[0] = 0x12F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 28 b2i_ds_output_1_1- inner node disablement + // 29 odr_ofs_dp_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7830000000; + } + else if (nodeRelevantInnerOptions == (no3A | noPdaf | noDp)) + { + // HW bitmaps + // RBM - 0x0000000000000000002400BD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x0000000000002120000FF9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x00000000103A009F + bitmaps.teb[0] = 0x103A009F; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 28 b2i_ds_output_1_1- inner node disablement + // 29 odr_ofs_dp_1_4- inner node disablement + // 30 odr_awb_std_1_4- inner node disablement + // 31 odr_awb_sat_1_4- inner node disablement + // 32 aestatistics_2_1- inner node disablement + // 33 odr_ae_1_4- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FF0700000; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000180041E6811 + bitmaps.rbm[0] = 0x41E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001FBFFF1 + bitmaps.deb[0] = 0x1FBFFF1; + // TEB - 0x0000000000083F97 + bitmaps.teb[0] = 0x83F97; + // REB - 0x0000000000000000000000000601FFE7 + bitmaps.reb[0] = 0x601FFE7; + + // Kernels disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 bnlm_3_4- inner node disablement + // 11 bxt_demosaic- inner node disablement + // 12 vcsc_2_0_b- inner node disablement + // 13 gltm_2_0- inner node disablement + // 14 xnr_5_4- inner node disablement + // 15 vcr_3_1- inner node disablement + // 16 glim_2_0- inner node disablement + // 17 acm_1_2- inner node disablement + // 18 gammatm_v4- inner node disablement + // 19 csc_1_1- inner node disablement + // 23 b2i_ds_1_1- inner node disablement + // 24 lbff_crop_espa_1_4- inner node disablement + // 25 image_upscaler_1_1- inner node disablement + // 26 cas_1_1- inner node disablement + // 27 odr_ofs_mp_1_4- inner node disablement + // 28 b2i_ds_output_1_1- inner node disablement + // 29 odr_ofs_dp_1_4- inner node disablement + // 39 ifd_gmv_1_4- inner node disablement + // 40 gmv_statistics_1_1- inner node disablement + // 41 odr_gmv_feature_1_4- inner node disablement + // 42 odr_gmv_match_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7803F8FFF00; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 odr_dpc_pdaf_1_4- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 ifd_lsc_1_4- inner node disablement + // 7 lsc_1_2- inner node disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 bnlm_3_4- inner node disablement + // 11 bxt_demosaic- inner node disablement + // 12 vcsc_2_0_b- inner node disablement + // 13 gltm_2_0- inner node disablement + // 14 xnr_5_4- inner node disablement + // 15 vcr_3_1- inner node disablement + // 16 glim_2_0- inner node disablement + // 17 acm_1_2- inner node disablement + // 18 gammatm_v4- inner node disablement + // 19 csc_1_1- inner node disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 23 b2i_ds_1_1- inner node disablement + // 24 lbff_crop_espa_1_4- inner node disablement + // 25 image_upscaler_1_1- inner node disablement + // 26 cas_1_1- inner node disablement + // 27 odr_ofs_mp_1_4- inner node disablement + // 28 b2i_ds_output_1_1- inner node disablement + // 29 odr_ofs_dp_1_4- inner node disablement + // 30 odr_awb_std_1_4- inner node disablement + // 31 odr_awb_sat_1_4- inner node disablement + // 32 aestatistics_2_1- inner node disablement + // 33 odr_ae_1_4- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + // 39 ifd_gmv_1_4- inner node disablement + // 40 gmv_statistics_1_1- inner node disablement + // 41 odr_gmv_feature_1_4- inner node disablement + // 42 odr_gmv_match_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFFFFF; + } + else if (nodeRelevantInnerOptions == (noPdaf | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000080041E6811 + bitmaps.rbm[0] = 0x41E6811; + bitmaps.rbm[1] = 0x80; + // DEB - 0x00000000000000000000000001BBF1F1 + bitmaps.deb[0] = 0x1BBF1F1; + // TEB - 0x0000000000081E97 + bitmaps.teb[0] = 0x81E97; + // REB - 0x0000000000000000000000000200FFE7 + bitmaps.reb[0] = 0x200FFE7; + + // Kernels disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 bnlm_3_4- inner node disablement + // 11 bxt_demosaic- inner node disablement + // 12 vcsc_2_0_b- inner node disablement + // 13 gltm_2_0- inner node disablement + // 14 xnr_5_4- inner node disablement + // 15 vcr_3_1- inner node disablement + // 16 glim_2_0- inner node disablement + // 17 acm_1_2- inner node disablement + // 18 gammatm_v4- inner node disablement + // 19 csc_1_1- inner node disablement + // 23 b2i_ds_1_1- inner node disablement + // 24 lbff_crop_espa_1_4- inner node disablement + // 25 image_upscaler_1_1- inner node disablement + // 26 cas_1_1- inner node disablement + // 27 odr_ofs_mp_1_4- inner node disablement + // 28 b2i_ds_output_1_1- inner node disablement + // 29 odr_ofs_dp_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + // 39 ifd_gmv_1_4- inner node disablement + // 40 gmv_statistics_1_1- inner node disablement + // 41 odr_gmv_feature_1_4- inner node disablement + // 42 odr_gmv_match_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7F83F8FFF00; + } + else if (nodeRelevantInnerOptions == (no3A | noPdaf | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 odr_dpc_pdaf_1_4- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 ifd_lsc_1_4- inner node disablement + // 7 lsc_1_2- inner node disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 bnlm_3_4- inner node disablement + // 11 bxt_demosaic- inner node disablement + // 12 vcsc_2_0_b- inner node disablement + // 13 gltm_2_0- inner node disablement + // 14 xnr_5_4- inner node disablement + // 15 vcr_3_1- inner node disablement + // 16 glim_2_0- inner node disablement + // 17 acm_1_2- inner node disablement + // 18 gammatm_v4- inner node disablement + // 19 csc_1_1- inner node disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 23 b2i_ds_1_1- inner node disablement + // 24 lbff_crop_espa_1_4- inner node disablement + // 25 image_upscaler_1_1- inner node disablement + // 26 cas_1_1- inner node disablement + // 27 odr_ofs_mp_1_4- inner node disablement + // 28 b2i_ds_output_1_1- inner node disablement + // 29 odr_ofs_dp_1_4- inner node disablement + // 30 odr_awb_std_1_4- inner node disablement + // 31 odr_awb_sat_1_4- inner node disablement + // 32 aestatistics_2_1- inner node disablement + // 33 odr_ae_1_4- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + // 39 ifd_gmv_1_4- inner node disablement + // 40 gmv_statistics_1_1- inner node disablement + // 41 odr_gmv_feature_1_4- inner node disablement + // 42 odr_gmv_match_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x0000000000000000006401BD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x6401BD; + // DEB - 0x000000000000E120000FF9CE8DFBFFF1 + bitmaps.deb[0] = 0x8DFBFFF1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x00000000303A3F9F + bitmaps.teb[0] = 0x303A3F9F; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 43; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x7803F8FFF00; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x3E000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 51; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noPdaf | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FC9D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E13E79F0F9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC8009F + bitmaps.teb[0] = 0x3FC8009F; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 27 odr_awb_std_1_4- inner node disablement + // 28 odr_awb_sat_1_4- inner node disablement + // 29 aestatistics_2_1- inner node disablement + // 30 odr_ae_1_4- inner node disablement + // 31 odr_af_std_1_4- inner node disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFF8700000; + } + else if (nodeRelevantInnerOptions == (noPdaf)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FC9D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E13E79F0F9CE8DBBF1F1 + bitmaps.deb[0] = 0x8DBBF1F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC81E9F + bitmaps.teb[0] = 0x3FC81E9F; + // REB - 0x00000000000000000000001FF2F6FFE7 + bitmaps.reb[0] = 0xF2F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xF00000000; + } + else if (nodeRelevantInnerOptions == (no3A | noPdaf)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FC9D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E13E79F0F9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC8009F + bitmaps.teb[0] = 0x3FC8009F; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 27 odr_awb_std_1_4- inner node disablement + // 28 odr_awb_sat_1_4- inner node disablement + // 29 aestatistics_2_1- inner node disablement + // 30 odr_ae_1_4- inner node disablement + // 31 odr_af_std_1_4- inner node disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFF8700000; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FD9D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x47FD9D; + // DEB - 0x000000000000C13E79F0F9CE8DFBFFF1 + bitmaps.deb[0] = 0x8DFBFFF1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC83F9F + bitmaps.teb[0] = 0x2FC83F9F; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 47 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x800000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C13E79F0F9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC8009F + bitmaps.teb[0] = 0x2FC8009F; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 27 odr_awb_std_1_4- inner node disablement + // 28 odr_awb_sat_1_4- inner node disablement + // 29 aestatistics_2_1- inner node disablement + // 30 odr_ae_1_4- inner node disablement + // 31 odr_af_std_1_4- inner node disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + // 47 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x800FF8700000; + } + else if (nodeRelevantInnerOptions == (noPdaf | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C13E79F0F9CE8DBBF1F1 + bitmaps.deb[0] = 0x8DBBF1F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC81E9F + bitmaps.teb[0] = 0x2FC81E9F; + // REB - 0x00000000000000000000001FF2F6FFE7 + bitmaps.reb[0] = 0xF2F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + // 47 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x800F00000000; + } + else if (nodeRelevantInnerOptions == (no3A | noPdaf | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C13E79F0F9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC8009F + bitmaps.teb[0] = 0x2FC8009F; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 27 odr_awb_std_1_4- inner node disablement + // 28 odr_awb_sat_1_4- inner node disablement + // 29 aestatistics_2_1- inner node disablement + // 30 odr_ae_1_4- inner node disablement + // 31 odr_af_std_1_4- inner node disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + // 47 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x800FF8700000; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FD9D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x27FD9D; + // DEB - 0x000000000000213E79F0F9CE8DFBFFF1 + bitmaps.deb[0] = 0x8DFBFFF1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC83F9F + bitmaps.teb[0] = 0x1FC83F9F; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 48 b2i_ds_output_1_1- inner node disablement + // 49 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x000000000000213E79F0F9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC8009F + bitmaps.teb[0] = 0x1FC8009F; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 27 odr_awb_std_1_4- inner node disablement + // 28 odr_awb_sat_1_4- inner node disablement + // 29 aestatistics_2_1- inner node disablement + // 30 odr_ae_1_4- inner node disablement + // 31 odr_af_std_1_4- inner node disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + // 48 b2i_ds_output_1_1- inner node disablement + // 49 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3000FF8700000; + } + else if (nodeRelevantInnerOptions == (noPdaf | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x000000000000213E79F0F9CE8DBBF1F1 + bitmaps.deb[0] = 0x8DBBF1F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC81E9F + bitmaps.teb[0] = 0x1FC81E9F; + // REB - 0x00000000000000000000001FF2F6FFE7 + bitmaps.reb[0] = 0xF2F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + // 48 b2i_ds_output_1_1- inner node disablement + // 49 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3000F00000000; + } + else if (nodeRelevantInnerOptions == (no3A | noPdaf | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x000000000000213E79F0F9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC8009F + bitmaps.teb[0] = 0x1FC8009F; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 27 odr_awb_std_1_4- inner node disablement + // 28 odr_awb_sat_1_4- inner node disablement + // 29 aestatistics_2_1- inner node disablement + // 30 odr_ae_1_4- inner node disablement + // 31 odr_af_std_1_4- inner node disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + // 48 b2i_ds_output_1_1- inner node disablement + // 49 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3000FF8700000; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000180041E6811 + bitmaps.rbm[0] = 0x41E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001FBFFF1 + bitmaps.deb[0] = 0x1FBFFF1; + // TEB - 0x0000000000083F97 + bitmaps.teb[0] = 0x83F97; + // REB - 0x0000000000000000000000000601FFE7 + bitmaps.reb[0] = 0x601FFE7; + + // Kernels disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 bnlm_3_4- inner node disablement + // 11 bxt_demosaic- inner node disablement + // 12 vcsc_2_0_b- inner node disablement + // 13 gltm_2_0- inner node disablement + // 14 xnr_5_4- inner node disablement + // 15 vcr_3_1- inner node disablement + // 16 glim_2_0- inner node disablement + // 17 acm_1_2- inner node disablement + // 18 gammatm_v4- inner node disablement + // 19 csc_1_1- inner node disablement + // 23 b2i_ds_1_1- inner node disablement + // 24 lbff_crop_espa_1_4- inner node disablement + // 25 tnr7_spatial_1_1- inner node disablement + // 26 tnr_scaler_lb_1_1- inner node disablement + // 36 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 37 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 38 tnr7_ims_1_2- inner node disablement + // 39 tnr7_bc_1_2- inner node disablement + // 40 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 41 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 42 tnr7_blend_1_1- inner node disablement + // 43 odr_tnr_fp_yuvn_1_4- inner node disablement + // 44 tnr_scaler_fp_1_1- inner node disablement + // 45 image_upscaler_1_1- inner node disablement + // 46 cas_1_1- inner node disablement + // 47 odr_ofs_mp_1_4- inner node disablement + // 48 b2i_ds_output_1_1- inner node disablement + // 49 odr_ofs_dp_1_4- inner node disablement + // 50 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFF0078FFF00; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 odr_dpc_pdaf_1_4- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 ifd_lsc_1_4- inner node disablement + // 7 lsc_1_2- inner node disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 bnlm_3_4- inner node disablement + // 11 bxt_demosaic- inner node disablement + // 12 vcsc_2_0_b- inner node disablement + // 13 gltm_2_0- inner node disablement + // 14 xnr_5_4- inner node disablement + // 15 vcr_3_1- inner node disablement + // 16 glim_2_0- inner node disablement + // 17 acm_1_2- inner node disablement + // 18 gammatm_v4- inner node disablement + // 19 csc_1_1- inner node disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 23 b2i_ds_1_1- inner node disablement + // 24 lbff_crop_espa_1_4- inner node disablement + // 25 tnr7_spatial_1_1- inner node disablement + // 26 tnr_scaler_lb_1_1- inner node disablement + // 27 odr_awb_std_1_4- inner node disablement + // 28 odr_awb_sat_1_4- inner node disablement + // 29 aestatistics_2_1- inner node disablement + // 30 odr_ae_1_4- inner node disablement + // 31 odr_af_std_1_4- inner node disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + // 36 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 37 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 38 tnr7_ims_1_2- inner node disablement + // 39 tnr7_bc_1_2- inner node disablement + // 40 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 41 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 42 tnr7_blend_1_1- inner node disablement + // 43 odr_tnr_fp_yuvn_1_4- inner node disablement + // 44 tnr_scaler_fp_1_1- inner node disablement + // 45 image_upscaler_1_1- inner node disablement + // 46 cas_1_1- inner node disablement + // 47 odr_ofs_mp_1_4- inner node disablement + // 48 b2i_ds_output_1_1- inner node disablement + // 49 odr_ofs_dp_1_4- inner node disablement + // 50 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFFFFFFF; + } + else if (nodeRelevantInnerOptions == (noPdaf | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000080041E6811 + bitmaps.rbm[0] = 0x41E6811; + bitmaps.rbm[1] = 0x80; + // DEB - 0x00000000000000000000000001BBF1F1 + bitmaps.deb[0] = 0x1BBF1F1; + // TEB - 0x0000000000081E97 + bitmaps.teb[0] = 0x81E97; + // REB - 0x0000000000000000000000000200FFE7 + bitmaps.reb[0] = 0x200FFE7; + + // Kernels disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 bnlm_3_4- inner node disablement + // 11 bxt_demosaic- inner node disablement + // 12 vcsc_2_0_b- inner node disablement + // 13 gltm_2_0- inner node disablement + // 14 xnr_5_4- inner node disablement + // 15 vcr_3_1- inner node disablement + // 16 glim_2_0- inner node disablement + // 17 acm_1_2- inner node disablement + // 18 gammatm_v4- inner node disablement + // 19 csc_1_1- inner node disablement + // 23 b2i_ds_1_1- inner node disablement + // 24 lbff_crop_espa_1_4- inner node disablement + // 25 tnr7_spatial_1_1- inner node disablement + // 26 tnr_scaler_lb_1_1- inner node disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + // 36 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 37 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 38 tnr7_ims_1_2- inner node disablement + // 39 tnr7_bc_1_2- inner node disablement + // 40 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 41 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 42 tnr7_blend_1_1- inner node disablement + // 43 odr_tnr_fp_yuvn_1_4- inner node disablement + // 44 tnr_scaler_fp_1_1- inner node disablement + // 45 image_upscaler_1_1- inner node disablement + // 46 cas_1_1- inner node disablement + // 47 odr_ofs_mp_1_4- inner node disablement + // 48 b2i_ds_output_1_1- inner node disablement + // 49 odr_ofs_dp_1_4- inner node disablement + // 50 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFF078FFF00; + } + else if (nodeRelevantInnerOptions == (no3A | noPdaf | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 odr_dpc_pdaf_1_4- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 ifd_lsc_1_4- inner node disablement + // 7 lsc_1_2- inner node disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 bnlm_3_4- inner node disablement + // 11 bxt_demosaic- inner node disablement + // 12 vcsc_2_0_b- inner node disablement + // 13 gltm_2_0- inner node disablement + // 14 xnr_5_4- inner node disablement + // 15 vcr_3_1- inner node disablement + // 16 glim_2_0- inner node disablement + // 17 acm_1_2- inner node disablement + // 18 gammatm_v4- inner node disablement + // 19 csc_1_1- inner node disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 23 b2i_ds_1_1- inner node disablement + // 24 lbff_crop_espa_1_4- inner node disablement + // 25 tnr7_spatial_1_1- inner node disablement + // 26 tnr_scaler_lb_1_1- inner node disablement + // 27 odr_awb_std_1_4- inner node disablement + // 28 odr_awb_sat_1_4- inner node disablement + // 29 aestatistics_2_1- inner node disablement + // 30 odr_ae_1_4- inner node disablement + // 31 odr_af_std_1_4- inner node disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + // 36 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 37 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 38 tnr7_ims_1_2- inner node disablement + // 39 tnr7_bc_1_2- inner node disablement + // 40 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 41 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 42 tnr7_blend_1_1- inner node disablement + // 43 odr_tnr_fp_yuvn_1_4- inner node disablement + // 44 tnr_scaler_fp_1_1- inner node disablement + // 45 image_upscaler_1_1- inner node disablement + // 46 cas_1_1- inner node disablement + // 47 odr_ofs_mp_1_4- inner node disablement + // 48 b2i_ds_output_1_1- inner node disablement + // 49 odr_ofs_dp_1_4- inner node disablement + // 50 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000067FD9D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x67FD9D; + // DEB - 0x000000000000E13E79F0F9CE8DFBFFF1 + bitmaps.deb[0] = 0x8DFBFFF1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC83F9F + bitmaps.teb[0] = 0x3FC83F9F; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 51; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x7FFF0078FFF00; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x3E00000000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 55; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noPdaf | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FCBD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E13E79FFF9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FFA009F + bitmaps.teb[0] = 0x3FFA009F; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 27 odr_awb_std_1_4- inner node disablement + // 28 odr_awb_sat_1_4- inner node disablement + // 29 aestatistics_2_1- inner node disablement + // 30 odr_ae_1_4- inner node disablement + // 31 odr_af_std_1_4- inner node disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFF8700000; + } + else if (nodeRelevantInnerOptions == (noPdaf)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FCBD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E13E79FFF9CE8DBBF1F1 + bitmaps.deb[0] = 0x8DBBF1F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FFA1E9F + bitmaps.teb[0] = 0x3FFA1E9F; + // REB - 0x00000000000000000000001FF2F6FFE7 + bitmaps.reb[0] = 0xF2F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xF00000000; + } + else if (nodeRelevantInnerOptions == (no3A | noPdaf)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FCBD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E13E79FFF9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FFA009F + bitmaps.teb[0] = 0x3FFA009F; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 27 odr_awb_std_1_4- inner node disablement + // 28 odr_awb_sat_1_4- inner node disablement + // 29 aestatistics_2_1- inner node disablement + // 30 odr_ae_1_4- inner node disablement + // 31 odr_af_std_1_4- inner node disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFF8700000; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FDBD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x47FDBD; + // DEB - 0x000000000000C13E79FFF9CE8DFBFFF1 + bitmaps.deb[0] = 0x8DFBFFF1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FFA3F9F + bitmaps.teb[0] = 0x2FFA3F9F; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 51 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x8000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C13E79FFF9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FFA009F + bitmaps.teb[0] = 0x2FFA009F; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 27 odr_awb_std_1_4- inner node disablement + // 28 odr_awb_sat_1_4- inner node disablement + // 29 aestatistics_2_1- inner node disablement + // 30 odr_ae_1_4- inner node disablement + // 31 odr_af_std_1_4- inner node disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + // 51 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x8000FF8700000; + } + else if (nodeRelevantInnerOptions == (noPdaf | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C13E79FFF9CE8DBBF1F1 + bitmaps.deb[0] = 0x8DBBF1F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FFA1E9F + bitmaps.teb[0] = 0x2FFA1E9F; + // REB - 0x00000000000000000000001FF2F6FFE7 + bitmaps.reb[0] = 0xF2F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + // 51 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x8000F00000000; + } + else if (nodeRelevantInnerOptions == (no3A | noPdaf | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C13E79FFF9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FFA009F + bitmaps.teb[0] = 0x2FFA009F; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 27 odr_awb_std_1_4- inner node disablement + // 28 odr_awb_sat_1_4- inner node disablement + // 29 aestatistics_2_1- inner node disablement + // 30 odr_ae_1_4- inner node disablement + // 31 odr_af_std_1_4- inner node disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + // 51 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x8000FF8700000; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FDBD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x27FDBD; + // DEB - 0x000000000000213E79FFF9CE8DFBFFF1 + bitmaps.deb[0] = 0x8DFBFFF1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FFA3F9F + bitmaps.teb[0] = 0x1FFA3F9F; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 52 b2i_ds_output_1_1- inner node disablement + // 53 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x30000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x000000000000213E79FFF9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FFA009F + bitmaps.teb[0] = 0x1FFA009F; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 27 odr_awb_std_1_4- inner node disablement + // 28 odr_awb_sat_1_4- inner node disablement + // 29 aestatistics_2_1- inner node disablement + // 30 odr_ae_1_4- inner node disablement + // 31 odr_af_std_1_4- inner node disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + // 52 b2i_ds_output_1_1- inner node disablement + // 53 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x30000FF8700000; + } + else if (nodeRelevantInnerOptions == (noPdaf | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x000000000000213E79FFF9CE8DBBF1F1 + bitmaps.deb[0] = 0x8DBBF1F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FFA1E9F + bitmaps.teb[0] = 0x1FFA1E9F; + // REB - 0x00000000000000000000001FF2F6FFE7 + bitmaps.reb[0] = 0xF2F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + // 52 b2i_ds_output_1_1- inner node disablement + // 53 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x30000F00000000; + } + else if (nodeRelevantInnerOptions == (no3A | noPdaf | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x000000000000213E79FFF9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FFA009F + bitmaps.teb[0] = 0x1FFA009F; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 27 odr_awb_std_1_4- inner node disablement + // 28 odr_awb_sat_1_4- inner node disablement + // 29 aestatistics_2_1- inner node disablement + // 30 odr_ae_1_4- inner node disablement + // 31 odr_af_std_1_4- inner node disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + // 52 b2i_ds_output_1_1- inner node disablement + // 53 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x30000FF8700000; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000180041E6811 + bitmaps.rbm[0] = 0x41E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001FBFFF1 + bitmaps.deb[0] = 0x1FBFFF1; + // TEB - 0x0000000000083F97 + bitmaps.teb[0] = 0x83F97; + // REB - 0x0000000000000000000000000601FFE7 + bitmaps.reb[0] = 0x601FFE7; + + // Kernels disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 bnlm_3_4- inner node disablement + // 11 bxt_demosaic- inner node disablement + // 12 vcsc_2_0_b- inner node disablement + // 13 gltm_2_0- inner node disablement + // 14 xnr_5_4- inner node disablement + // 15 vcr_3_1- inner node disablement + // 16 glim_2_0- inner node disablement + // 17 acm_1_2- inner node disablement + // 18 gammatm_v4- inner node disablement + // 19 csc_1_1- inner node disablement + // 23 b2i_ds_1_1- inner node disablement + // 24 lbff_crop_espa_1_4- inner node disablement + // 25 tnr7_spatial_1_1- inner node disablement + // 26 tnr_scaler_lb_1_1- inner node disablement + // 36 ifd_gmv_1_4- inner node disablement + // 37 gmv_statistics_1_1- inner node disablement + // 38 odr_gmv_feature_1_4- inner node disablement + // 39 odr_gmv_match_1_4- inner node disablement + // 40 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 41 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 42 tnr7_ims_1_2- inner node disablement + // 43 tnr7_bc_1_2- inner node disablement + // 44 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 45 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 46 tnr7_blend_1_1- inner node disablement + // 47 odr_tnr_fp_yuvn_1_4- inner node disablement + // 48 tnr_scaler_fp_1_1- inner node disablement + // 49 image_upscaler_1_1- inner node disablement + // 50 cas_1_1- inner node disablement + // 51 odr_ofs_mp_1_4- inner node disablement + // 52 b2i_ds_output_1_1- inner node disablement + // 53 odr_ofs_dp_1_4- inner node disablement + // 54 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFF0078FFF00; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 odr_dpc_pdaf_1_4- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 ifd_lsc_1_4- inner node disablement + // 7 lsc_1_2- inner node disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 bnlm_3_4- inner node disablement + // 11 bxt_demosaic- inner node disablement + // 12 vcsc_2_0_b- inner node disablement + // 13 gltm_2_0- inner node disablement + // 14 xnr_5_4- inner node disablement + // 15 vcr_3_1- inner node disablement + // 16 glim_2_0- inner node disablement + // 17 acm_1_2- inner node disablement + // 18 gammatm_v4- inner node disablement + // 19 csc_1_1- inner node disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 23 b2i_ds_1_1- inner node disablement + // 24 lbff_crop_espa_1_4- inner node disablement + // 25 tnr7_spatial_1_1- inner node disablement + // 26 tnr_scaler_lb_1_1- inner node disablement + // 27 odr_awb_std_1_4- inner node disablement + // 28 odr_awb_sat_1_4- inner node disablement + // 29 aestatistics_2_1- inner node disablement + // 30 odr_ae_1_4- inner node disablement + // 31 odr_af_std_1_4- inner node disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + // 36 ifd_gmv_1_4- inner node disablement + // 37 gmv_statistics_1_1- inner node disablement + // 38 odr_gmv_feature_1_4- inner node disablement + // 39 odr_gmv_match_1_4- inner node disablement + // 40 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 41 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 42 tnr7_ims_1_2- inner node disablement + // 43 tnr7_bc_1_2- inner node disablement + // 44 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 45 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 46 tnr7_blend_1_1- inner node disablement + // 47 odr_tnr_fp_yuvn_1_4- inner node disablement + // 48 tnr_scaler_fp_1_1- inner node disablement + // 49 image_upscaler_1_1- inner node disablement + // 50 cas_1_1- inner node disablement + // 51 odr_ofs_mp_1_4- inner node disablement + // 52 b2i_ds_output_1_1- inner node disablement + // 53 odr_ofs_dp_1_4- inner node disablement + // 54 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFFFFFFFF; + } + else if (nodeRelevantInnerOptions == (noPdaf | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000080041E6811 + bitmaps.rbm[0] = 0x41E6811; + bitmaps.rbm[1] = 0x80; + // DEB - 0x00000000000000000000000001BBF1F1 + bitmaps.deb[0] = 0x1BBF1F1; + // TEB - 0x0000000000081E97 + bitmaps.teb[0] = 0x81E97; + // REB - 0x0000000000000000000000000200FFE7 + bitmaps.reb[0] = 0x200FFE7; + + // Kernels disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 bnlm_3_4- inner node disablement + // 11 bxt_demosaic- inner node disablement + // 12 vcsc_2_0_b- inner node disablement + // 13 gltm_2_0- inner node disablement + // 14 xnr_5_4- inner node disablement + // 15 vcr_3_1- inner node disablement + // 16 glim_2_0- inner node disablement + // 17 acm_1_2- inner node disablement + // 18 gammatm_v4- inner node disablement + // 19 csc_1_1- inner node disablement + // 23 b2i_ds_1_1- inner node disablement + // 24 lbff_crop_espa_1_4- inner node disablement + // 25 tnr7_spatial_1_1- inner node disablement + // 26 tnr_scaler_lb_1_1- inner node disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + // 36 ifd_gmv_1_4- inner node disablement + // 37 gmv_statistics_1_1- inner node disablement + // 38 odr_gmv_feature_1_4- inner node disablement + // 39 odr_gmv_match_1_4- inner node disablement + // 40 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 41 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 42 tnr7_ims_1_2- inner node disablement + // 43 tnr7_bc_1_2- inner node disablement + // 44 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 45 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 46 tnr7_blend_1_1- inner node disablement + // 47 odr_tnr_fp_yuvn_1_4- inner node disablement + // 48 tnr_scaler_fp_1_1- inner node disablement + // 49 image_upscaler_1_1- inner node disablement + // 50 cas_1_1- inner node disablement + // 51 odr_ofs_mp_1_4- inner node disablement + // 52 b2i_ds_output_1_1- inner node disablement + // 53 odr_ofs_dp_1_4- inner node disablement + // 54 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFF078FFF00; + } + else if (nodeRelevantInnerOptions == (no3A | noPdaf | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 odr_dpc_pdaf_1_4- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 ifd_lsc_1_4- inner node disablement + // 7 lsc_1_2- inner node disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 bnlm_3_4- inner node disablement + // 11 bxt_demosaic- inner node disablement + // 12 vcsc_2_0_b- inner node disablement + // 13 gltm_2_0- inner node disablement + // 14 xnr_5_4- inner node disablement + // 15 vcr_3_1- inner node disablement + // 16 glim_2_0- inner node disablement + // 17 acm_1_2- inner node disablement + // 18 gammatm_v4- inner node disablement + // 19 csc_1_1- inner node disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 23 b2i_ds_1_1- inner node disablement + // 24 lbff_crop_espa_1_4- inner node disablement + // 25 tnr7_spatial_1_1- inner node disablement + // 26 tnr_scaler_lb_1_1- inner node disablement + // 27 odr_awb_std_1_4- inner node disablement + // 28 odr_awb_sat_1_4- inner node disablement + // 29 aestatistics_2_1- inner node disablement + // 30 odr_ae_1_4- inner node disablement + // 31 odr_af_std_1_4- inner node disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + // 36 ifd_gmv_1_4- inner node disablement + // 37 gmv_statistics_1_1- inner node disablement + // 38 odr_gmv_feature_1_4- inner node disablement + // 39 odr_gmv_match_1_4- inner node disablement + // 40 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 41 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 42 tnr7_ims_1_2- inner node disablement + // 43 tnr7_bc_1_2- inner node disablement + // 44 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 45 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 46 tnr7_blend_1_1- inner node disablement + // 47 odr_tnr_fp_yuvn_1_4- inner node disablement + // 48 tnr_scaler_fp_1_1- inner node disablement + // 49 image_upscaler_1_1- inner node disablement + // 50 cas_1_1- inner node disablement + // 51 odr_ofs_mp_1_4- inner node disablement + // 52 b2i_ds_output_1_1- inner node disablement + // 53 odr_ofs_dp_1_4- inner node disablement + // 54 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000067FDBD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x67FDBD; + // DEB - 0x000000000000E13E79FFF9CE8DFBFFF1 + bitmaps.deb[0] = 0x8DFBFFF1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FFA3F9F + bitmaps.teb[0] = 0x3FFA3F9F; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 55; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x7FFFF0078FFF00; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x3E000000000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 67; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noPdaf | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FCBD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E1FFFFFFFFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFFA009F + bitmaps.teb[0] = 0xFFFA009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFC00; + } + else if (nodeRelevantInnerOptions == (noPdaf)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FCBD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E1FFFFFFFFFEEDBBF1F1 + bitmaps.deb[0] = 0xEDBBF1F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFFA1E9F + bitmaps.teb[0] = 0xFFFA1E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F6FFE7 + bitmaps.reb[0] = 0xF2F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3C0000; + } + else if (nodeRelevantInnerOptions == (no3A | noPdaf)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FCBD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E1FFFFFFFFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFFA009F + bitmaps.teb[0] = 0xFFFA009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFC00; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FDBD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x47FDBD; + // DEB - 0x000000000000C1FFFFFFFFFEEDFBFFF1 + bitmaps.deb[0] = 0xEDFBFFF1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFFA3F9F + bitmaps.teb[0] = 0xEFFA3F9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 64 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[1] = 0x1; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C1FFFFFFFFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFFA009F + bitmaps.teb[0] = 0xEFFA009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 64 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFC00; + disabledRunKernelsBitmap[1] = 0x1; + } + else if (nodeRelevantInnerOptions == (noPdaf | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C1FFFFFFFFFEEDBBF1F1 + bitmaps.deb[0] = 0xEDBBF1F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFFA1E9F + bitmaps.teb[0] = 0xEFFA1E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F6FFE7 + bitmaps.reb[0] = 0xF2F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 64 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3C0000; + disabledRunKernelsBitmap[1] = 0x1; + } + else if (nodeRelevantInnerOptions == (no3A | noPdaf | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C1FFFFFFFFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFFA009F + bitmaps.teb[0] = 0xEFFA009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 64 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFC00; + disabledRunKernelsBitmap[1] = 0x1; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FDBD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x27FDBD; + // DEB - 0x00000000000021FFFFFFFFFEEDFBFFF1 + bitmaps.deb[0] = 0xEDFBFFF1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFFA3F9F + bitmaps.teb[0] = 0xDFFA3F9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 65 b2i_ds_output_1_1- inner node disablement + // 66 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[1] = 0x6; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x00000000000021FFFFFFFFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFFA009F + bitmaps.teb[0] = 0xDFFA009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 65 b2i_ds_output_1_1- inner node disablement + // 66 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFC00; + disabledRunKernelsBitmap[1] = 0x6; + } + else if (nodeRelevantInnerOptions == (noPdaf | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x00000000000021FFFFFFFFFEEDBBF1F1 + bitmaps.deb[0] = 0xEDBBF1F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFFA1E9F + bitmaps.teb[0] = 0xDFFA1E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F6FFE7 + bitmaps.reb[0] = 0xF2F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 65 b2i_ds_output_1_1- inner node disablement + // 66 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3C0000; + disabledRunKernelsBitmap[1] = 0x6; + } + else if (nodeRelevantInnerOptions == (no3A | noPdaf | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x00000000000021FFFFFFFFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFFA009F + bitmaps.teb[0] = 0xDFFA009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 65 b2i_ds_output_1_1- inner node disablement + // 66 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFC00; + disabledRunKernelsBitmap[1] = 0x6; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000180041E6811 + bitmaps.rbm[0] = 0x41E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001FBFFF1 + bitmaps.deb[0] = 0x1FBFFF1; + // TEB - 0x0000000000083F97 + bitmaps.teb[0] = 0x83F97; + // REB - 0x0000000000000000000000000601FFE7 + bitmaps.reb[0] = 0x601FFE7; + + // Kernels disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 22 ifd_gmv_1_4- inner node disablement + // 23 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 24 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 25 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 26 ifd_segmap_bnlm_1_4- inner node disablement + // 27 smurf_bnlm_1_0- inner node disablement + // 28 bnlm_3_4- inner node disablement + // 29 bxt_demosaic- inner node disablement + // 30 vcsc_2_0_b- inner node disablement + // 31 gltm_2_0- inner node disablement + // 32 ifd_segmap_xnr_1_4- inner node disablement + // 33 smurf_xnr_1_0- inner node disablement + // 34 xnr_5_4- inner node disablement + // 35 vcr_3_1- inner node disablement + // 36 glim_2_0- inner node disablement + // 37 ifd_segmap_acm_1_4- inner node disablement + // 38 smurf_acm_1_0- inner node disablement + // 39 acm_1_2- inner node disablement + // 40 gammatm_v4- inner node disablement + // 41 csc_1_1- inner node disablement + // 42 b2i_ds_1_1- inner node disablement + // 43 lbff_crop_espa_1_4- inner node disablement + // 44 tnr7_spatial_1_1- inner node disablement + // 45 tnr_scaler_lb_1_1- inner node disablement + // 46 tnr7_ims_1_2- inner node disablement + // 47 gmv_statistics_1_1- inner node disablement + // 48 odr_gmv_feature_1_4- inner node disablement + // 49 odr_gmv_match_1_4- inner node disablement + // 50 ifd_segmap_tnr_bc_1_4- inner node disablement + // 51 smurf_tnr_bc_1_0- inner node disablement + // 52 tnr7_bc_1_2- inner node disablement + // 53 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 54 ifd_segmap_tnr_blend_1_4- inner node disablement + // 55 smurf_tnr_blend_1_0- inner node disablement + // 56 tnr7_blend_1_1- inner node disablement + // 57 odr_tnr_fp_yuvn_1_4- inner node disablement + // 58 tnr_scaler_fp_1_1- inner node disablement + // 59 image_upscaler_1_1- inner node disablement + // 60 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 61 ifd_segmap_cas_1_4- inner node disablement + // 62 smurf_cas_1_0- inner node disablement + // 63 cas_1_1- inner node disablement + // 64 odr_ofs_mp_1_4- inner node disablement + // 65 b2i_ds_output_1_1- inner node disablement + // 66 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFC00300; + disabledRunKernelsBitmap[1] = 0x7; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 odr_dpc_pdaf_1_4- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 ifd_lsc_1_4- inner node disablement + // 7 lsc_1_2- inner node disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 22 ifd_gmv_1_4- inner node disablement + // 23 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 24 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 25 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 26 ifd_segmap_bnlm_1_4- inner node disablement + // 27 smurf_bnlm_1_0- inner node disablement + // 28 bnlm_3_4- inner node disablement + // 29 bxt_demosaic- inner node disablement + // 30 vcsc_2_0_b- inner node disablement + // 31 gltm_2_0- inner node disablement + // 32 ifd_segmap_xnr_1_4- inner node disablement + // 33 smurf_xnr_1_0- inner node disablement + // 34 xnr_5_4- inner node disablement + // 35 vcr_3_1- inner node disablement + // 36 glim_2_0- inner node disablement + // 37 ifd_segmap_acm_1_4- inner node disablement + // 38 smurf_acm_1_0- inner node disablement + // 39 acm_1_2- inner node disablement + // 40 gammatm_v4- inner node disablement + // 41 csc_1_1- inner node disablement + // 42 b2i_ds_1_1- inner node disablement + // 43 lbff_crop_espa_1_4- inner node disablement + // 44 tnr7_spatial_1_1- inner node disablement + // 45 tnr_scaler_lb_1_1- inner node disablement + // 46 tnr7_ims_1_2- inner node disablement + // 47 gmv_statistics_1_1- inner node disablement + // 48 odr_gmv_feature_1_4- inner node disablement + // 49 odr_gmv_match_1_4- inner node disablement + // 50 ifd_segmap_tnr_bc_1_4- inner node disablement + // 51 smurf_tnr_bc_1_0- inner node disablement + // 52 tnr7_bc_1_2- inner node disablement + // 53 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 54 ifd_segmap_tnr_blend_1_4- inner node disablement + // 55 smurf_tnr_blend_1_0- inner node disablement + // 56 tnr7_blend_1_1- inner node disablement + // 57 odr_tnr_fp_yuvn_1_4- inner node disablement + // 58 tnr_scaler_fp_1_1- inner node disablement + // 59 image_upscaler_1_1- inner node disablement + // 60 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 61 ifd_segmap_cas_1_4- inner node disablement + // 62 smurf_cas_1_0- inner node disablement + // 63 cas_1_1- inner node disablement + // 64 odr_ofs_mp_1_4- inner node disablement + // 65 b2i_ds_output_1_1- inner node disablement + // 66 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFFFFFFF; + disabledRunKernelsBitmap[1] = 0x7; + } + else if (nodeRelevantInnerOptions == (noPdaf | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000080041E6811 + bitmaps.rbm[0] = 0x41E6811; + bitmaps.rbm[1] = 0x80; + // DEB - 0x00000000000000000000000001BBF1F1 + bitmaps.deb[0] = 0x1BBF1F1; + // TEB - 0x0000000000081E97 + bitmaps.teb[0] = 0x81E97; + // REB - 0x0000000000000000000000000200FFE7 + bitmaps.reb[0] = 0x200FFE7; + + // Kernels disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 22 ifd_gmv_1_4- inner node disablement + // 23 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 24 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 25 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 26 ifd_segmap_bnlm_1_4- inner node disablement + // 27 smurf_bnlm_1_0- inner node disablement + // 28 bnlm_3_4- inner node disablement + // 29 bxt_demosaic- inner node disablement + // 30 vcsc_2_0_b- inner node disablement + // 31 gltm_2_0- inner node disablement + // 32 ifd_segmap_xnr_1_4- inner node disablement + // 33 smurf_xnr_1_0- inner node disablement + // 34 xnr_5_4- inner node disablement + // 35 vcr_3_1- inner node disablement + // 36 glim_2_0- inner node disablement + // 37 ifd_segmap_acm_1_4- inner node disablement + // 38 smurf_acm_1_0- inner node disablement + // 39 acm_1_2- inner node disablement + // 40 gammatm_v4- inner node disablement + // 41 csc_1_1- inner node disablement + // 42 b2i_ds_1_1- inner node disablement + // 43 lbff_crop_espa_1_4- inner node disablement + // 44 tnr7_spatial_1_1- inner node disablement + // 45 tnr_scaler_lb_1_1- inner node disablement + // 46 tnr7_ims_1_2- inner node disablement + // 47 gmv_statistics_1_1- inner node disablement + // 48 odr_gmv_feature_1_4- inner node disablement + // 49 odr_gmv_match_1_4- inner node disablement + // 50 ifd_segmap_tnr_bc_1_4- inner node disablement + // 51 smurf_tnr_bc_1_0- inner node disablement + // 52 tnr7_bc_1_2- inner node disablement + // 53 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 54 ifd_segmap_tnr_blend_1_4- inner node disablement + // 55 smurf_tnr_blend_1_0- inner node disablement + // 56 tnr7_blend_1_1- inner node disablement + // 57 odr_tnr_fp_yuvn_1_4- inner node disablement + // 58 tnr_scaler_fp_1_1- inner node disablement + // 59 image_upscaler_1_1- inner node disablement + // 60 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 61 ifd_segmap_cas_1_4- inner node disablement + // 62 smurf_cas_1_0- inner node disablement + // 63 cas_1_1- inner node disablement + // 64 odr_ofs_mp_1_4- inner node disablement + // 65 b2i_ds_output_1_1- inner node disablement + // 66 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFFC0300; + disabledRunKernelsBitmap[1] = 0x7; + } + else if (nodeRelevantInnerOptions == (no3A | noPdaf | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 odr_dpc_pdaf_1_4- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 ifd_lsc_1_4- inner node disablement + // 7 lsc_1_2- inner node disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 22 ifd_gmv_1_4- inner node disablement + // 23 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 24 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 25 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 26 ifd_segmap_bnlm_1_4- inner node disablement + // 27 smurf_bnlm_1_0- inner node disablement + // 28 bnlm_3_4- inner node disablement + // 29 bxt_demosaic- inner node disablement + // 30 vcsc_2_0_b- inner node disablement + // 31 gltm_2_0- inner node disablement + // 32 ifd_segmap_xnr_1_4- inner node disablement + // 33 smurf_xnr_1_0- inner node disablement + // 34 xnr_5_4- inner node disablement + // 35 vcr_3_1- inner node disablement + // 36 glim_2_0- inner node disablement + // 37 ifd_segmap_acm_1_4- inner node disablement + // 38 smurf_acm_1_0- inner node disablement + // 39 acm_1_2- inner node disablement + // 40 gammatm_v4- inner node disablement + // 41 csc_1_1- inner node disablement + // 42 b2i_ds_1_1- inner node disablement + // 43 lbff_crop_espa_1_4- inner node disablement + // 44 tnr7_spatial_1_1- inner node disablement + // 45 tnr_scaler_lb_1_1- inner node disablement + // 46 tnr7_ims_1_2- inner node disablement + // 47 gmv_statistics_1_1- inner node disablement + // 48 odr_gmv_feature_1_4- inner node disablement + // 49 odr_gmv_match_1_4- inner node disablement + // 50 ifd_segmap_tnr_bc_1_4- inner node disablement + // 51 smurf_tnr_bc_1_0- inner node disablement + // 52 tnr7_bc_1_2- inner node disablement + // 53 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 54 ifd_segmap_tnr_blend_1_4- inner node disablement + // 55 smurf_tnr_blend_1_0- inner node disablement + // 56 tnr7_blend_1_1- inner node disablement + // 57 odr_tnr_fp_yuvn_1_4- inner node disablement + // 58 tnr_scaler_fp_1_1- inner node disablement + // 59 image_upscaler_1_1- inner node disablement + // 60 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 61 ifd_segmap_cas_1_4- inner node disablement + // 62 smurf_cas_1_0- inner node disablement + // 63 cas_1_1- inner node disablement + // 64 odr_ofs_mp_1_4- inner node disablement + // 65 b2i_ds_output_1_1- inner node disablement + // 66 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFFFFFFF; + disabledRunKernelsBitmap[1] = 0x7; + } + else // default inner node + { + // RBM - 0x00000000000000000067FDBD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x67FDBD; + // DEB - 0x000000000000E1FFFFFFFFFEEDFBFFF1 + bitmaps.deb[0] = 0xEDFBFFF1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFFA3F9F + bitmaps.teb[0] = 0xFFFA3F9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 67; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0xFFFFFFFFFFC00300; + disabledRunKernelsBitmap[1] |= 0x7; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0xE800000000000000; + disabledRunKernelsBitmap[1] |= 0x7; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerNoGmvNoTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 42; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000064009D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1E00000FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F000009F + bitmaps.teb[0] = 0xF000009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FE00; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000044009D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1E00000FFFEED9BF1F1 + bitmaps.deb[0] = 0xED9BF1F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E0001E9F + bitmaps.teb[0] = 0xE0001E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F67FE7 + bitmaps.reb[0] = 0x12F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 39 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x8000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000044009D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1E00000FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E000009F + bitmaps.teb[0] = 0xE000009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 39 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x800001FE00; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000024009D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021E00000FFFEED9BF1F1 + bitmaps.deb[0] = 0xED9BF1F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D0001E9F + bitmaps.teb[0] = 0xD0001E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F67FE7 + bitmaps.reb[0] = 0x12F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 40 b2i_ds_output_1_1- inner node disablement + // 41 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x30000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000024009D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021E00000FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D000009F + bitmaps.teb[0] = 0xD000009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 40 b2i_ds_output_1_1- inner node disablement + // 41 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3000001FE00; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000080001E6811 + bitmaps.rbm[0] = 0x1E6811; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019BF1F1 + bitmaps.deb[0] = 0x19BF1F1; + // TEB - 0x0000000000001E97 + bitmaps.teb[0] = 0x1E97; + // REB - 0x00000000000000000000000002007FE7 + bitmaps.reb[0] = 0x2007FE7; + + // Kernels disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 17 ifd_segmap_bnlm_1_4- inner node disablement + // 18 smurf_bnlm_1_0- inner node disablement + // 19 bnlm_3_4- inner node disablement + // 20 bxt_demosaic- inner node disablement + // 21 vcsc_2_0_b- inner node disablement + // 22 gltm_2_0- inner node disablement + // 23 ifd_segmap_xnr_1_4- inner node disablement + // 24 smurf_xnr_1_0- inner node disablement + // 25 xnr_5_4- inner node disablement + // 26 vcr_3_1- inner node disablement + // 27 glim_2_0- inner node disablement + // 28 ifd_segmap_acm_1_4- inner node disablement + // 29 smurf_acm_1_0- inner node disablement + // 30 acm_1_2- inner node disablement + // 31 gammatm_v4- inner node disablement + // 32 csc_1_1- inner node disablement + // 33 b2i_ds_1_1- inner node disablement + // 34 lbff_crop_espa_1_4- inner node disablement + // 35 image_upscaler_1_1- inner node disablement + // 36 ifd_segmap_cas_1_4- inner node disablement + // 37 smurf_cas_1_0- inner node disablement + // 38 cas_1_1- inner node disablement + // 39 odr_ofs_mp_1_4- inner node disablement + // 40 b2i_ds_output_1_1- inner node disablement + // 41 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFE0180; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgb_ir_2_0- inner node disablement + // 5 ifd_lsc_1_4- inner node disablement + // 6 lsc_1_2- inner node disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_segmap_bnlm_1_4- inner node disablement + // 18 smurf_bnlm_1_0- inner node disablement + // 19 bnlm_3_4- inner node disablement + // 20 bxt_demosaic- inner node disablement + // 21 vcsc_2_0_b- inner node disablement + // 22 gltm_2_0- inner node disablement + // 23 ifd_segmap_xnr_1_4- inner node disablement + // 24 smurf_xnr_1_0- inner node disablement + // 25 xnr_5_4- inner node disablement + // 26 vcr_3_1- inner node disablement + // 27 glim_2_0- inner node disablement + // 28 ifd_segmap_acm_1_4- inner node disablement + // 29 smurf_acm_1_0- inner node disablement + // 30 acm_1_2- inner node disablement + // 31 gammatm_v4- inner node disablement + // 32 csc_1_1- inner node disablement + // 33 b2i_ds_1_1- inner node disablement + // 34 lbff_crop_espa_1_4- inner node disablement + // 35 image_upscaler_1_1- inner node disablement + // 36 ifd_segmap_cas_1_4- inner node disablement + // 37 smurf_cas_1_0- inner node disablement + // 38 cas_1_1- inner node disablement + // 39 odr_ofs_mp_1_4- inner node disablement + // 40 b2i_ds_output_1_1- inner node disablement + // 41 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000064009D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1E00000FFFEED9BF1F1 + bitmaps.deb[0] = 0xED9BF1F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F0001E9F + bitmaps.teb[0] = 0xF0001E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F67FE7 + bitmaps.reb[0] = 0x12F67FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffBayerNoGmvNoTnrWithSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 42; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x3FFFFFE0180; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x3F800000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerWithGmvNoTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 46; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x0000000000000000006400BD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E1E0000FFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F032009F + bitmaps.teb[0] = 0xF032009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FE00; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x0000000000000000004400BD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C1E0000FFFFEED9BF1F1 + bitmaps.deb[0] = 0xED9BF1F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E0321E9F + bitmaps.teb[0] = 0xE0321E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F67FE7 + bitmaps.reb[0] = 0x12F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 43 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x80000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x0000000000000000004400BD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C1E0000FFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E032009F + bitmaps.teb[0] = 0xE032009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 43 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x8000001FE00; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x0000000000000000002400BD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x00000000000021E0000FFFFEED9BF1F1 + bitmaps.deb[0] = 0xED9BF1F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D0321E9F + bitmaps.teb[0] = 0xD0321E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F67FE7 + bitmaps.reb[0] = 0x12F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 44 b2i_ds_output_1_1- inner node disablement + // 45 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x300000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x0000000000000000002400BD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x00000000000021E0000FFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D032009F + bitmaps.teb[0] = 0xD032009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 44 b2i_ds_output_1_1- inner node disablement + // 45 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x30000001FE00; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000080001E6811 + bitmaps.rbm[0] = 0x1E6811; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019BF1F1 + bitmaps.deb[0] = 0x19BF1F1; + // TEB - 0x0000000000001E97 + bitmaps.teb[0] = 0x1E97; + // REB - 0x00000000000000000000000002007FE7 + bitmaps.reb[0] = 0x2007FE7; + + // Kernels disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 17 ifd_gmv_1_4- inner node disablement + // 18 ifd_segmap_bnlm_1_4- inner node disablement + // 19 smurf_bnlm_1_0- inner node disablement + // 20 bnlm_3_4- inner node disablement + // 21 bxt_demosaic- inner node disablement + // 22 vcsc_2_0_b- inner node disablement + // 23 gltm_2_0- inner node disablement + // 24 ifd_segmap_xnr_1_4- inner node disablement + // 25 smurf_xnr_1_0- inner node disablement + // 26 xnr_5_4- inner node disablement + // 27 vcr_3_1- inner node disablement + // 28 glim_2_0- inner node disablement + // 29 ifd_segmap_acm_1_4- inner node disablement + // 30 smurf_acm_1_0- inner node disablement + // 31 acm_1_2- inner node disablement + // 32 gammatm_v4- inner node disablement + // 33 csc_1_1- inner node disablement + // 34 b2i_ds_1_1- inner node disablement + // 35 lbff_crop_espa_1_4- inner node disablement + // 36 image_upscaler_1_1- inner node disablement + // 37 gmv_statistics_1_1- inner node disablement + // 38 odr_gmv_feature_1_4- inner node disablement + // 39 odr_gmv_match_1_4- inner node disablement + // 40 ifd_segmap_cas_1_4- inner node disablement + // 41 smurf_cas_1_0- inner node disablement + // 42 cas_1_1- inner node disablement + // 43 odr_ofs_mp_1_4- inner node disablement + // 44 b2i_ds_output_1_1- inner node disablement + // 45 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFE0180; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgb_ir_2_0- inner node disablement + // 5 ifd_lsc_1_4- inner node disablement + // 6 lsc_1_2- inner node disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_gmv_1_4- inner node disablement + // 18 ifd_segmap_bnlm_1_4- inner node disablement + // 19 smurf_bnlm_1_0- inner node disablement + // 20 bnlm_3_4- inner node disablement + // 21 bxt_demosaic- inner node disablement + // 22 vcsc_2_0_b- inner node disablement + // 23 gltm_2_0- inner node disablement + // 24 ifd_segmap_xnr_1_4- inner node disablement + // 25 smurf_xnr_1_0- inner node disablement + // 26 xnr_5_4- inner node disablement + // 27 vcr_3_1- inner node disablement + // 28 glim_2_0- inner node disablement + // 29 ifd_segmap_acm_1_4- inner node disablement + // 30 smurf_acm_1_0- inner node disablement + // 31 acm_1_2- inner node disablement + // 32 gammatm_v4- inner node disablement + // 33 csc_1_1- inner node disablement + // 34 b2i_ds_1_1- inner node disablement + // 35 lbff_crop_espa_1_4- inner node disablement + // 36 image_upscaler_1_1- inner node disablement + // 37 gmv_statistics_1_1- inner node disablement + // 38 odr_gmv_feature_1_4- inner node disablement + // 39 odr_gmv_match_1_4- inner node disablement + // 40 ifd_segmap_cas_1_4- inner node disablement + // 41 smurf_cas_1_0- inner node disablement + // 42 cas_1_1- inner node disablement + // 43 odr_ofs_mp_1_4- inner node disablement + // 44 b2i_ds_output_1_1- inner node disablement + // 45 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x0000000000000000006400BD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E1E0000FFFFEED9BF1F1 + bitmaps.deb[0] = 0xED9BF1F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F0321E9F + bitmaps.teb[0] = 0xF0321E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F67FE7 + bitmaps.reb[0] = 0x12F67FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffBayerWithGmvNoTnrWithSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 46; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x3FFFFFFE0180; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x3F1000000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerNoGmvWithTnrWithOpacityOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 50; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FC9D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E13FFFF0F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xFFF0F9CE; + bitmaps.deb[2] = 0xE13F; + // TEB - 0x000000063FC0009F + bitmaps.teb[0] = 0x3FC0009F; + bitmaps.teb[1] = 0x6; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 26 odr_awb_std_1_4- inner node disablement + // 27 odr_awb_sat_1_4- inner node disablement + // 28 aestatistics_2_1- inner node disablement + // 29 odr_ae_1_4- inner node disablement + // 30 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7C380000; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C13FFFF0F9CE8D9BF1F1 + bitmaps.deb[0] = 0x8D9BF1F1; + bitmaps.deb[1] = 0xFFF0F9CE; + bitmaps.deb[2] = 0xC13F; + // TEB - 0x000000062FC01E9F + bitmaps.teb[0] = 0x2FC01E9F; + bitmaps.teb[1] = 0x6; + // REB - 0x00000000000000000000001FF2F67FE7 + bitmaps.reb[0] = 0xF2F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 46 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x400000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C13FFFF0F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xFFF0F9CE; + bitmaps.deb[2] = 0xC13F; + // TEB - 0x000000062FC0009F + bitmaps.teb[0] = 0x2FC0009F; + bitmaps.teb[1] = 0x6; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 26 odr_awb_std_1_4- inner node disablement + // 27 odr_awb_sat_1_4- inner node disablement + // 28 aestatistics_2_1- inner node disablement + // 29 odr_ae_1_4- inner node disablement + // 30 odr_af_std_1_4- inner node disablement + // 46 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x40007C380000; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x000000000000213FFFF0F9CE8D9BF1F1 + bitmaps.deb[0] = 0x8D9BF1F1; + bitmaps.deb[1] = 0xFFF0F9CE; + bitmaps.deb[2] = 0x213F; + // TEB - 0x000000061FC01E9F + bitmaps.teb[0] = 0x1FC01E9F; + bitmaps.teb[1] = 0x6; + // REB - 0x00000000000000000000001FF2F67FE7 + bitmaps.reb[0] = 0xF2F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1800000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x000000000000213FFFF0F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xFFF0F9CE; + bitmaps.deb[2] = 0x213F; + // TEB - 0x000000061FC0009F + bitmaps.teb[0] = 0x1FC0009F; + bitmaps.teb[1] = 0x6; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 26 odr_awb_std_1_4- inner node disablement + // 27 odr_awb_sat_1_4- inner node disablement + // 28 aestatistics_2_1- inner node disablement + // 29 odr_ae_1_4- inner node disablement + // 30 odr_af_std_1_4- inner node disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x180007C380000; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000080001E6811 + bitmaps.rbm[0] = 0x1E6811; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019BF1F1 + bitmaps.deb[0] = 0x19BF1F1; + // TEB - 0x0000000000001E97 + bitmaps.teb[0] = 0x1E97; + // REB - 0x00000000000000000000000002007FE7 + bitmaps.reb[0] = 0x2007FE7; + + // Kernels disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 bnlm_3_4- inner node disablement + // 10 bxt_demosaic- inner node disablement + // 11 vcsc_2_0_b- inner node disablement + // 12 gltm_2_0- inner node disablement + // 13 xnr_5_4- inner node disablement + // 14 vcr_3_1- inner node disablement + // 15 glim_2_0- inner node disablement + // 16 acm_1_2- inner node disablement + // 17 gammatm_v4- inner node disablement + // 18 csc_1_1- inner node disablement + // 22 b2i_ds_1_1- inner node disablement + // 23 lbff_crop_espa_1_4- inner node disablement + // 24 tnr7_spatial_1_1- inner node disablement + // 25 tnr_scaler_lb_1_1- inner node disablement + // 31 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 32 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 33 tnr7_ims_1_2- inner node disablement + // 34 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 35 ifd_segmap_tnr_bc_1_4- inner node disablement + // 36 smurf_tnr_bc_1_0- inner node disablement + // 37 tnr7_bc_1_2- inner node disablement + // 38 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 39 ifd_segmap_tnr_blend_1_4- inner node disablement + // 40 smurf_tnr_blend_1_0- inner node disablement + // 41 tnr7_blend_1_1- inner node disablement + // 42 odr_tnr_fp_yuvn_1_4- inner node disablement + // 43 tnr_scaler_fp_1_1- inner node disablement + // 44 image_upscaler_1_1- inner node disablement + // 45 cas_1_1- inner node disablement + // 46 odr_ofs_mp_1_4- inner node disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + // 49 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFF83C7FF80; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgb_ir_2_0- inner node disablement + // 5 ifd_lsc_1_4- inner node disablement + // 6 lsc_1_2- inner node disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 bnlm_3_4- inner node disablement + // 10 bxt_demosaic- inner node disablement + // 11 vcsc_2_0_b- inner node disablement + // 12 gltm_2_0- inner node disablement + // 13 xnr_5_4- inner node disablement + // 14 vcr_3_1- inner node disablement + // 15 glim_2_0- inner node disablement + // 16 acm_1_2- inner node disablement + // 17 gammatm_v4- inner node disablement + // 18 csc_1_1- inner node disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 22 b2i_ds_1_1- inner node disablement + // 23 lbff_crop_espa_1_4- inner node disablement + // 24 tnr7_spatial_1_1- inner node disablement + // 25 tnr_scaler_lb_1_1- inner node disablement + // 26 odr_awb_std_1_4- inner node disablement + // 27 odr_awb_sat_1_4- inner node disablement + // 28 aestatistics_2_1- inner node disablement + // 29 odr_ae_1_4- inner node disablement + // 30 odr_af_std_1_4- inner node disablement + // 31 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 32 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 33 tnr7_ims_1_2- inner node disablement + // 34 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 35 ifd_segmap_tnr_bc_1_4- inner node disablement + // 36 smurf_tnr_bc_1_0- inner node disablement + // 37 tnr7_bc_1_2- inner node disablement + // 38 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 39 ifd_segmap_tnr_blend_1_4- inner node disablement + // 40 smurf_tnr_blend_1_0- inner node disablement + // 41 tnr7_blend_1_1- inner node disablement + // 42 odr_tnr_fp_yuvn_1_4- inner node disablement + // 43 tnr_scaler_fp_1_1- inner node disablement + // 44 image_upscaler_1_1- inner node disablement + // 45 cas_1_1- inner node disablement + // 46 odr_ofs_mp_1_4- inner node disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + // 49 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000067FC9D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E13FFFF0F9CE8D9BF1F1 + bitmaps.deb[0] = 0x8D9BF1F1; + bitmaps.deb[1] = 0xFFF0F9CE; + bitmaps.deb[2] = 0xE13F; + // TEB - 0x000000063FC01E9F + bitmaps.teb[0] = 0x3FC01E9F; + bitmaps.teb[1] = 0x6; + // REB - 0x00000000000000000000001FF2F67FE7 + bitmaps.reb[0] = 0xF2F67FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffBayerNoGmvWithTnrWithOpacityOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 50; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x3FFFF83C7FF80; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x1F00000000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf2NoGmvNoTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 46; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000064009D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1E00000FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F000009F + bitmaps.teb[0] = 0xF000009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_pdaf_1_4- inner node disablement + // 18 pext_1_0- inner node disablement + // 19 pafstatistics_1_2- inner node disablement + // 20 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFE00; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000044019D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x44019D; + // DEB - 0x000000000000C1E00000FFFEEDDBFFF1 + bitmaps.deb[0] = 0xEDDBFFF1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E0003F9F + bitmaps.teb[0] = 0xE0003F9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F77FE7 + bitmaps.reb[0] = 0x16F77FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 43 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x80000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000044009D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1E00000FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E000009F + bitmaps.teb[0] = 0xE000009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_pdaf_1_4- inner node disablement + // 18 pext_1_0- inner node disablement + // 19 pafstatistics_1_2- inner node disablement + // 20 odr_pdaf_1_4- inner node disablement + // 43 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x800001FFE00; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000024019D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x24019D; + // DEB - 0x00000000000021E00000FFFEEDDBFFF1 + bitmaps.deb[0] = 0xEDDBFFF1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D0003F9F + bitmaps.teb[0] = 0xD0003F9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F77FE7 + bitmaps.reb[0] = 0x16F77FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 44 b2i_ds_output_1_1- inner node disablement + // 45 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x300000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000024009D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021E00000FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D000009F + bitmaps.teb[0] = 0xD000009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_pdaf_1_4- inner node disablement + // 18 pext_1_0- inner node disablement + // 19 pafstatistics_1_2- inner node disablement + // 20 odr_pdaf_1_4- inner node disablement + // 44 b2i_ds_output_1_1- inner node disablement + // 45 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3000001FFE00; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000180001E6811 + bitmaps.rbm[0] = 0x1E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001DBFFF1 + bitmaps.deb[0] = 0x1DBFFF1; + // TEB - 0x0000000000003F97 + bitmaps.teb[0] = 0x3F97; + // REB - 0x00000000000000000000000006017FE7 + bitmaps.reb[0] = 0x6017FE7; + + // Kernels disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 21 ifd_segmap_bnlm_1_4- inner node disablement + // 22 smurf_bnlm_1_0- inner node disablement + // 23 bnlm_3_4- inner node disablement + // 24 bxt_demosaic- inner node disablement + // 25 vcsc_2_0_b- inner node disablement + // 26 gltm_2_0- inner node disablement + // 27 ifd_segmap_xnr_1_4- inner node disablement + // 28 smurf_xnr_1_0- inner node disablement + // 29 xnr_5_4- inner node disablement + // 30 vcr_3_1- inner node disablement + // 31 glim_2_0- inner node disablement + // 32 ifd_segmap_acm_1_4- inner node disablement + // 33 smurf_acm_1_0- inner node disablement + // 34 acm_1_2- inner node disablement + // 35 gammatm_v4- inner node disablement + // 36 csc_1_1- inner node disablement + // 37 b2i_ds_1_1- inner node disablement + // 38 lbff_crop_espa_1_4- inner node disablement + // 39 image_upscaler_1_1- inner node disablement + // 40 ifd_segmap_cas_1_4- inner node disablement + // 41 smurf_cas_1_0- inner node disablement + // 42 cas_1_1- inner node disablement + // 43 odr_ofs_mp_1_4- inner node disablement + // 44 b2i_ds_output_1_1- inner node disablement + // 45 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFE00180; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgb_ir_2_0- inner node disablement + // 5 ifd_lsc_1_4- inner node disablement + // 6 lsc_1_2- inner node disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_pdaf_1_4- inner node disablement + // 18 pext_1_0- inner node disablement + // 19 pafstatistics_1_2- inner node disablement + // 20 odr_pdaf_1_4- inner node disablement + // 21 ifd_segmap_bnlm_1_4- inner node disablement + // 22 smurf_bnlm_1_0- inner node disablement + // 23 bnlm_3_4- inner node disablement + // 24 bxt_demosaic- inner node disablement + // 25 vcsc_2_0_b- inner node disablement + // 26 gltm_2_0- inner node disablement + // 27 ifd_segmap_xnr_1_4- inner node disablement + // 28 smurf_xnr_1_0- inner node disablement + // 29 xnr_5_4- inner node disablement + // 30 vcr_3_1- inner node disablement + // 31 glim_2_0- inner node disablement + // 32 ifd_segmap_acm_1_4- inner node disablement + // 33 smurf_acm_1_0- inner node disablement + // 34 acm_1_2- inner node disablement + // 35 gammatm_v4- inner node disablement + // 36 csc_1_1- inner node disablement + // 37 b2i_ds_1_1- inner node disablement + // 38 lbff_crop_espa_1_4- inner node disablement + // 39 image_upscaler_1_1- inner node disablement + // 40 ifd_segmap_cas_1_4- inner node disablement + // 41 smurf_cas_1_0- inner node disablement + // 42 cas_1_1- inner node disablement + // 43 odr_ofs_mp_1_4- inner node disablement + // 44 b2i_ds_output_1_1- inner node disablement + // 45 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000064019D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x64019D; + // DEB - 0x000000000000E1E00000FFFEEDDBFFF1 + bitmaps.deb[0] = 0xEDDBFFF1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F0003F9F + bitmaps.teb[0] = 0xF0003F9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F77FE7 + bitmaps.reb[0] = 0x16F77FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffBayerPdaf2NoGmvNoTnrWithSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 46; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x3FFFFFE00180; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x3F8000000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf2WithGmvNoTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 50; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x0000000000000000006400BD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E1E0000FFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F032009F + bitmaps.teb[0] = 0xF032009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_pdaf_1_4- inner node disablement + // 18 pext_1_0- inner node disablement + // 19 pafstatistics_1_2- inner node disablement + // 20 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFE00; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x0000000000000000004401BD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x4401BD; + // DEB - 0x000000000000C1E0000FFFFEEDDBFFF1 + bitmaps.deb[0] = 0xEDDBFFF1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E0323F9F + bitmaps.teb[0] = 0xE0323F9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F77FE7 + bitmaps.reb[0] = 0x16F77FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 47 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x800000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x0000000000000000004400BD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C1E0000FFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E032009F + bitmaps.teb[0] = 0xE032009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_pdaf_1_4- inner node disablement + // 18 pext_1_0- inner node disablement + // 19 pafstatistics_1_2- inner node disablement + // 20 odr_pdaf_1_4- inner node disablement + // 47 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x8000001FFE00; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x0000000000000000002401BD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x2401BD; + // DEB - 0x00000000000021E0000FFFFEEDDBFFF1 + bitmaps.deb[0] = 0xEDDBFFF1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D0323F9F + bitmaps.teb[0] = 0xD0323F9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F77FE7 + bitmaps.reb[0] = 0x16F77FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 48 b2i_ds_output_1_1- inner node disablement + // 49 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x0000000000000000002400BD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x00000000000021E0000FFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D032009F + bitmaps.teb[0] = 0xD032009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_pdaf_1_4- inner node disablement + // 18 pext_1_0- inner node disablement + // 19 pafstatistics_1_2- inner node disablement + // 20 odr_pdaf_1_4- inner node disablement + // 48 b2i_ds_output_1_1- inner node disablement + // 49 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x30000001FFE00; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000180001E6811 + bitmaps.rbm[0] = 0x1E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001DBFFF1 + bitmaps.deb[0] = 0x1DBFFF1; + // TEB - 0x0000000000003F97 + bitmaps.teb[0] = 0x3F97; + // REB - 0x00000000000000000000000006017FE7 + bitmaps.reb[0] = 0x6017FE7; + + // Kernels disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 21 ifd_gmv_1_4- inner node disablement + // 22 ifd_segmap_bnlm_1_4- inner node disablement + // 23 smurf_bnlm_1_0- inner node disablement + // 24 bnlm_3_4- inner node disablement + // 25 bxt_demosaic- inner node disablement + // 26 vcsc_2_0_b- inner node disablement + // 27 gltm_2_0- inner node disablement + // 28 ifd_segmap_xnr_1_4- inner node disablement + // 29 smurf_xnr_1_0- inner node disablement + // 30 xnr_5_4- inner node disablement + // 31 vcr_3_1- inner node disablement + // 32 glim_2_0- inner node disablement + // 33 ifd_segmap_acm_1_4- inner node disablement + // 34 smurf_acm_1_0- inner node disablement + // 35 acm_1_2- inner node disablement + // 36 gammatm_v4- inner node disablement + // 37 csc_1_1- inner node disablement + // 38 b2i_ds_1_1- inner node disablement + // 39 lbff_crop_espa_1_4- inner node disablement + // 40 image_upscaler_1_1- inner node disablement + // 41 gmv_statistics_1_1- inner node disablement + // 42 odr_gmv_feature_1_4- inner node disablement + // 43 odr_gmv_match_1_4- inner node disablement + // 44 ifd_segmap_cas_1_4- inner node disablement + // 45 smurf_cas_1_0- inner node disablement + // 46 cas_1_1- inner node disablement + // 47 odr_ofs_mp_1_4- inner node disablement + // 48 b2i_ds_output_1_1- inner node disablement + // 49 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFE00180; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgb_ir_2_0- inner node disablement + // 5 ifd_lsc_1_4- inner node disablement + // 6 lsc_1_2- inner node disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_pdaf_1_4- inner node disablement + // 18 pext_1_0- inner node disablement + // 19 pafstatistics_1_2- inner node disablement + // 20 odr_pdaf_1_4- inner node disablement + // 21 ifd_gmv_1_4- inner node disablement + // 22 ifd_segmap_bnlm_1_4- inner node disablement + // 23 smurf_bnlm_1_0- inner node disablement + // 24 bnlm_3_4- inner node disablement + // 25 bxt_demosaic- inner node disablement + // 26 vcsc_2_0_b- inner node disablement + // 27 gltm_2_0- inner node disablement + // 28 ifd_segmap_xnr_1_4- inner node disablement + // 29 smurf_xnr_1_0- inner node disablement + // 30 xnr_5_4- inner node disablement + // 31 vcr_3_1- inner node disablement + // 32 glim_2_0- inner node disablement + // 33 ifd_segmap_acm_1_4- inner node disablement + // 34 smurf_acm_1_0- inner node disablement + // 35 acm_1_2- inner node disablement + // 36 gammatm_v4- inner node disablement + // 37 csc_1_1- inner node disablement + // 38 b2i_ds_1_1- inner node disablement + // 39 lbff_crop_espa_1_4- inner node disablement + // 40 image_upscaler_1_1- inner node disablement + // 41 gmv_statistics_1_1- inner node disablement + // 42 odr_gmv_feature_1_4- inner node disablement + // 43 odr_gmv_match_1_4- inner node disablement + // 44 ifd_segmap_cas_1_4- inner node disablement + // 45 smurf_cas_1_0- inner node disablement + // 46 cas_1_1- inner node disablement + // 47 odr_ofs_mp_1_4- inner node disablement + // 48 b2i_ds_output_1_1- inner node disablement + // 49 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x0000000000000000006401BD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x6401BD; + // DEB - 0x000000000000E1E0000FFFFEEDDBFFF1 + bitmaps.deb[0] = 0xEDDBFFF1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F0323F9F + bitmaps.teb[0] = 0xF0323F9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F77FE7 + bitmaps.reb[0] = 0x16F77FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffBayerPdaf2WithGmvNoTnrWithSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 50; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x3FFFFFFE00180; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x3F10000000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf3NoGmvNoTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 45; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000064009D58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1E00000FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F000009F + bitmaps.teb[0] = 0xF000009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F787E7 + bitmaps.reb[0] = 0x16F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 12 rgbs_grid_1_1- inner node disablement + // 13 ccm_3a_2_0- inner node disablement + // 14 fr_grid_1_0- inner node disablement + // 15 odr_awb_std_1_4- inner node disablement + // 16 odr_awb_sat_1_4- inner node disablement + // 17 aestatistics_2_1- inner node disablement + // 18 odr_ae_1_4- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFF0D0; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000044019D581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x44019D; + // DEB - 0x000000000000C1E00000FFFEEDDBFDF1 + bitmaps.deb[0] = 0xEDDBFDF1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E0003E9F + bitmaps.teb[0] = 0xE0003E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 42 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x40000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000044009D58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1E00000FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E000009F + bitmaps.teb[0] = 0xE000009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F787E7 + bitmaps.reb[0] = 0x16F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 12 rgbs_grid_1_1- inner node disablement + // 13 ccm_3a_2_0- inner node disablement + // 14 fr_grid_1_0- inner node disablement + // 15 odr_awb_std_1_4- inner node disablement + // 16 odr_awb_sat_1_4- inner node disablement + // 17 aestatistics_2_1- inner node disablement + // 18 odr_ae_1_4- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 42 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x400000FF0D0; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000024019D581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x24019D; + // DEB - 0x00000000000021E00000FFFEEDDBFDF1 + bitmaps.deb[0] = 0xEDDBFDF1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D0003E9F + bitmaps.teb[0] = 0xD0003E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 43 b2i_ds_output_1_1- inner node disablement + // 44 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x180000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000024009D58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021E00000FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D000009F + bitmaps.teb[0] = 0xD000009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F787E7 + bitmaps.reb[0] = 0x16F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 12 rgbs_grid_1_1- inner node disablement + // 13 ccm_3a_2_0- inner node disablement + // 14 fr_grid_1_0- inner node disablement + // 15 odr_awb_std_1_4- inner node disablement + // 16 odr_awb_sat_1_4- inner node disablement + // 17 aestatistics_2_1- inner node disablement + // 18 odr_ae_1_4- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 43 b2i_ds_output_1_1- inner node disablement + // 44 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1800000FF0D0; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000180081E6811 + bitmaps.rbm[0] = 0x81E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001DBFDF1 + bitmaps.deb[0] = 0x1DBFDF1; + // TEB - 0x0000000000003E97 + bitmaps.teb[0] = 0x3E97; + // REB - 0x0000000000000000000000000601FFE7 + bitmaps.reb[0] = 0x601FFE7; + + // Kernels disablement + // 10 gd_2_2- inner node disablement + // 11 wb_1_1- inner node disablement + // 20 ifd_segmap_bnlm_1_4- inner node disablement + // 21 smurf_bnlm_1_0- inner node disablement + // 22 bnlm_3_4- inner node disablement + // 23 bxt_demosaic- inner node disablement + // 24 vcsc_2_0_b- inner node disablement + // 25 gltm_2_0- inner node disablement + // 26 ifd_segmap_xnr_1_4- inner node disablement + // 27 smurf_xnr_1_0- inner node disablement + // 28 xnr_5_4- inner node disablement + // 29 vcr_3_1- inner node disablement + // 30 glim_2_0- inner node disablement + // 31 ifd_segmap_acm_1_4- inner node disablement + // 32 smurf_acm_1_0- inner node disablement + // 33 acm_1_2- inner node disablement + // 34 gammatm_v4- inner node disablement + // 35 csc_1_1- inner node disablement + // 36 b2i_ds_1_1- inner node disablement + // 37 lbff_crop_espa_1_4- inner node disablement + // 38 image_upscaler_1_1- inner node disablement + // 39 ifd_segmap_cas_1_4- inner node disablement + // 40 smurf_cas_1_0- inner node disablement + // 41 cas_1_1- inner node disablement + // 42 odr_ofs_mp_1_4- inner node disablement + // 43 b2i_ds_output_1_1- inner node disablement + // 44 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFF00C00; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 pext_1_0- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 8 ifd_lsc_1_4- inner node disablement + // 9 lsc_1_2- inner node disablement + // 10 gd_2_2- inner node disablement + // 11 wb_1_1- inner node disablement + // 12 rgbs_grid_1_1- inner node disablement + // 13 ccm_3a_2_0- inner node disablement + // 14 fr_grid_1_0- inner node disablement + // 15 odr_awb_std_1_4- inner node disablement + // 16 odr_awb_sat_1_4- inner node disablement + // 17 aestatistics_2_1- inner node disablement + // 18 odr_ae_1_4- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 20 ifd_segmap_bnlm_1_4- inner node disablement + // 21 smurf_bnlm_1_0- inner node disablement + // 22 bnlm_3_4- inner node disablement + // 23 bxt_demosaic- inner node disablement + // 24 vcsc_2_0_b- inner node disablement + // 25 gltm_2_0- inner node disablement + // 26 ifd_segmap_xnr_1_4- inner node disablement + // 27 smurf_xnr_1_0- inner node disablement + // 28 xnr_5_4- inner node disablement + // 29 vcr_3_1- inner node disablement + // 30 glim_2_0- inner node disablement + // 31 ifd_segmap_acm_1_4- inner node disablement + // 32 smurf_acm_1_0- inner node disablement + // 33 acm_1_2- inner node disablement + // 34 gammatm_v4- inner node disablement + // 35 csc_1_1- inner node disablement + // 36 b2i_ds_1_1- inner node disablement + // 37 lbff_crop_espa_1_4- inner node disablement + // 38 image_upscaler_1_1- inner node disablement + // 39 ifd_segmap_cas_1_4- inner node disablement + // 40 smurf_cas_1_0- inner node disablement + // 41 cas_1_1- inner node disablement + // 42 odr_ofs_mp_1_4- inner node disablement + // 43 b2i_ds_output_1_1- inner node disablement + // 44 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000064019D581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x64019D; + // DEB - 0x000000000000E1E00000FFFEEDDBFDF1 + bitmaps.deb[0] = 0xEDDBFDF1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F0003E9F + bitmaps.teb[0] = 0xF0003E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffBayerPdaf3NoGmvNoTnrWithSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 45; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x1FFFFFF00C00; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x1FC000000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf3WithGmvNoTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 49; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x0000000000000000006400BD58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E1E0000FFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F032009F + bitmaps.teb[0] = 0xF032009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F787E7 + bitmaps.reb[0] = 0x16F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 12 rgbs_grid_1_1- inner node disablement + // 13 ccm_3a_2_0- inner node disablement + // 14 fr_grid_1_0- inner node disablement + // 15 odr_awb_std_1_4- inner node disablement + // 16 odr_awb_sat_1_4- inner node disablement + // 17 aestatistics_2_1- inner node disablement + // 18 odr_ae_1_4- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFF0D0; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x0000000000000000004401BD581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x4401BD; + // DEB - 0x000000000000C1E0000FFFFEEDDBFDF1 + bitmaps.deb[0] = 0xEDDBFDF1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E0323E9F + bitmaps.teb[0] = 0xE0323E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 46 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x400000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x0000000000000000004400BD58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C1E0000FFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E032009F + bitmaps.teb[0] = 0xE032009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F787E7 + bitmaps.reb[0] = 0x16F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 12 rgbs_grid_1_1- inner node disablement + // 13 ccm_3a_2_0- inner node disablement + // 14 fr_grid_1_0- inner node disablement + // 15 odr_awb_std_1_4- inner node disablement + // 16 odr_awb_sat_1_4- inner node disablement + // 17 aestatistics_2_1- inner node disablement + // 18 odr_ae_1_4- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 46 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x4000000FF0D0; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x0000000000000000002401BD581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x2401BD; + // DEB - 0x00000000000021E0000FFFFEEDDBFDF1 + bitmaps.deb[0] = 0xEDDBFDF1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D0323E9F + bitmaps.teb[0] = 0xD0323E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1800000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x0000000000000000002400BD58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x00000000000021E0000FFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D032009F + bitmaps.teb[0] = 0xD032009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F787E7 + bitmaps.reb[0] = 0x16F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 12 rgbs_grid_1_1- inner node disablement + // 13 ccm_3a_2_0- inner node disablement + // 14 fr_grid_1_0- inner node disablement + // 15 odr_awb_std_1_4- inner node disablement + // 16 odr_awb_sat_1_4- inner node disablement + // 17 aestatistics_2_1- inner node disablement + // 18 odr_ae_1_4- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x18000000FF0D0; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000180081E6811 + bitmaps.rbm[0] = 0x81E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001DBFDF1 + bitmaps.deb[0] = 0x1DBFDF1; + // TEB - 0x0000000000003E97 + bitmaps.teb[0] = 0x3E97; + // REB - 0x0000000000000000000000000601FFE7 + bitmaps.reb[0] = 0x601FFE7; + + // Kernels disablement + // 10 gd_2_2- inner node disablement + // 11 wb_1_1- inner node disablement + // 20 ifd_gmv_1_4- inner node disablement + // 21 ifd_segmap_bnlm_1_4- inner node disablement + // 22 smurf_bnlm_1_0- inner node disablement + // 23 bnlm_3_4- inner node disablement + // 24 bxt_demosaic- inner node disablement + // 25 vcsc_2_0_b- inner node disablement + // 26 gltm_2_0- inner node disablement + // 27 ifd_segmap_xnr_1_4- inner node disablement + // 28 smurf_xnr_1_0- inner node disablement + // 29 xnr_5_4- inner node disablement + // 30 vcr_3_1- inner node disablement + // 31 glim_2_0- inner node disablement + // 32 ifd_segmap_acm_1_4- inner node disablement + // 33 smurf_acm_1_0- inner node disablement + // 34 acm_1_2- inner node disablement + // 35 gammatm_v4- inner node disablement + // 36 csc_1_1- inner node disablement + // 37 b2i_ds_1_1- inner node disablement + // 38 lbff_crop_espa_1_4- inner node disablement + // 39 image_upscaler_1_1- inner node disablement + // 40 gmv_statistics_1_1- inner node disablement + // 41 odr_gmv_feature_1_4- inner node disablement + // 42 odr_gmv_match_1_4- inner node disablement + // 43 ifd_segmap_cas_1_4- inner node disablement + // 44 smurf_cas_1_0- inner node disablement + // 45 cas_1_1- inner node disablement + // 46 odr_ofs_mp_1_4- inner node disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFF00C00; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 pext_1_0- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 8 ifd_lsc_1_4- inner node disablement + // 9 lsc_1_2- inner node disablement + // 10 gd_2_2- inner node disablement + // 11 wb_1_1- inner node disablement + // 12 rgbs_grid_1_1- inner node disablement + // 13 ccm_3a_2_0- inner node disablement + // 14 fr_grid_1_0- inner node disablement + // 15 odr_awb_std_1_4- inner node disablement + // 16 odr_awb_sat_1_4- inner node disablement + // 17 aestatistics_2_1- inner node disablement + // 18 odr_ae_1_4- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 20 ifd_gmv_1_4- inner node disablement + // 21 ifd_segmap_bnlm_1_4- inner node disablement + // 22 smurf_bnlm_1_0- inner node disablement + // 23 bnlm_3_4- inner node disablement + // 24 bxt_demosaic- inner node disablement + // 25 vcsc_2_0_b- inner node disablement + // 26 gltm_2_0- inner node disablement + // 27 ifd_segmap_xnr_1_4- inner node disablement + // 28 smurf_xnr_1_0- inner node disablement + // 29 xnr_5_4- inner node disablement + // 30 vcr_3_1- inner node disablement + // 31 glim_2_0- inner node disablement + // 32 ifd_segmap_acm_1_4- inner node disablement + // 33 smurf_acm_1_0- inner node disablement + // 34 acm_1_2- inner node disablement + // 35 gammatm_v4- inner node disablement + // 36 csc_1_1- inner node disablement + // 37 b2i_ds_1_1- inner node disablement + // 38 lbff_crop_espa_1_4- inner node disablement + // 39 image_upscaler_1_1- inner node disablement + // 40 gmv_statistics_1_1- inner node disablement + // 41 odr_gmv_feature_1_4- inner node disablement + // 42 odr_gmv_match_1_4- inner node disablement + // 43 ifd_segmap_cas_1_4- inner node disablement + // 44 smurf_cas_1_0- inner node disablement + // 45 cas_1_1- inner node disablement + // 46 odr_ofs_mp_1_4- inner node disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x0000000000000000006401BD581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x6401BD; + // DEB - 0x000000000000E1E0000FFFFEEDDBFDF1 + bitmaps.deb[0] = 0xEDDBFDF1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F0323E9F + bitmaps.teb[0] = 0xF0323E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffBayerPdaf3WithGmvNoTnrWithSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 49; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x1FFFFFFF00C00; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x1F88000000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void IsysDolWithCvOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + + // No inner nodes + (void)nodeInnerOptions; +} + +void IsysDolWithCvOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + (void)vanishStatus; + return; +} + +void LbffDol2InputsNoGmvNoTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 45; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[8].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[17].run_kernel.enable = 0; // wb_1_1 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000064009D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1E00000FFFEED8001FB + bitmaps.deb[0] = 0xED8001FB; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F00000BF + bitmaps.teb[0] = 0xF00000BF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 18 fr_grid_1_0- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC3EC0; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000044009D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1E00000FFFEED9FF1FB + bitmaps.deb[0] = 0xED9FF1FB; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E0041EBF + bitmaps.teb[0] = 0xE0041EBF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 42 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x40000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000044009D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1E00000FFFEED8001FB + bitmaps.deb[0] = 0xED8001FB; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E00000BF + bitmaps.teb[0] = 0xE00000BF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 18 fr_grid_1_0- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 42 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x400000C3EC0; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000024009D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021E00000FFFEED9FF1FB + bitmaps.deb[0] = 0xED9FF1FB; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D0041EBF + bitmaps.teb[0] = 0xD0041EBF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 43 b2i_ds_output_1_1- inner node disablement + // 44 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x180000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000024009D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021E00000FFFEED8001FB + bitmaps.deb[0] = 0xED8001FB; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D00000BF + bitmaps.teb[0] = 0xD00000BF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 18 fr_grid_1_0- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 43 b2i_ds_output_1_1- inner node disablement + // 44 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1800000C3EC0; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000008002526E16 + bitmaps.rbm[0] = 0x2526E16; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019FF1FB + bitmaps.deb[0] = 0x19FF1FB; + // TEB - 0x0000000000041EBF + bitmaps.teb[0] = 0x41EBF; + // REB - 0x00000000000000000000000002007FF7 + bitmaps.reb[0] = 0x2007FF7; + + // Kernels disablement + // 16 gd_2_2- inner node disablement + // 17 wb_1_1- inner node disablement + // 20 ifd_segmap_bnlm_1_4- inner node disablement + // 21 smurf_bnlm_1_0- inner node disablement + // 22 bnlm_3_4- inner node disablement + // 23 bxt_demosaic- inner node disablement + // 24 vcsc_2_0_b- inner node disablement + // 25 gltm_2_0- inner node disablement + // 26 ifd_segmap_xnr_1_4- inner node disablement + // 27 smurf_xnr_1_0- inner node disablement + // 28 xnr_5_4- inner node disablement + // 29 vcr_3_1- inner node disablement + // 30 glim_2_0- inner node disablement + // 31 ifd_segmap_acm_1_4- inner node disablement + // 32 smurf_acm_1_0- inner node disablement + // 33 acm_1_2- inner node disablement + // 34 gammatm_v4- inner node disablement + // 35 csc_1_1- inner node disablement + // 36 b2i_ds_1_1- inner node disablement + // 37 lbff_crop_espa_1_4- inner node disablement + // 38 image_upscaler_1_1- inner node disablement + // 39 ifd_segmap_cas_1_4- inner node disablement + // 40 smurf_cas_1_0- inner node disablement + // 41 cas_1_1- inner node disablement + // 42 odr_ofs_mp_1_4- inner node disablement + // 43 b2i_ds_output_1_1- inner node disablement + // 44 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFF30000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 ifd_pipe_long_1_4- inner node disablement + // 2 dol_lite_1_2- inner node disablement + // 3 bxt_blc- inner node disablement + // 4 linearization2_0- inner node disablement + // 5 dpc_2_2- inner node disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 8 rgb_ir_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 14 ifd_lsc_1_4- inner node disablement + // 15 lsc_1_2- inner node disablement + // 16 gd_2_2- inner node disablement + // 17 wb_1_1- inner node disablement + // 18 fr_grid_1_0- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 20 ifd_segmap_bnlm_1_4- inner node disablement + // 21 smurf_bnlm_1_0- inner node disablement + // 22 bnlm_3_4- inner node disablement + // 23 bxt_demosaic- inner node disablement + // 24 vcsc_2_0_b- inner node disablement + // 25 gltm_2_0- inner node disablement + // 26 ifd_segmap_xnr_1_4- inner node disablement + // 27 smurf_xnr_1_0- inner node disablement + // 28 xnr_5_4- inner node disablement + // 29 vcr_3_1- inner node disablement + // 30 glim_2_0- inner node disablement + // 31 ifd_segmap_acm_1_4- inner node disablement + // 32 smurf_acm_1_0- inner node disablement + // 33 acm_1_2- inner node disablement + // 34 gammatm_v4- inner node disablement + // 35 csc_1_1- inner node disablement + // 36 b2i_ds_1_1- inner node disablement + // 37 lbff_crop_espa_1_4- inner node disablement + // 38 image_upscaler_1_1- inner node disablement + // 39 ifd_segmap_cas_1_4- inner node disablement + // 40 smurf_cas_1_0- inner node disablement + // 41 cas_1_1- inner node disablement + // 42 odr_ofs_mp_1_4- inner node disablement + // 43 b2i_ds_output_1_1- inner node disablement + // 44 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000064009D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1E00000FFFEED9FF1FB + bitmaps.deb[0] = 0xED9FF1FB; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F0041EBF + bitmaps.teb[0] = 0xF0041EBF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffDol2InputsNoGmvNoTnrWithSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 45; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[8].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[17].run_kernel.enable = 0; // wb_1_1 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x1FFFFFF30000; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x1FC000000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffDol2InputsWithGmvNoTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 49; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[8].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[17].run_kernel.enable = 0; // wb_1_1 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x0000000000000000006400BD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E1E0000FFFFEED8001FB + bitmaps.deb[0] = 0xED8001FB; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F03200BF + bitmaps.teb[0] = 0xF03200BF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 18 fr_grid_1_0- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC3EC0; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x0000000000000000004400BD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C1E0000FFFFEED9FF1FB + bitmaps.deb[0] = 0xED9FF1FB; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E0361EBF + bitmaps.teb[0] = 0xE0361EBF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 46 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x400000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x0000000000000000004400BD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C1E0000FFFFEED8001FB + bitmaps.deb[0] = 0xED8001FB; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E03200BF + bitmaps.teb[0] = 0xE03200BF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 18 fr_grid_1_0- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 46 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x4000000C3EC0; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x0000000000000000002400BD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x00000000000021E0000FFFFEED9FF1FB + bitmaps.deb[0] = 0xED9FF1FB; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D0361EBF + bitmaps.teb[0] = 0xD0361EBF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1800000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x0000000000000000002400BD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x00000000000021E0000FFFFEED8001FB + bitmaps.deb[0] = 0xED8001FB; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D03200BF + bitmaps.teb[0] = 0xD03200BF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 18 fr_grid_1_0- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x18000000C3EC0; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000008002526E16 + bitmaps.rbm[0] = 0x2526E16; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019FF1FB + bitmaps.deb[0] = 0x19FF1FB; + // TEB - 0x0000000000041EBF + bitmaps.teb[0] = 0x41EBF; + // REB - 0x00000000000000000000000002007FF7 + bitmaps.reb[0] = 0x2007FF7; + + // Kernels disablement + // 16 gd_2_2- inner node disablement + // 17 wb_1_1- inner node disablement + // 20 ifd_gmv_1_4- inner node disablement + // 21 ifd_segmap_bnlm_1_4- inner node disablement + // 22 smurf_bnlm_1_0- inner node disablement + // 23 bnlm_3_4- inner node disablement + // 24 bxt_demosaic- inner node disablement + // 25 vcsc_2_0_b- inner node disablement + // 26 gltm_2_0- inner node disablement + // 27 ifd_segmap_xnr_1_4- inner node disablement + // 28 smurf_xnr_1_0- inner node disablement + // 29 xnr_5_4- inner node disablement + // 30 vcr_3_1- inner node disablement + // 31 glim_2_0- inner node disablement + // 32 ifd_segmap_acm_1_4- inner node disablement + // 33 smurf_acm_1_0- inner node disablement + // 34 acm_1_2- inner node disablement + // 35 gammatm_v4- inner node disablement + // 36 csc_1_1- inner node disablement + // 37 b2i_ds_1_1- inner node disablement + // 38 lbff_crop_espa_1_4- inner node disablement + // 39 image_upscaler_1_1- inner node disablement + // 40 gmv_statistics_1_1- inner node disablement + // 41 odr_gmv_feature_1_4- inner node disablement + // 42 odr_gmv_match_1_4- inner node disablement + // 43 ifd_segmap_cas_1_4- inner node disablement + // 44 smurf_cas_1_0- inner node disablement + // 45 cas_1_1- inner node disablement + // 46 odr_ofs_mp_1_4- inner node disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFF30000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 ifd_pipe_long_1_4- inner node disablement + // 2 dol_lite_1_2- inner node disablement + // 3 bxt_blc- inner node disablement + // 4 linearization2_0- inner node disablement + // 5 dpc_2_2- inner node disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 8 rgb_ir_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 14 ifd_lsc_1_4- inner node disablement + // 15 lsc_1_2- inner node disablement + // 16 gd_2_2- inner node disablement + // 17 wb_1_1- inner node disablement + // 18 fr_grid_1_0- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 20 ifd_gmv_1_4- inner node disablement + // 21 ifd_segmap_bnlm_1_4- inner node disablement + // 22 smurf_bnlm_1_0- inner node disablement + // 23 bnlm_3_4- inner node disablement + // 24 bxt_demosaic- inner node disablement + // 25 vcsc_2_0_b- inner node disablement + // 26 gltm_2_0- inner node disablement + // 27 ifd_segmap_xnr_1_4- inner node disablement + // 28 smurf_xnr_1_0- inner node disablement + // 29 xnr_5_4- inner node disablement + // 30 vcr_3_1- inner node disablement + // 31 glim_2_0- inner node disablement + // 32 ifd_segmap_acm_1_4- inner node disablement + // 33 smurf_acm_1_0- inner node disablement + // 34 acm_1_2- inner node disablement + // 35 gammatm_v4- inner node disablement + // 36 csc_1_1- inner node disablement + // 37 b2i_ds_1_1- inner node disablement + // 38 lbff_crop_espa_1_4- inner node disablement + // 39 image_upscaler_1_1- inner node disablement + // 40 gmv_statistics_1_1- inner node disablement + // 41 odr_gmv_feature_1_4- inner node disablement + // 42 odr_gmv_match_1_4- inner node disablement + // 43 ifd_segmap_cas_1_4- inner node disablement + // 44 smurf_cas_1_0- inner node disablement + // 45 cas_1_1- inner node disablement + // 46 odr_ofs_mp_1_4- inner node disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x0000000000000000006400BD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E1E0000FFFFEED9FF1FB + bitmaps.deb[0] = 0xED9FF1FB; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F0361EBF + bitmaps.teb[0] = 0xF0361EBF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffDol2InputsWithGmvNoTnrWithSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 49; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[8].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[17].run_kernel.enable = 0; // wb_1_1 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x1FFFFFFF30000; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x1F88000000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffDol2InputsNoGmvWithTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 61; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[8].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[17].run_kernel.enable = 0; // wb_1_1 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FC9D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E1FFFFF0FFFEED8001FB + bitmaps.deb[0] = 0xED8001FB; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFC000BF + bitmaps.teb[0] = 0xFFC000BF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 18 fr_grid_1_0- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC3EC0; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C1FFFFF0FFFEED9FF1FB + bitmaps.deb[0] = 0xED9FF1FB; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFC41EBF + bitmaps.teb[0] = 0xEFC41EBF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 58 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x400000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C1FFFFF0FFFEED8001FB + bitmaps.deb[0] = 0xED8001FB; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFC000BF + bitmaps.teb[0] = 0xEFC000BF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 18 fr_grid_1_0- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 58 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x4000000000C3EC0; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x00000000000021FFFFF0FFFEED9FF1FB + bitmaps.deb[0] = 0xED9FF1FB; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFC41EBF + bitmaps.teb[0] = 0xDFC41EBF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 59 b2i_ds_output_1_1- inner node disablement + // 60 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1800000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x00000000000021FFFFF0FFFEED8001FB + bitmaps.deb[0] = 0xED8001FB; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFC000BF + bitmaps.teb[0] = 0xDFC000BF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 18 fr_grid_1_0- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 59 b2i_ds_output_1_1- inner node disablement + // 60 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x18000000000C3EC0; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000008002526E16 + bitmaps.rbm[0] = 0x2526E16; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019FF1FB + bitmaps.deb[0] = 0x19FF1FB; + // TEB - 0x0000000000041EBF + bitmaps.teb[0] = 0x41EBF; + // REB - 0x00000000000000000000000002007FF7 + bitmaps.reb[0] = 0x2007FF7; + + // Kernels disablement + // 16 gd_2_2- inner node disablement + // 17 wb_1_1- inner node disablement + // 20 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 21 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 22 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 23 ifd_segmap_bnlm_1_4- inner node disablement + // 24 smurf_bnlm_1_0- inner node disablement + // 25 bnlm_3_4- inner node disablement + // 26 bxt_demosaic- inner node disablement + // 27 vcsc_2_0_b- inner node disablement + // 28 gltm_2_0- inner node disablement + // 29 ifd_segmap_xnr_1_4- inner node disablement + // 30 smurf_xnr_1_0- inner node disablement + // 31 xnr_5_4- inner node disablement + // 32 vcr_3_1- inner node disablement + // 33 glim_2_0- inner node disablement + // 34 ifd_segmap_acm_1_4- inner node disablement + // 35 smurf_acm_1_0- inner node disablement + // 36 acm_1_2- inner node disablement + // 37 gammatm_v4- inner node disablement + // 38 csc_1_1- inner node disablement + // 39 b2i_ds_1_1- inner node disablement + // 40 lbff_crop_espa_1_4- inner node disablement + // 41 tnr7_spatial_1_1- inner node disablement + // 42 tnr_scaler_lb_1_1- inner node disablement + // 43 tnr7_ims_1_2- inner node disablement + // 44 ifd_segmap_tnr_bc_1_4- inner node disablement + // 45 smurf_tnr_bc_1_0- inner node disablement + // 46 tnr7_bc_1_2- inner node disablement + // 47 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 48 ifd_segmap_tnr_blend_1_4- inner node disablement + // 49 smurf_tnr_blend_1_0- inner node disablement + // 50 tnr7_blend_1_1- inner node disablement + // 51 odr_tnr_fp_yuvn_1_4- inner node disablement + // 52 tnr_scaler_fp_1_1- inner node disablement + // 53 image_upscaler_1_1- inner node disablement + // 54 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 55 ifd_segmap_cas_1_4- inner node disablement + // 56 smurf_cas_1_0- inner node disablement + // 57 cas_1_1- inner node disablement + // 58 odr_ofs_mp_1_4- inner node disablement + // 59 b2i_ds_output_1_1- inner node disablement + // 60 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFFF30000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 ifd_pipe_long_1_4- inner node disablement + // 2 dol_lite_1_2- inner node disablement + // 3 bxt_blc- inner node disablement + // 4 linearization2_0- inner node disablement + // 5 dpc_2_2- inner node disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 8 rgb_ir_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 14 ifd_lsc_1_4- inner node disablement + // 15 lsc_1_2- inner node disablement + // 16 gd_2_2- inner node disablement + // 17 wb_1_1- inner node disablement + // 18 fr_grid_1_0- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 20 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 21 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 22 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 23 ifd_segmap_bnlm_1_4- inner node disablement + // 24 smurf_bnlm_1_0- inner node disablement + // 25 bnlm_3_4- inner node disablement + // 26 bxt_demosaic- inner node disablement + // 27 vcsc_2_0_b- inner node disablement + // 28 gltm_2_0- inner node disablement + // 29 ifd_segmap_xnr_1_4- inner node disablement + // 30 smurf_xnr_1_0- inner node disablement + // 31 xnr_5_4- inner node disablement + // 32 vcr_3_1- inner node disablement + // 33 glim_2_0- inner node disablement + // 34 ifd_segmap_acm_1_4- inner node disablement + // 35 smurf_acm_1_0- inner node disablement + // 36 acm_1_2- inner node disablement + // 37 gammatm_v4- inner node disablement + // 38 csc_1_1- inner node disablement + // 39 b2i_ds_1_1- inner node disablement + // 40 lbff_crop_espa_1_4- inner node disablement + // 41 tnr7_spatial_1_1- inner node disablement + // 42 tnr_scaler_lb_1_1- inner node disablement + // 43 tnr7_ims_1_2- inner node disablement + // 44 ifd_segmap_tnr_bc_1_4- inner node disablement + // 45 smurf_tnr_bc_1_0- inner node disablement + // 46 tnr7_bc_1_2- inner node disablement + // 47 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 48 ifd_segmap_tnr_blend_1_4- inner node disablement + // 49 smurf_tnr_blend_1_0- inner node disablement + // 50 tnr7_blend_1_1- inner node disablement + // 51 odr_tnr_fp_yuvn_1_4- inner node disablement + // 52 tnr_scaler_fp_1_1- inner node disablement + // 53 image_upscaler_1_1- inner node disablement + // 54 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 55 ifd_segmap_cas_1_4- inner node disablement + // 56 smurf_cas_1_0- inner node disablement + // 57 cas_1_1- inner node disablement + // 58 odr_ofs_mp_1_4- inner node disablement + // 59 b2i_ds_output_1_1- inner node disablement + // 60 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000067FC9D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E1FFFFF0FFFEED9FF1FB + bitmaps.deb[0] = 0xED9FF1FB; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFC41EBF + bitmaps.teb[0] = 0xFFC41EBF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffDol2InputsNoGmvWithTnrWithSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 61; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[8].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[17].run_kernel.enable = 0; // wb_1_1 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x1FFFFFFFFFF30000; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x1FA0000000000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffDol2InputsWithGmvWithTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 65; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[8].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[17].run_kernel.enable = 0; // wb_1_1 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FCBD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E1FFFFFFFFFEED8001FB + bitmaps.deb[0] = 0xED8001FB; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFF200BF + bitmaps.teb[0] = 0xFFF200BF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 18 fr_grid_1_0- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC3EC0; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C1FFFFFFFFFEED9FF1FB + bitmaps.deb[0] = 0xED9FF1FB; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFF61EBF + bitmaps.teb[0] = 0xEFF61EBF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 62 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x4000000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C1FFFFFFFFFEED8001FB + bitmaps.deb[0] = 0xED8001FB; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFF200BF + bitmaps.teb[0] = 0xEFF200BF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 18 fr_grid_1_0- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 62 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x40000000000C3EC0; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x00000000000021FFFFFFFFFEED9FF1FB + bitmaps.deb[0] = 0xED9FF1FB; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFF61EBF + bitmaps.teb[0] = 0xDFF61EBF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 63 b2i_ds_output_1_1- inner node disablement + // 64 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x8000000000000000; + disabledRunKernelsBitmap[1] = 0x1; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x00000000000021FFFFFFFFFEED8001FB + bitmaps.deb[0] = 0xED8001FB; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFF200BF + bitmaps.teb[0] = 0xDFF200BF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 18 fr_grid_1_0- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 63 b2i_ds_output_1_1- inner node disablement + // 64 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x80000000000C3EC0; + disabledRunKernelsBitmap[1] = 0x1; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000008002526E16 + bitmaps.rbm[0] = 0x2526E16; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019FF1FB + bitmaps.deb[0] = 0x19FF1FB; + // TEB - 0x0000000000041EBF + bitmaps.teb[0] = 0x41EBF; + // REB - 0x00000000000000000000000002007FF7 + bitmaps.reb[0] = 0x2007FF7; + + // Kernels disablement + // 16 gd_2_2- inner node disablement + // 17 wb_1_1- inner node disablement + // 20 ifd_gmv_1_4- inner node disablement + // 21 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 22 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 23 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 24 ifd_segmap_bnlm_1_4- inner node disablement + // 25 smurf_bnlm_1_0- inner node disablement + // 26 bnlm_3_4- inner node disablement + // 27 bxt_demosaic- inner node disablement + // 28 vcsc_2_0_b- inner node disablement + // 29 gltm_2_0- inner node disablement + // 30 ifd_segmap_xnr_1_4- inner node disablement + // 31 smurf_xnr_1_0- inner node disablement + // 32 xnr_5_4- inner node disablement + // 33 vcr_3_1- inner node disablement + // 34 glim_2_0- inner node disablement + // 35 ifd_segmap_acm_1_4- inner node disablement + // 36 smurf_acm_1_0- inner node disablement + // 37 acm_1_2- inner node disablement + // 38 gammatm_v4- inner node disablement + // 39 csc_1_1- inner node disablement + // 40 b2i_ds_1_1- inner node disablement + // 41 lbff_crop_espa_1_4- inner node disablement + // 42 tnr7_spatial_1_1- inner node disablement + // 43 tnr_scaler_lb_1_1- inner node disablement + // 44 tnr7_ims_1_2- inner node disablement + // 45 gmv_statistics_1_1- inner node disablement + // 46 odr_gmv_feature_1_4- inner node disablement + // 47 odr_gmv_match_1_4- inner node disablement + // 48 ifd_segmap_tnr_bc_1_4- inner node disablement + // 49 smurf_tnr_bc_1_0- inner node disablement + // 50 tnr7_bc_1_2- inner node disablement + // 51 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 52 ifd_segmap_tnr_blend_1_4- inner node disablement + // 53 smurf_tnr_blend_1_0- inner node disablement + // 54 tnr7_blend_1_1- inner node disablement + // 55 odr_tnr_fp_yuvn_1_4- inner node disablement + // 56 tnr_scaler_fp_1_1- inner node disablement + // 57 image_upscaler_1_1- inner node disablement + // 58 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 59 ifd_segmap_cas_1_4- inner node disablement + // 60 smurf_cas_1_0- inner node disablement + // 61 cas_1_1- inner node disablement + // 62 odr_ofs_mp_1_4- inner node disablement + // 63 b2i_ds_output_1_1- inner node disablement + // 64 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFF30000; + disabledRunKernelsBitmap[1] = 0x1; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 ifd_pipe_long_1_4- inner node disablement + // 2 dol_lite_1_2- inner node disablement + // 3 bxt_blc- inner node disablement + // 4 linearization2_0- inner node disablement + // 5 dpc_2_2- inner node disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 8 rgb_ir_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 14 ifd_lsc_1_4- inner node disablement + // 15 lsc_1_2- inner node disablement + // 16 gd_2_2- inner node disablement + // 17 wb_1_1- inner node disablement + // 18 fr_grid_1_0- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 20 ifd_gmv_1_4- inner node disablement + // 21 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 22 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 23 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 24 ifd_segmap_bnlm_1_4- inner node disablement + // 25 smurf_bnlm_1_0- inner node disablement + // 26 bnlm_3_4- inner node disablement + // 27 bxt_demosaic- inner node disablement + // 28 vcsc_2_0_b- inner node disablement + // 29 gltm_2_0- inner node disablement + // 30 ifd_segmap_xnr_1_4- inner node disablement + // 31 smurf_xnr_1_0- inner node disablement + // 32 xnr_5_4- inner node disablement + // 33 vcr_3_1- inner node disablement + // 34 glim_2_0- inner node disablement + // 35 ifd_segmap_acm_1_4- inner node disablement + // 36 smurf_acm_1_0- inner node disablement + // 37 acm_1_2- inner node disablement + // 38 gammatm_v4- inner node disablement + // 39 csc_1_1- inner node disablement + // 40 b2i_ds_1_1- inner node disablement + // 41 lbff_crop_espa_1_4- inner node disablement + // 42 tnr7_spatial_1_1- inner node disablement + // 43 tnr_scaler_lb_1_1- inner node disablement + // 44 tnr7_ims_1_2- inner node disablement + // 45 gmv_statistics_1_1- inner node disablement + // 46 odr_gmv_feature_1_4- inner node disablement + // 47 odr_gmv_match_1_4- inner node disablement + // 48 ifd_segmap_tnr_bc_1_4- inner node disablement + // 49 smurf_tnr_bc_1_0- inner node disablement + // 50 tnr7_bc_1_2- inner node disablement + // 51 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 52 ifd_segmap_tnr_blend_1_4- inner node disablement + // 53 smurf_tnr_blend_1_0- inner node disablement + // 54 tnr7_blend_1_1- inner node disablement + // 55 odr_tnr_fp_yuvn_1_4- inner node disablement + // 56 tnr_scaler_fp_1_1- inner node disablement + // 57 image_upscaler_1_1- inner node disablement + // 58 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 59 ifd_segmap_cas_1_4- inner node disablement + // 60 smurf_cas_1_0- inner node disablement + // 61 cas_1_1- inner node disablement + // 62 odr_ofs_mp_1_4- inner node disablement + // 63 b2i_ds_output_1_1- inner node disablement + // 64 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFFFFFFF; + disabledRunKernelsBitmap[1] = 0x1; + } + else // default inner node + { + // RBM - 0x00000000000000000067FCBD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E1FFFFFFFFFEED9FF1FB + bitmaps.deb[0] = 0xED9FF1FB; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFF61EBF + bitmaps.teb[0] = 0xFFF61EBF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffDol2InputsWithGmvWithTnrWithSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 65; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[8].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[17].run_kernel.enable = 0; // wb_1_1 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0xFFFFFFFFFFF30000; + disabledRunKernelsBitmap[1] |= 0x1; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0xFA00000000000000; + disabledRunKernelsBitmap[1] |= 0x1; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffDol3InputsNoGmvNoTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 46; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[9].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[18].run_kernel.enable = 0; // wb_1_1 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000064009D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1E00000FFFEED8001FF + bitmaps.deb[0] = 0xED8001FF; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F00000FF + bitmaps.teb[0] = 0xF00000FF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 20 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x187D80; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000044009D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1E00000FFFEED9FF1FF + bitmaps.deb[0] = 0xED9FF1FF; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E0041EFF + bitmaps.teb[0] = 0xE0041EFF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 43 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x80000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000044009D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1E00000FFFEED8001FF + bitmaps.deb[0] = 0xED8001FF; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E00000FF + bitmaps.teb[0] = 0xE00000FF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 20 odr_af_std_1_4- inner node disablement + // 43 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x80000187D80; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000024009D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021E00000FFFEED9FF1FF + bitmaps.deb[0] = 0xED9FF1FF; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D0041EFF + bitmaps.teb[0] = 0xD0041EFF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 44 b2i_ds_output_1_1- inner node disablement + // 45 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x300000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000024009D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021E00000FFFEED8001FF + bitmaps.deb[0] = 0xED8001FF; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D00000FF + bitmaps.teb[0] = 0xD00000FF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 20 odr_af_std_1_4- inner node disablement + // 44 b2i_ds_output_1_1- inner node disablement + // 45 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x300000187D80; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000008002526E16 + bitmaps.rbm[0] = 0x2526E16; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019FF1FF + bitmaps.deb[0] = 0x19FF1FF; + // TEB - 0x0000000000041EFF + bitmaps.teb[0] = 0x41EFF; + // REB - 0x00000000000000000000000002007FF7 + bitmaps.reb[0] = 0x2007FF7; + + // Kernels disablement + // 17 gd_2_2- inner node disablement + // 18 wb_1_1- inner node disablement + // 21 ifd_segmap_bnlm_1_4- inner node disablement + // 22 smurf_bnlm_1_0- inner node disablement + // 23 bnlm_3_4- inner node disablement + // 24 bxt_demosaic- inner node disablement + // 25 vcsc_2_0_b- inner node disablement + // 26 gltm_2_0- inner node disablement + // 27 ifd_segmap_xnr_1_4- inner node disablement + // 28 smurf_xnr_1_0- inner node disablement + // 29 xnr_5_4- inner node disablement + // 30 vcr_3_1- inner node disablement + // 31 glim_2_0- inner node disablement + // 32 ifd_segmap_acm_1_4- inner node disablement + // 33 smurf_acm_1_0- inner node disablement + // 34 acm_1_2- inner node disablement + // 35 gammatm_v4- inner node disablement + // 36 csc_1_1- inner node disablement + // 37 b2i_ds_1_1- inner node disablement + // 38 lbff_crop_espa_1_4- inner node disablement + // 39 image_upscaler_1_1- inner node disablement + // 40 ifd_segmap_cas_1_4- inner node disablement + // 41 smurf_cas_1_0- inner node disablement + // 42 cas_1_1- inner node disablement + // 43 odr_ofs_mp_1_4- inner node disablement + // 44 b2i_ds_output_1_1- inner node disablement + // 45 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFE60000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 ifd_pipe_long_1_4- inner node disablement + // 2 ifd_pipe_short_smth_1_4- inner node disablement + // 3 dol_lite_1_2- inner node disablement + // 4 bxt_blc- inner node disablement + // 5 linearization2_0- inner node disablement + // 6 dpc_2_2- inner node disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 9 rgb_ir_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 ifd_lsc_1_4- inner node disablement + // 16 lsc_1_2- inner node disablement + // 17 gd_2_2- inner node disablement + // 18 wb_1_1- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 20 odr_af_std_1_4- inner node disablement + // 21 ifd_segmap_bnlm_1_4- inner node disablement + // 22 smurf_bnlm_1_0- inner node disablement + // 23 bnlm_3_4- inner node disablement + // 24 bxt_demosaic- inner node disablement + // 25 vcsc_2_0_b- inner node disablement + // 26 gltm_2_0- inner node disablement + // 27 ifd_segmap_xnr_1_4- inner node disablement + // 28 smurf_xnr_1_0- inner node disablement + // 29 xnr_5_4- inner node disablement + // 30 vcr_3_1- inner node disablement + // 31 glim_2_0- inner node disablement + // 32 ifd_segmap_acm_1_4- inner node disablement + // 33 smurf_acm_1_0- inner node disablement + // 34 acm_1_2- inner node disablement + // 35 gammatm_v4- inner node disablement + // 36 csc_1_1- inner node disablement + // 37 b2i_ds_1_1- inner node disablement + // 38 lbff_crop_espa_1_4- inner node disablement + // 39 image_upscaler_1_1- inner node disablement + // 40 ifd_segmap_cas_1_4- inner node disablement + // 41 smurf_cas_1_0- inner node disablement + // 42 cas_1_1- inner node disablement + // 43 odr_ofs_mp_1_4- inner node disablement + // 44 b2i_ds_output_1_1- inner node disablement + // 45 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000064009D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1E00000FFFEED9FF1FF + bitmaps.deb[0] = 0xED9FF1FF; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F0041EFF + bitmaps.teb[0] = 0xF0041EFF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffDol3InputsNoGmvNoTnrWithSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 46; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[9].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[18].run_kernel.enable = 0; // wb_1_1 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x3FFFFFE60000; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x3F8000000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffDol3InputsWithGmvNoTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 50; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[9].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[18].run_kernel.enable = 0; // wb_1_1 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x0000000000000000006400BD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E1E0000FFFFEED8001FF + bitmaps.deb[0] = 0xED8001FF; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F03200FF + bitmaps.teb[0] = 0xF03200FF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 20 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x187D80; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x0000000000000000004400BD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C1E0000FFFFEED9FF1FF + bitmaps.deb[0] = 0xED9FF1FF; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E0361EFF + bitmaps.teb[0] = 0xE0361EFF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 47 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x800000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x0000000000000000004400BD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C1E0000FFFFEED8001FF + bitmaps.deb[0] = 0xED8001FF; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E03200FF + bitmaps.teb[0] = 0xE03200FF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 20 odr_af_std_1_4- inner node disablement + // 47 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x800000187D80; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x0000000000000000002400BD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x00000000000021E0000FFFFEED9FF1FF + bitmaps.deb[0] = 0xED9FF1FF; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D0361EFF + bitmaps.teb[0] = 0xD0361EFF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 48 b2i_ds_output_1_1- inner node disablement + // 49 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x0000000000000000002400BD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x00000000000021E0000FFFFEED8001FF + bitmaps.deb[0] = 0xED8001FF; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D03200FF + bitmaps.teb[0] = 0xD03200FF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 20 odr_af_std_1_4- inner node disablement + // 48 b2i_ds_output_1_1- inner node disablement + // 49 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3000000187D80; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000008002526E16 + bitmaps.rbm[0] = 0x2526E16; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019FF1FF + bitmaps.deb[0] = 0x19FF1FF; + // TEB - 0x0000000000041EFF + bitmaps.teb[0] = 0x41EFF; + // REB - 0x00000000000000000000000002007FF7 + bitmaps.reb[0] = 0x2007FF7; + + // Kernels disablement + // 17 gd_2_2- inner node disablement + // 18 wb_1_1- inner node disablement + // 21 ifd_gmv_1_4- inner node disablement + // 22 ifd_segmap_bnlm_1_4- inner node disablement + // 23 smurf_bnlm_1_0- inner node disablement + // 24 bnlm_3_4- inner node disablement + // 25 bxt_demosaic- inner node disablement + // 26 vcsc_2_0_b- inner node disablement + // 27 gltm_2_0- inner node disablement + // 28 ifd_segmap_xnr_1_4- inner node disablement + // 29 smurf_xnr_1_0- inner node disablement + // 30 xnr_5_4- inner node disablement + // 31 vcr_3_1- inner node disablement + // 32 glim_2_0- inner node disablement + // 33 ifd_segmap_acm_1_4- inner node disablement + // 34 smurf_acm_1_0- inner node disablement + // 35 acm_1_2- inner node disablement + // 36 gammatm_v4- inner node disablement + // 37 csc_1_1- inner node disablement + // 38 b2i_ds_1_1- inner node disablement + // 39 lbff_crop_espa_1_4- inner node disablement + // 40 image_upscaler_1_1- inner node disablement + // 41 gmv_statistics_1_1- inner node disablement + // 42 odr_gmv_feature_1_4- inner node disablement + // 43 odr_gmv_match_1_4- inner node disablement + // 44 ifd_segmap_cas_1_4- inner node disablement + // 45 smurf_cas_1_0- inner node disablement + // 46 cas_1_1- inner node disablement + // 47 odr_ofs_mp_1_4- inner node disablement + // 48 b2i_ds_output_1_1- inner node disablement + // 49 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFE60000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 ifd_pipe_long_1_4- inner node disablement + // 2 ifd_pipe_short_smth_1_4- inner node disablement + // 3 dol_lite_1_2- inner node disablement + // 4 bxt_blc- inner node disablement + // 5 linearization2_0- inner node disablement + // 6 dpc_2_2- inner node disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 9 rgb_ir_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 ifd_lsc_1_4- inner node disablement + // 16 lsc_1_2- inner node disablement + // 17 gd_2_2- inner node disablement + // 18 wb_1_1- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 20 odr_af_std_1_4- inner node disablement + // 21 ifd_gmv_1_4- inner node disablement + // 22 ifd_segmap_bnlm_1_4- inner node disablement + // 23 smurf_bnlm_1_0- inner node disablement + // 24 bnlm_3_4- inner node disablement + // 25 bxt_demosaic- inner node disablement + // 26 vcsc_2_0_b- inner node disablement + // 27 gltm_2_0- inner node disablement + // 28 ifd_segmap_xnr_1_4- inner node disablement + // 29 smurf_xnr_1_0- inner node disablement + // 30 xnr_5_4- inner node disablement + // 31 vcr_3_1- inner node disablement + // 32 glim_2_0- inner node disablement + // 33 ifd_segmap_acm_1_4- inner node disablement + // 34 smurf_acm_1_0- inner node disablement + // 35 acm_1_2- inner node disablement + // 36 gammatm_v4- inner node disablement + // 37 csc_1_1- inner node disablement + // 38 b2i_ds_1_1- inner node disablement + // 39 lbff_crop_espa_1_4- inner node disablement + // 40 image_upscaler_1_1- inner node disablement + // 41 gmv_statistics_1_1- inner node disablement + // 42 odr_gmv_feature_1_4- inner node disablement + // 43 odr_gmv_match_1_4- inner node disablement + // 44 ifd_segmap_cas_1_4- inner node disablement + // 45 smurf_cas_1_0- inner node disablement + // 46 cas_1_1- inner node disablement + // 47 odr_ofs_mp_1_4- inner node disablement + // 48 b2i_ds_output_1_1- inner node disablement + // 49 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x0000000000000000006400BD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E1E0000FFFFEED9FF1FF + bitmaps.deb[0] = 0xED9FF1FF; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F0361EFF + bitmaps.teb[0] = 0xF0361EFF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffDol3InputsWithGmvNoTnrWithSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 50; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[9].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[18].run_kernel.enable = 0; // wb_1_1 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x3FFFFFFE60000; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x3F10000000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffDol3InputsNoGmvWithTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 62; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[9].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[18].run_kernel.enable = 0; // wb_1_1 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FC9D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E1FFFFF0FFFEED8001FF + bitmaps.deb[0] = 0xED8001FF; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFC000FF + bitmaps.teb[0] = 0xFFC000FF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 20 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x187D80; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C1FFFFF0FFFEED9FF1FF + bitmaps.deb[0] = 0xED9FF1FF; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFC41EFF + bitmaps.teb[0] = 0xEFC41EFF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 59 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x800000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C1FFFFF0FFFEED8001FF + bitmaps.deb[0] = 0xED8001FF; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFC000FF + bitmaps.teb[0] = 0xEFC000FF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 20 odr_af_std_1_4- inner node disablement + // 59 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x800000000187D80; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x00000000000021FFFFF0FFFEED9FF1FF + bitmaps.deb[0] = 0xED9FF1FF; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFC41EFF + bitmaps.teb[0] = 0xDFC41EFF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 60 b2i_ds_output_1_1- inner node disablement + // 61 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3000000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x00000000000021FFFFF0FFFEED8001FF + bitmaps.deb[0] = 0xED8001FF; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFC000FF + bitmaps.teb[0] = 0xDFC000FF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 20 odr_af_std_1_4- inner node disablement + // 60 b2i_ds_output_1_1- inner node disablement + // 61 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3000000000187D80; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000008002526E16 + bitmaps.rbm[0] = 0x2526E16; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019FF1FF + bitmaps.deb[0] = 0x19FF1FF; + // TEB - 0x0000000000041EFF + bitmaps.teb[0] = 0x41EFF; + // REB - 0x00000000000000000000000002007FF7 + bitmaps.reb[0] = 0x2007FF7; + + // Kernels disablement + // 17 gd_2_2- inner node disablement + // 18 wb_1_1- inner node disablement + // 21 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 22 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 23 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 24 ifd_segmap_bnlm_1_4- inner node disablement + // 25 smurf_bnlm_1_0- inner node disablement + // 26 bnlm_3_4- inner node disablement + // 27 bxt_demosaic- inner node disablement + // 28 vcsc_2_0_b- inner node disablement + // 29 gltm_2_0- inner node disablement + // 30 ifd_segmap_xnr_1_4- inner node disablement + // 31 smurf_xnr_1_0- inner node disablement + // 32 xnr_5_4- inner node disablement + // 33 vcr_3_1- inner node disablement + // 34 glim_2_0- inner node disablement + // 35 ifd_segmap_acm_1_4- inner node disablement + // 36 smurf_acm_1_0- inner node disablement + // 37 acm_1_2- inner node disablement + // 38 gammatm_v4- inner node disablement + // 39 csc_1_1- inner node disablement + // 40 b2i_ds_1_1- inner node disablement + // 41 lbff_crop_espa_1_4- inner node disablement + // 42 tnr7_spatial_1_1- inner node disablement + // 43 tnr_scaler_lb_1_1- inner node disablement + // 44 tnr7_ims_1_2- inner node disablement + // 45 ifd_segmap_tnr_bc_1_4- inner node disablement + // 46 smurf_tnr_bc_1_0- inner node disablement + // 47 tnr7_bc_1_2- inner node disablement + // 48 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 49 ifd_segmap_tnr_blend_1_4- inner node disablement + // 50 smurf_tnr_blend_1_0- inner node disablement + // 51 tnr7_blend_1_1- inner node disablement + // 52 odr_tnr_fp_yuvn_1_4- inner node disablement + // 53 tnr_scaler_fp_1_1- inner node disablement + // 54 image_upscaler_1_1- inner node disablement + // 55 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 56 ifd_segmap_cas_1_4- inner node disablement + // 57 smurf_cas_1_0- inner node disablement + // 58 cas_1_1- inner node disablement + // 59 odr_ofs_mp_1_4- inner node disablement + // 60 b2i_ds_output_1_1- inner node disablement + // 61 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFE60000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 ifd_pipe_long_1_4- inner node disablement + // 2 ifd_pipe_short_smth_1_4- inner node disablement + // 3 dol_lite_1_2- inner node disablement + // 4 bxt_blc- inner node disablement + // 5 linearization2_0- inner node disablement + // 6 dpc_2_2- inner node disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 9 rgb_ir_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 ifd_lsc_1_4- inner node disablement + // 16 lsc_1_2- inner node disablement + // 17 gd_2_2- inner node disablement + // 18 wb_1_1- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 20 odr_af_std_1_4- inner node disablement + // 21 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 22 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 23 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 24 ifd_segmap_bnlm_1_4- inner node disablement + // 25 smurf_bnlm_1_0- inner node disablement + // 26 bnlm_3_4- inner node disablement + // 27 bxt_demosaic- inner node disablement + // 28 vcsc_2_0_b- inner node disablement + // 29 gltm_2_0- inner node disablement + // 30 ifd_segmap_xnr_1_4- inner node disablement + // 31 smurf_xnr_1_0- inner node disablement + // 32 xnr_5_4- inner node disablement + // 33 vcr_3_1- inner node disablement + // 34 glim_2_0- inner node disablement + // 35 ifd_segmap_acm_1_4- inner node disablement + // 36 smurf_acm_1_0- inner node disablement + // 37 acm_1_2- inner node disablement + // 38 gammatm_v4- inner node disablement + // 39 csc_1_1- inner node disablement + // 40 b2i_ds_1_1- inner node disablement + // 41 lbff_crop_espa_1_4- inner node disablement + // 42 tnr7_spatial_1_1- inner node disablement + // 43 tnr_scaler_lb_1_1- inner node disablement + // 44 tnr7_ims_1_2- inner node disablement + // 45 ifd_segmap_tnr_bc_1_4- inner node disablement + // 46 smurf_tnr_bc_1_0- inner node disablement + // 47 tnr7_bc_1_2- inner node disablement + // 48 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 49 ifd_segmap_tnr_blend_1_4- inner node disablement + // 50 smurf_tnr_blend_1_0- inner node disablement + // 51 tnr7_blend_1_1- inner node disablement + // 52 odr_tnr_fp_yuvn_1_4- inner node disablement + // 53 tnr_scaler_fp_1_1- inner node disablement + // 54 image_upscaler_1_1- inner node disablement + // 55 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 56 ifd_segmap_cas_1_4- inner node disablement + // 57 smurf_cas_1_0- inner node disablement + // 58 cas_1_1- inner node disablement + // 59 odr_ofs_mp_1_4- inner node disablement + // 60 b2i_ds_output_1_1- inner node disablement + // 61 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000067FC9D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E1FFFFF0FFFEED9FF1FF + bitmaps.deb[0] = 0xED9FF1FF; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFC41EFF + bitmaps.teb[0] = 0xFFC41EFF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffDol3InputsNoGmvWithTnrWithSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 62; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[9].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[18].run_kernel.enable = 0; // wb_1_1 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x3FFFFFFFFFE60000; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x3F40000000000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffDol3InputsWithGmvWithTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 66; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[9].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[18].run_kernel.enable = 0; // wb_1_1 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FCBD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E1FFFFFFFFFEED8001FF + bitmaps.deb[0] = 0xED8001FF; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFF200FF + bitmaps.teb[0] = 0xFFF200FF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 20 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x187D80; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C1FFFFFFFFFEED9FF1FF + bitmaps.deb[0] = 0xED9FF1FF; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFF61EFF + bitmaps.teb[0] = 0xEFF61EFF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 63 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x8000000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C1FFFFFFFFFEED8001FF + bitmaps.deb[0] = 0xED8001FF; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFF200FF + bitmaps.teb[0] = 0xEFF200FF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 20 odr_af_std_1_4- inner node disablement + // 63 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x8000000000187D80; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x00000000000021FFFFFFFFFEED9FF1FF + bitmaps.deb[0] = 0xED9FF1FF; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFF61EFF + bitmaps.teb[0] = 0xDFF61EFF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 64 b2i_ds_output_1_1- inner node disablement + // 65 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[1] = 0x3; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x00000000000021FFFFFFFFFEED8001FF + bitmaps.deb[0] = 0xED8001FF; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFF200FF + bitmaps.teb[0] = 0xDFF200FF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 20 odr_af_std_1_4- inner node disablement + // 64 b2i_ds_output_1_1- inner node disablement + // 65 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x187D80; + disabledRunKernelsBitmap[1] = 0x3; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000008002526E16 + bitmaps.rbm[0] = 0x2526E16; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019FF1FF + bitmaps.deb[0] = 0x19FF1FF; + // TEB - 0x0000000000041EFF + bitmaps.teb[0] = 0x41EFF; + // REB - 0x00000000000000000000000002007FF7 + bitmaps.reb[0] = 0x2007FF7; + + // Kernels disablement + // 17 gd_2_2- inner node disablement + // 18 wb_1_1- inner node disablement + // 21 ifd_gmv_1_4- inner node disablement + // 22 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 23 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 24 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 25 ifd_segmap_bnlm_1_4- inner node disablement + // 26 smurf_bnlm_1_0- inner node disablement + // 27 bnlm_3_4- inner node disablement + // 28 bxt_demosaic- inner node disablement + // 29 vcsc_2_0_b- inner node disablement + // 30 gltm_2_0- inner node disablement + // 31 ifd_segmap_xnr_1_4- inner node disablement + // 32 smurf_xnr_1_0- inner node disablement + // 33 xnr_5_4- inner node disablement + // 34 vcr_3_1- inner node disablement + // 35 glim_2_0- inner node disablement + // 36 ifd_segmap_acm_1_4- inner node disablement + // 37 smurf_acm_1_0- inner node disablement + // 38 acm_1_2- inner node disablement + // 39 gammatm_v4- inner node disablement + // 40 csc_1_1- inner node disablement + // 41 b2i_ds_1_1- inner node disablement + // 42 lbff_crop_espa_1_4- inner node disablement + // 43 tnr7_spatial_1_1- inner node disablement + // 44 tnr_scaler_lb_1_1- inner node disablement + // 45 tnr7_ims_1_2- inner node disablement + // 46 gmv_statistics_1_1- inner node disablement + // 47 odr_gmv_feature_1_4- inner node disablement + // 48 odr_gmv_match_1_4- inner node disablement + // 49 ifd_segmap_tnr_bc_1_4- inner node disablement + // 50 smurf_tnr_bc_1_0- inner node disablement + // 51 tnr7_bc_1_2- inner node disablement + // 52 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 53 ifd_segmap_tnr_blend_1_4- inner node disablement + // 54 smurf_tnr_blend_1_0- inner node disablement + // 55 tnr7_blend_1_1- inner node disablement + // 56 odr_tnr_fp_yuvn_1_4- inner node disablement + // 57 tnr_scaler_fp_1_1- inner node disablement + // 58 image_upscaler_1_1- inner node disablement + // 59 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 60 ifd_segmap_cas_1_4- inner node disablement + // 61 smurf_cas_1_0- inner node disablement + // 62 cas_1_1- inner node disablement + // 63 odr_ofs_mp_1_4- inner node disablement + // 64 b2i_ds_output_1_1- inner node disablement + // 65 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFE60000; + disabledRunKernelsBitmap[1] = 0x3; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 ifd_pipe_long_1_4- inner node disablement + // 2 ifd_pipe_short_smth_1_4- inner node disablement + // 3 dol_lite_1_2- inner node disablement + // 4 bxt_blc- inner node disablement + // 5 linearization2_0- inner node disablement + // 6 dpc_2_2- inner node disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 9 rgb_ir_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 ifd_lsc_1_4- inner node disablement + // 16 lsc_1_2- inner node disablement + // 17 gd_2_2- inner node disablement + // 18 wb_1_1- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 20 odr_af_std_1_4- inner node disablement + // 21 ifd_gmv_1_4- inner node disablement + // 22 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 23 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 24 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 25 ifd_segmap_bnlm_1_4- inner node disablement + // 26 smurf_bnlm_1_0- inner node disablement + // 27 bnlm_3_4- inner node disablement + // 28 bxt_demosaic- inner node disablement + // 29 vcsc_2_0_b- inner node disablement + // 30 gltm_2_0- inner node disablement + // 31 ifd_segmap_xnr_1_4- inner node disablement + // 32 smurf_xnr_1_0- inner node disablement + // 33 xnr_5_4- inner node disablement + // 34 vcr_3_1- inner node disablement + // 35 glim_2_0- inner node disablement + // 36 ifd_segmap_acm_1_4- inner node disablement + // 37 smurf_acm_1_0- inner node disablement + // 38 acm_1_2- inner node disablement + // 39 gammatm_v4- inner node disablement + // 40 csc_1_1- inner node disablement + // 41 b2i_ds_1_1- inner node disablement + // 42 lbff_crop_espa_1_4- inner node disablement + // 43 tnr7_spatial_1_1- inner node disablement + // 44 tnr_scaler_lb_1_1- inner node disablement + // 45 tnr7_ims_1_2- inner node disablement + // 46 gmv_statistics_1_1- inner node disablement + // 47 odr_gmv_feature_1_4- inner node disablement + // 48 odr_gmv_match_1_4- inner node disablement + // 49 ifd_segmap_tnr_bc_1_4- inner node disablement + // 50 smurf_tnr_bc_1_0- inner node disablement + // 51 tnr7_bc_1_2- inner node disablement + // 52 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 53 ifd_segmap_tnr_blend_1_4- inner node disablement + // 54 smurf_tnr_blend_1_0- inner node disablement + // 55 tnr7_blend_1_1- inner node disablement + // 56 odr_tnr_fp_yuvn_1_4- inner node disablement + // 57 tnr_scaler_fp_1_1- inner node disablement + // 58 image_upscaler_1_1- inner node disablement + // 59 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 60 ifd_segmap_cas_1_4- inner node disablement + // 61 smurf_cas_1_0- inner node disablement + // 62 cas_1_1- inner node disablement + // 63 odr_ofs_mp_1_4- inner node disablement + // 64 b2i_ds_output_1_1- inner node disablement + // 65 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFFFFFFF; + disabledRunKernelsBitmap[1] = 0x3; + } + else // default inner node + { + // RBM - 0x00000000000000000067FCBD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E1FFFFFFFFFEED9FF1FF + bitmaps.deb[0] = 0xED9FF1FF; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFF61EFF + bitmaps.teb[0] = 0xFFF61EFF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffDol3InputsWithGmvWithTnrWithSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 66; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[9].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[18].run_kernel.enable = 0; // wb_1_1 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0xFFFFFFFFFFE60000; + disabledRunKernelsBitmap[1] |= 0x3; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0xF400000000000000; + disabledRunKernelsBitmap[1] |= 0x3; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffRgbIrNoGmvNoTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 44; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noIr | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x0000000000000000006400DD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x6400DD; + // DEB - 0x000000000000E1E00000FFFEEF8001F1 + bitmaps.deb[0] = 0xEF8001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F000409F + bitmaps.teb[0] = 0xF000409F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7C390; + } + else if (nodeRelevantInnerOptions == (noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000064009D503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1E00000FFFEED9FF1F1 + bitmaps.deb[0] = 0xED9FF1F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F0041E9F + bitmaps.teb[0] = 0xF0041E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x40; + } + else if (nodeRelevantInnerOptions == (no3A | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000064009D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1E00000FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F000009F + bitmaps.teb[0] = 0xF000009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7C3D0; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x0000000000000000004400DD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x4400DD; + // DEB - 0x000000000000C1E00000FFFEEF9FF1F1 + bitmaps.deb[0] = 0xEF9FF1F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E0045E9F + bitmaps.teb[0] = 0xE0045E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 41 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x20000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x0000000000000000004400DD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x4400DD; + // DEB - 0x000000000000C1E00000FFFEEF8001F1 + bitmaps.deb[0] = 0xEF8001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E000409F + bitmaps.teb[0] = 0xE000409F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 41 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x2000007C390; + } + else if (nodeRelevantInnerOptions == (noMp | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000044009D503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1E00000FFFEED9FF1F1 + bitmaps.deb[0] = 0xED9FF1F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E0041E9F + bitmaps.teb[0] = 0xE0041E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + // 41 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x20000000040; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000044009D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1E00000FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E000009F + bitmaps.teb[0] = 0xE000009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 41 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x2000007C3D0; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x0000000000000000002400DD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x2400DD; + // DEB - 0x00000000000021E00000FFFEEF9FF1F1 + bitmaps.deb[0] = 0xEF9FF1F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D0045E9F + bitmaps.teb[0] = 0xD0045E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 42 b2i_ds_output_1_1- inner node disablement + // 43 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC0000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x0000000000000000002400DD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x2400DD; + // DEB - 0x00000000000021E00000FFFEEF8001F1 + bitmaps.deb[0] = 0xEF8001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D000409F + bitmaps.teb[0] = 0xD000409F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 42 b2i_ds_output_1_1- inner node disablement + // 43 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC000007C390; + } + else if (nodeRelevantInnerOptions == (noDp | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000024009D503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021E00000FFFEED9FF1F1 + bitmaps.deb[0] = 0xED9FF1F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D0041E9F + bitmaps.teb[0] = 0xD0041E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + // 42 b2i_ds_output_1_1- inner node disablement + // 43 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC0000000040; + } + else if (nodeRelevantInnerOptions == (no3A | noDp | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000024009D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021E00000FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D000009F + bitmaps.teb[0] = 0xD000009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 42 b2i_ds_output_1_1- inner node disablement + // 43 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC000007C3D0; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000004000206071 + bitmaps.rbm[0] = 0x206071; + bitmaps.rbm[1] = 0x40; + // DEB - 0x00000000000000000000000003871131 + bitmaps.deb[0] = 0x3871131; + // TEB - 0x0000000000045817 + bitmaps.teb[0] = 0x45817; + // REB - 0x0000000000000000000000000300118F + bitmaps.reb[0] = 0x300118F; + + // Kernels disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 19 ifd_segmap_bnlm_1_4- inner node disablement + // 20 smurf_bnlm_1_0- inner node disablement + // 21 bnlm_3_4- inner node disablement + // 22 bxt_demosaic- inner node disablement + // 23 vcsc_2_0_b- inner node disablement + // 24 gltm_2_0- inner node disablement + // 25 ifd_segmap_xnr_1_4- inner node disablement + // 26 smurf_xnr_1_0- inner node disablement + // 27 xnr_5_4- inner node disablement + // 28 vcr_3_1- inner node disablement + // 29 glim_2_0- inner node disablement + // 30 ifd_segmap_acm_1_4- inner node disablement + // 31 smurf_acm_1_0- inner node disablement + // 32 acm_1_2- inner node disablement + // 33 gammatm_v4- inner node disablement + // 34 csc_1_1- inner node disablement + // 35 b2i_ds_1_1- inner node disablement + // 36 lbff_crop_espa_1_4- inner node disablement + // 37 image_upscaler_1_1- inner node disablement + // 38 ifd_segmap_cas_1_4- inner node disablement + // 39 smurf_cas_1_0- inner node disablement + // 40 cas_1_1- inner node disablement + // 41 odr_ofs_mp_1_4- inner node disablement + // 42 b2i_ds_output_1_1- inner node disablement + // 43 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFC00; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000004000006011 + bitmaps.rbm[0] = 0x6011; + bitmaps.rbm[1] = 0x40; + // DEB - 0x00000000000000000000000003800131 + bitmaps.deb[0] = 0x3800131; + // TEB - 0x0000000000004017 + bitmaps.teb[0] = 0x4017; + // REB - 0x00000000000000000000000003000187 + bitmaps.reb[0] = 0x3000187; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 19 ifd_segmap_bnlm_1_4- inner node disablement + // 20 smurf_bnlm_1_0- inner node disablement + // 21 bnlm_3_4- inner node disablement + // 22 bxt_demosaic- inner node disablement + // 23 vcsc_2_0_b- inner node disablement + // 24 gltm_2_0- inner node disablement + // 25 ifd_segmap_xnr_1_4- inner node disablement + // 26 smurf_xnr_1_0- inner node disablement + // 27 xnr_5_4- inner node disablement + // 28 vcr_3_1- inner node disablement + // 29 glim_2_0- inner node disablement + // 30 ifd_segmap_acm_1_4- inner node disablement + // 31 smurf_acm_1_0- inner node disablement + // 32 acm_1_2- inner node disablement + // 33 gammatm_v4- inner node disablement + // 34 csc_1_1- inner node disablement + // 35 b2i_ds_1_1- inner node disablement + // 36 lbff_crop_espa_1_4- inner node disablement + // 37 image_upscaler_1_1- inner node disablement + // 38 ifd_segmap_cas_1_4- inner node disablement + // 39 smurf_cas_1_0- inner node disablement + // 40 cas_1_1- inner node disablement + // 41 odr_ofs_mp_1_4- inner node disablement + // 42 b2i_ds_output_1_1- inner node disablement + // 43 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFF90; + } + else if (nodeRelevantInnerOptions == (noMp | noDp | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000200061 + bitmaps.rbm[0] = 0x200061; + // DEB - 0x00000000000000000000000000071031 + bitmaps.deb[0] = 0x71031; + // TEB - 0x0000000000041817 + bitmaps.teb[0] = 0x41817; + // REB - 0x0000000000000000000000000000100F + bitmaps.reb[0] = 0x100F; + + // Kernels disablement + // 3 dpc_2_2- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 19 ifd_segmap_bnlm_1_4- inner node disablement + // 20 smurf_bnlm_1_0- inner node disablement + // 21 bnlm_3_4- inner node disablement + // 22 bxt_demosaic- inner node disablement + // 23 vcsc_2_0_b- inner node disablement + // 24 gltm_2_0- inner node disablement + // 25 ifd_segmap_xnr_1_4- inner node disablement + // 26 smurf_xnr_1_0- inner node disablement + // 27 xnr_5_4- inner node disablement + // 28 vcr_3_1- inner node disablement + // 29 glim_2_0- inner node disablement + // 30 ifd_segmap_acm_1_4- inner node disablement + // 31 smurf_acm_1_0- inner node disablement + // 32 acm_1_2- inner node disablement + // 33 gammatm_v4- inner node disablement + // 34 csc_1_1- inner node disablement + // 35 b2i_ds_1_1- inner node disablement + // 36 lbff_crop_espa_1_4- inner node disablement + // 37 image_upscaler_1_1- inner node disablement + // 38 ifd_segmap_cas_1_4- inner node disablement + // 39 smurf_cas_1_0- inner node disablement + // 40 cas_1_1- inner node disablement + // 41 odr_ofs_mp_1_4- inner node disablement + // 42 b2i_ds_output_1_1- inner node disablement + // 43 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFC68; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgbs_grid_1_1- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 19 ifd_segmap_bnlm_1_4- inner node disablement + // 20 smurf_bnlm_1_0- inner node disablement + // 21 bnlm_3_4- inner node disablement + // 22 bxt_demosaic- inner node disablement + // 23 vcsc_2_0_b- inner node disablement + // 24 gltm_2_0- inner node disablement + // 25 ifd_segmap_xnr_1_4- inner node disablement + // 26 smurf_xnr_1_0- inner node disablement + // 27 xnr_5_4- inner node disablement + // 28 vcr_3_1- inner node disablement + // 29 glim_2_0- inner node disablement + // 30 ifd_segmap_acm_1_4- inner node disablement + // 31 smurf_acm_1_0- inner node disablement + // 32 acm_1_2- inner node disablement + // 33 gammatm_v4- inner node disablement + // 34 csc_1_1- inner node disablement + // 35 b2i_ds_1_1- inner node disablement + // 36 lbff_crop_espa_1_4- inner node disablement + // 37 image_upscaler_1_1- inner node disablement + // 38 ifd_segmap_cas_1_4- inner node disablement + // 39 smurf_cas_1_0- inner node disablement + // 40 cas_1_1- inner node disablement + // 41 odr_ofs_mp_1_4- inner node disablement + // 42 b2i_ds_output_1_1- inner node disablement + // 43 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x0000000000000000006400DD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x6400DD; + // DEB - 0x000000000000E1E00000FFFEEF9FF1F1 + bitmaps.deb[0] = 0xEF9FF1F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F0045E9F + bitmaps.teb[0] = 0xF0045E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffRgbIrNoGmvNoTnrWithSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 44; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0xFFFFFF83000; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0xFE000000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffRgbIrWithGmvNoTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 48; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noIr | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x0000000000000000006400FD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x6400FD; + // DEB - 0x000000000000E1E0000FFFFEEF8001F1 + bitmaps.deb[0] = 0xEF8001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F032409F + bitmaps.teb[0] = 0xF032409F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7C390; + } + else if (nodeRelevantInnerOptions == (noIr)) + { + // HW bitmaps + // RBM - 0x0000000000000000006400BD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E1E0000FFFFEED9FF1F1 + bitmaps.deb[0] = 0xED9FF1F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F0361E9F + bitmaps.teb[0] = 0xF0361E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x40; + } + else if (nodeRelevantInnerOptions == (no3A | noIr)) + { + // HW bitmaps + // RBM - 0x0000000000000000006400BD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E1E0000FFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F032009F + bitmaps.teb[0] = 0xF032009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7C3D0; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x0000000000000000004400FD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x4400FD; + // DEB - 0x000000000000C1E0000FFFFEEF9FF1F1 + bitmaps.deb[0] = 0xEF9FF1F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E0365E9F + bitmaps.teb[0] = 0xE0365E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 45 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x200000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x0000000000000000004400FD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x4400FD; + // DEB - 0x000000000000C1E0000FFFFEEF8001F1 + bitmaps.deb[0] = 0xEF8001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E032409F + bitmaps.teb[0] = 0xE032409F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 45 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x20000007C390; + } + else if (nodeRelevantInnerOptions == (noMp | noIr)) + { + // HW bitmaps + // RBM - 0x0000000000000000004400BD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C1E0000FFFFEED9FF1F1 + bitmaps.deb[0] = 0xED9FF1F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E0361E9F + bitmaps.teb[0] = 0xE0361E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + // 45 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x200000000040; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noIr)) + { + // HW bitmaps + // RBM - 0x0000000000000000004400BD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C1E0000FFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E032009F + bitmaps.teb[0] = 0xE032009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 45 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x20000007C3D0; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x0000000000000000002400FD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x2400FD; + // DEB - 0x00000000000021E0000FFFFEEF9FF1F1 + bitmaps.deb[0] = 0xEF9FF1F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D0365E9F + bitmaps.teb[0] = 0xD0365E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 46 b2i_ds_output_1_1- inner node disablement + // 47 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC00000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x0000000000000000002400FD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x2400FD; + // DEB - 0x00000000000021E0000FFFFEEF8001F1 + bitmaps.deb[0] = 0xEF8001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D032409F + bitmaps.teb[0] = 0xD032409F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 46 b2i_ds_output_1_1- inner node disablement + // 47 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC0000007C390; + } + else if (nodeRelevantInnerOptions == (noDp | noIr)) + { + // HW bitmaps + // RBM - 0x0000000000000000002400BD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x00000000000021E0000FFFFEED9FF1F1 + bitmaps.deb[0] = 0xED9FF1F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D0361E9F + bitmaps.teb[0] = 0xD0361E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + // 46 b2i_ds_output_1_1- inner node disablement + // 47 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC00000000040; + } + else if (nodeRelevantInnerOptions == (no3A | noDp | noIr)) + { + // HW bitmaps + // RBM - 0x0000000000000000002400BD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x00000000000021E0000FFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D032009F + bitmaps.teb[0] = 0xD032009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 46 b2i_ds_output_1_1- inner node disablement + // 47 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC0000007C3D0; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000004000206071 + bitmaps.rbm[0] = 0x206071; + bitmaps.rbm[1] = 0x40; + // DEB - 0x00000000000000000000000003871131 + bitmaps.deb[0] = 0x3871131; + // TEB - 0x0000000000045817 + bitmaps.teb[0] = 0x45817; + // REB - 0x0000000000000000000000000300118F + bitmaps.reb[0] = 0x300118F; + + // Kernels disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 19 ifd_gmv_1_4- inner node disablement + // 20 ifd_segmap_bnlm_1_4- inner node disablement + // 21 smurf_bnlm_1_0- inner node disablement + // 22 bnlm_3_4- inner node disablement + // 23 bxt_demosaic- inner node disablement + // 24 vcsc_2_0_b- inner node disablement + // 25 gltm_2_0- inner node disablement + // 26 ifd_segmap_xnr_1_4- inner node disablement + // 27 smurf_xnr_1_0- inner node disablement + // 28 xnr_5_4- inner node disablement + // 29 vcr_3_1- inner node disablement + // 30 glim_2_0- inner node disablement + // 31 ifd_segmap_acm_1_4- inner node disablement + // 32 smurf_acm_1_0- inner node disablement + // 33 acm_1_2- inner node disablement + // 34 gammatm_v4- inner node disablement + // 35 csc_1_1- inner node disablement + // 36 b2i_ds_1_1- inner node disablement + // 37 lbff_crop_espa_1_4- inner node disablement + // 38 image_upscaler_1_1- inner node disablement + // 39 gmv_statistics_1_1- inner node disablement + // 40 odr_gmv_feature_1_4- inner node disablement + // 41 odr_gmv_match_1_4- inner node disablement + // 42 ifd_segmap_cas_1_4- inner node disablement + // 43 smurf_cas_1_0- inner node disablement + // 44 cas_1_1- inner node disablement + // 45 odr_ofs_mp_1_4- inner node disablement + // 46 b2i_ds_output_1_1- inner node disablement + // 47 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFC00; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000004000006011 + bitmaps.rbm[0] = 0x6011; + bitmaps.rbm[1] = 0x40; + // DEB - 0x00000000000000000000000003800131 + bitmaps.deb[0] = 0x3800131; + // TEB - 0x0000000000004017 + bitmaps.teb[0] = 0x4017; + // REB - 0x00000000000000000000000003000187 + bitmaps.reb[0] = 0x3000187; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 19 ifd_gmv_1_4- inner node disablement + // 20 ifd_segmap_bnlm_1_4- inner node disablement + // 21 smurf_bnlm_1_0- inner node disablement + // 22 bnlm_3_4- inner node disablement + // 23 bxt_demosaic- inner node disablement + // 24 vcsc_2_0_b- inner node disablement + // 25 gltm_2_0- inner node disablement + // 26 ifd_segmap_xnr_1_4- inner node disablement + // 27 smurf_xnr_1_0- inner node disablement + // 28 xnr_5_4- inner node disablement + // 29 vcr_3_1- inner node disablement + // 30 glim_2_0- inner node disablement + // 31 ifd_segmap_acm_1_4- inner node disablement + // 32 smurf_acm_1_0- inner node disablement + // 33 acm_1_2- inner node disablement + // 34 gammatm_v4- inner node disablement + // 35 csc_1_1- inner node disablement + // 36 b2i_ds_1_1- inner node disablement + // 37 lbff_crop_espa_1_4- inner node disablement + // 38 image_upscaler_1_1- inner node disablement + // 39 gmv_statistics_1_1- inner node disablement + // 40 odr_gmv_feature_1_4- inner node disablement + // 41 odr_gmv_match_1_4- inner node disablement + // 42 ifd_segmap_cas_1_4- inner node disablement + // 43 smurf_cas_1_0- inner node disablement + // 44 cas_1_1- inner node disablement + // 45 odr_ofs_mp_1_4- inner node disablement + // 46 b2i_ds_output_1_1- inner node disablement + // 47 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFF90; + } + else if (nodeRelevantInnerOptions == (noMp | noDp | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000200061 + bitmaps.rbm[0] = 0x200061; + // DEB - 0x00000000000000000000000000071031 + bitmaps.deb[0] = 0x71031; + // TEB - 0x0000000000041817 + bitmaps.teb[0] = 0x41817; + // REB - 0x0000000000000000000000000000100F + bitmaps.reb[0] = 0x100F; + + // Kernels disablement + // 3 dpc_2_2- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 19 ifd_gmv_1_4- inner node disablement + // 20 ifd_segmap_bnlm_1_4- inner node disablement + // 21 smurf_bnlm_1_0- inner node disablement + // 22 bnlm_3_4- inner node disablement + // 23 bxt_demosaic- inner node disablement + // 24 vcsc_2_0_b- inner node disablement + // 25 gltm_2_0- inner node disablement + // 26 ifd_segmap_xnr_1_4- inner node disablement + // 27 smurf_xnr_1_0- inner node disablement + // 28 xnr_5_4- inner node disablement + // 29 vcr_3_1- inner node disablement + // 30 glim_2_0- inner node disablement + // 31 ifd_segmap_acm_1_4- inner node disablement + // 32 smurf_acm_1_0- inner node disablement + // 33 acm_1_2- inner node disablement + // 34 gammatm_v4- inner node disablement + // 35 csc_1_1- inner node disablement + // 36 b2i_ds_1_1- inner node disablement + // 37 lbff_crop_espa_1_4- inner node disablement + // 38 image_upscaler_1_1- inner node disablement + // 39 gmv_statistics_1_1- inner node disablement + // 40 odr_gmv_feature_1_4- inner node disablement + // 41 odr_gmv_match_1_4- inner node disablement + // 42 ifd_segmap_cas_1_4- inner node disablement + // 43 smurf_cas_1_0- inner node disablement + // 44 cas_1_1- inner node disablement + // 45 odr_ofs_mp_1_4- inner node disablement + // 46 b2i_ds_output_1_1- inner node disablement + // 47 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFC68; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgbs_grid_1_1- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 19 ifd_gmv_1_4- inner node disablement + // 20 ifd_segmap_bnlm_1_4- inner node disablement + // 21 smurf_bnlm_1_0- inner node disablement + // 22 bnlm_3_4- inner node disablement + // 23 bxt_demosaic- inner node disablement + // 24 vcsc_2_0_b- inner node disablement + // 25 gltm_2_0- inner node disablement + // 26 ifd_segmap_xnr_1_4- inner node disablement + // 27 smurf_xnr_1_0- inner node disablement + // 28 xnr_5_4- inner node disablement + // 29 vcr_3_1- inner node disablement + // 30 glim_2_0- inner node disablement + // 31 ifd_segmap_acm_1_4- inner node disablement + // 32 smurf_acm_1_0- inner node disablement + // 33 acm_1_2- inner node disablement + // 34 gammatm_v4- inner node disablement + // 35 csc_1_1- inner node disablement + // 36 b2i_ds_1_1- inner node disablement + // 37 lbff_crop_espa_1_4- inner node disablement + // 38 image_upscaler_1_1- inner node disablement + // 39 gmv_statistics_1_1- inner node disablement + // 40 odr_gmv_feature_1_4- inner node disablement + // 41 odr_gmv_match_1_4- inner node disablement + // 42 ifd_segmap_cas_1_4- inner node disablement + // 43 smurf_cas_1_0- inner node disablement + // 44 cas_1_1- inner node disablement + // 45 odr_ofs_mp_1_4- inner node disablement + // 46 b2i_ds_output_1_1- inner node disablement + // 47 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x0000000000000000006400FD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x6400FD; + // DEB - 0x000000000000E1E0000FFFFEEF9FF1F1 + bitmaps.deb[0] = 0xEF9FF1F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F0365E9F + bitmaps.teb[0] = 0xF0365E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffRgbIrWithGmvNoTnrWithSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 48; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0xFFFFFFF83000; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0xFC4000000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffRgbIrNoGmvWithTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 60; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noIr | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FCDD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x67FCDD; + // DEB - 0x000000000000E1FFFFF0FFFEEF8001F1 + bitmaps.deb[0] = 0xEF8001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFC0409F + bitmaps.teb[0] = 0xFFC0409F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7C390; + } + else if (nodeRelevantInnerOptions == (noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FC9D503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E1FFFFF0FFFEED9FF1F1 + bitmaps.deb[0] = 0xED9FF1F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFC41E9F + bitmaps.teb[0] = 0xFFC41E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x40; + } + else if (nodeRelevantInnerOptions == (no3A | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FC9D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E1FFFFF0FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFC0009F + bitmaps.teb[0] = 0xFFC0009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7C3D0; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FCDD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x47FCDD; + // DEB - 0x000000000000C1FFFFF0FFFEEF9FF1F1 + bitmaps.deb[0] = 0xEF9FF1F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFC45E9F + bitmaps.teb[0] = 0xEFC45E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 57 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x200000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FCDD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x47FCDD; + // DEB - 0x000000000000C1FFFFF0FFFEEF8001F1 + bitmaps.deb[0] = 0xEF8001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFC0409F + bitmaps.teb[0] = 0xEFC0409F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 57 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x20000000007C390; + } + else if (nodeRelevantInnerOptions == (noMp | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C1FFFFF0FFFEED9FF1F1 + bitmaps.deb[0] = 0xED9FF1F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFC41E9F + bitmaps.teb[0] = 0xEFC41E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + // 57 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x200000000000040; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C1FFFFF0FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFC0009F + bitmaps.teb[0] = 0xEFC0009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 57 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x20000000007C3D0; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FCDD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x27FCDD; + // DEB - 0x00000000000021FFFFF0FFFEEF9FF1F1 + bitmaps.deb[0] = 0xEF9FF1F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFC45E9F + bitmaps.teb[0] = 0xDFC45E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 58 b2i_ds_output_1_1- inner node disablement + // 59 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC00000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FCDD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x27FCDD; + // DEB - 0x00000000000021FFFFF0FFFEEF8001F1 + bitmaps.deb[0] = 0xEF8001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFC0409F + bitmaps.teb[0] = 0xDFC0409F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 58 b2i_ds_output_1_1- inner node disablement + // 59 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC0000000007C390; + } + else if (nodeRelevantInnerOptions == (noDp | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x00000000000021FFFFF0FFFEED9FF1F1 + bitmaps.deb[0] = 0xED9FF1F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFC41E9F + bitmaps.teb[0] = 0xDFC41E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + // 58 b2i_ds_output_1_1- inner node disablement + // 59 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC00000000000040; + } + else if (nodeRelevantInnerOptions == (no3A | noDp | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x00000000000021FFFFF0FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFC0009F + bitmaps.teb[0] = 0xDFC0009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 58 b2i_ds_output_1_1- inner node disablement + // 59 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC0000000007C3D0; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000004000206071 + bitmaps.rbm[0] = 0x206071; + bitmaps.rbm[1] = 0x40; + // DEB - 0x00000000000000000000000003871131 + bitmaps.deb[0] = 0x3871131; + // TEB - 0x0000000000045817 + bitmaps.teb[0] = 0x45817; + // REB - 0x0000000000000000000000000300118F + bitmaps.reb[0] = 0x300118F; + + // Kernels disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 19 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 20 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 21 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 22 ifd_segmap_bnlm_1_4- inner node disablement + // 23 smurf_bnlm_1_0- inner node disablement + // 24 bnlm_3_4- inner node disablement + // 25 bxt_demosaic- inner node disablement + // 26 vcsc_2_0_b- inner node disablement + // 27 gltm_2_0- inner node disablement + // 28 ifd_segmap_xnr_1_4- inner node disablement + // 29 smurf_xnr_1_0- inner node disablement + // 30 xnr_5_4- inner node disablement + // 31 vcr_3_1- inner node disablement + // 32 glim_2_0- inner node disablement + // 33 ifd_segmap_acm_1_4- inner node disablement + // 34 smurf_acm_1_0- inner node disablement + // 35 acm_1_2- inner node disablement + // 36 gammatm_v4- inner node disablement + // 37 csc_1_1- inner node disablement + // 38 b2i_ds_1_1- inner node disablement + // 39 lbff_crop_espa_1_4- inner node disablement + // 40 tnr7_spatial_1_1- inner node disablement + // 41 tnr_scaler_lb_1_1- inner node disablement + // 42 tnr7_ims_1_2- inner node disablement + // 43 ifd_segmap_tnr_bc_1_4- inner node disablement + // 44 smurf_tnr_bc_1_0- inner node disablement + // 45 tnr7_bc_1_2- inner node disablement + // 46 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 47 ifd_segmap_tnr_blend_1_4- inner node disablement + // 48 smurf_tnr_blend_1_0- inner node disablement + // 49 tnr7_blend_1_1- inner node disablement + // 50 odr_tnr_fp_yuvn_1_4- inner node disablement + // 51 tnr_scaler_fp_1_1- inner node disablement + // 52 image_upscaler_1_1- inner node disablement + // 53 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 54 ifd_segmap_cas_1_4- inner node disablement + // 55 smurf_cas_1_0- inner node disablement + // 56 cas_1_1- inner node disablement + // 57 odr_ofs_mp_1_4- inner node disablement + // 58 b2i_ds_output_1_1- inner node disablement + // 59 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFFFC00; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000004000006011 + bitmaps.rbm[0] = 0x6011; + bitmaps.rbm[1] = 0x40; + // DEB - 0x00000000000000000000000003800131 + bitmaps.deb[0] = 0x3800131; + // TEB - 0x0000000000004017 + bitmaps.teb[0] = 0x4017; + // REB - 0x00000000000000000000000003000187 + bitmaps.reb[0] = 0x3000187; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 19 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 20 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 21 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 22 ifd_segmap_bnlm_1_4- inner node disablement + // 23 smurf_bnlm_1_0- inner node disablement + // 24 bnlm_3_4- inner node disablement + // 25 bxt_demosaic- inner node disablement + // 26 vcsc_2_0_b- inner node disablement + // 27 gltm_2_0- inner node disablement + // 28 ifd_segmap_xnr_1_4- inner node disablement + // 29 smurf_xnr_1_0- inner node disablement + // 30 xnr_5_4- inner node disablement + // 31 vcr_3_1- inner node disablement + // 32 glim_2_0- inner node disablement + // 33 ifd_segmap_acm_1_4- inner node disablement + // 34 smurf_acm_1_0- inner node disablement + // 35 acm_1_2- inner node disablement + // 36 gammatm_v4- inner node disablement + // 37 csc_1_1- inner node disablement + // 38 b2i_ds_1_1- inner node disablement + // 39 lbff_crop_espa_1_4- inner node disablement + // 40 tnr7_spatial_1_1- inner node disablement + // 41 tnr_scaler_lb_1_1- inner node disablement + // 42 tnr7_ims_1_2- inner node disablement + // 43 ifd_segmap_tnr_bc_1_4- inner node disablement + // 44 smurf_tnr_bc_1_0- inner node disablement + // 45 tnr7_bc_1_2- inner node disablement + // 46 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 47 ifd_segmap_tnr_blend_1_4- inner node disablement + // 48 smurf_tnr_blend_1_0- inner node disablement + // 49 tnr7_blend_1_1- inner node disablement + // 50 odr_tnr_fp_yuvn_1_4- inner node disablement + // 51 tnr_scaler_fp_1_1- inner node disablement + // 52 image_upscaler_1_1- inner node disablement + // 53 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 54 ifd_segmap_cas_1_4- inner node disablement + // 55 smurf_cas_1_0- inner node disablement + // 56 cas_1_1- inner node disablement + // 57 odr_ofs_mp_1_4- inner node disablement + // 58 b2i_ds_output_1_1- inner node disablement + // 59 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFFFF90; + } + else if (nodeRelevantInnerOptions == (noMp | noDp | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000200061 + bitmaps.rbm[0] = 0x200061; + // DEB - 0x00000000000000000000000000071031 + bitmaps.deb[0] = 0x71031; + // TEB - 0x0000000000041817 + bitmaps.teb[0] = 0x41817; + // REB - 0x0000000000000000000000000000100F + bitmaps.reb[0] = 0x100F; + + // Kernels disablement + // 3 dpc_2_2- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 19 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 20 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 21 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 22 ifd_segmap_bnlm_1_4- inner node disablement + // 23 smurf_bnlm_1_0- inner node disablement + // 24 bnlm_3_4- inner node disablement + // 25 bxt_demosaic- inner node disablement + // 26 vcsc_2_0_b- inner node disablement + // 27 gltm_2_0- inner node disablement + // 28 ifd_segmap_xnr_1_4- inner node disablement + // 29 smurf_xnr_1_0- inner node disablement + // 30 xnr_5_4- inner node disablement + // 31 vcr_3_1- inner node disablement + // 32 glim_2_0- inner node disablement + // 33 ifd_segmap_acm_1_4- inner node disablement + // 34 smurf_acm_1_0- inner node disablement + // 35 acm_1_2- inner node disablement + // 36 gammatm_v4- inner node disablement + // 37 csc_1_1- inner node disablement + // 38 b2i_ds_1_1- inner node disablement + // 39 lbff_crop_espa_1_4- inner node disablement + // 40 tnr7_spatial_1_1- inner node disablement + // 41 tnr_scaler_lb_1_1- inner node disablement + // 42 tnr7_ims_1_2- inner node disablement + // 43 ifd_segmap_tnr_bc_1_4- inner node disablement + // 44 smurf_tnr_bc_1_0- inner node disablement + // 45 tnr7_bc_1_2- inner node disablement + // 46 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 47 ifd_segmap_tnr_blend_1_4- inner node disablement + // 48 smurf_tnr_blend_1_0- inner node disablement + // 49 tnr7_blend_1_1- inner node disablement + // 50 odr_tnr_fp_yuvn_1_4- inner node disablement + // 51 tnr_scaler_fp_1_1- inner node disablement + // 52 image_upscaler_1_1- inner node disablement + // 53 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 54 ifd_segmap_cas_1_4- inner node disablement + // 55 smurf_cas_1_0- inner node disablement + // 56 cas_1_1- inner node disablement + // 57 odr_ofs_mp_1_4- inner node disablement + // 58 b2i_ds_output_1_1- inner node disablement + // 59 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFFFC68; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgbs_grid_1_1- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 19 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 20 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 21 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 22 ifd_segmap_bnlm_1_4- inner node disablement + // 23 smurf_bnlm_1_0- inner node disablement + // 24 bnlm_3_4- inner node disablement + // 25 bxt_demosaic- inner node disablement + // 26 vcsc_2_0_b- inner node disablement + // 27 gltm_2_0- inner node disablement + // 28 ifd_segmap_xnr_1_4- inner node disablement + // 29 smurf_xnr_1_0- inner node disablement + // 30 xnr_5_4- inner node disablement + // 31 vcr_3_1- inner node disablement + // 32 glim_2_0- inner node disablement + // 33 ifd_segmap_acm_1_4- inner node disablement + // 34 smurf_acm_1_0- inner node disablement + // 35 acm_1_2- inner node disablement + // 36 gammatm_v4- inner node disablement + // 37 csc_1_1- inner node disablement + // 38 b2i_ds_1_1- inner node disablement + // 39 lbff_crop_espa_1_4- inner node disablement + // 40 tnr7_spatial_1_1- inner node disablement + // 41 tnr_scaler_lb_1_1- inner node disablement + // 42 tnr7_ims_1_2- inner node disablement + // 43 ifd_segmap_tnr_bc_1_4- inner node disablement + // 44 smurf_tnr_bc_1_0- inner node disablement + // 45 tnr7_bc_1_2- inner node disablement + // 46 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 47 ifd_segmap_tnr_blend_1_4- inner node disablement + // 48 smurf_tnr_blend_1_0- inner node disablement + // 49 tnr7_blend_1_1- inner node disablement + // 50 odr_tnr_fp_yuvn_1_4- inner node disablement + // 51 tnr_scaler_fp_1_1- inner node disablement + // 52 image_upscaler_1_1- inner node disablement + // 53 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 54 ifd_segmap_cas_1_4- inner node disablement + // 55 smurf_cas_1_0- inner node disablement + // 56 cas_1_1- inner node disablement + // 57 odr_ofs_mp_1_4- inner node disablement + // 58 b2i_ds_output_1_1- inner node disablement + // 59 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000067FCDD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x67FCDD; + // DEB - 0x000000000000E1FFFFF0FFFEEF9FF1F1 + bitmaps.deb[0] = 0xEF9FF1F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFC45E9F + bitmaps.teb[0] = 0xFFC45E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffRgbIrNoGmvWithTnrWithSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 60; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0xFFFFFFFFFF83000; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0xFD0000000000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffRgbIrWithGmvWithTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 64; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noIr | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FCFD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x67FCFD; + // DEB - 0x000000000000E1FFFFFFFFFEEF8001F1 + bitmaps.deb[0] = 0xEF8001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFF2409F + bitmaps.teb[0] = 0xFFF2409F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7C390; + } + else if (nodeRelevantInnerOptions == (noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FCBD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E1FFFFFFFFFEED9FF1F1 + bitmaps.deb[0] = 0xED9FF1F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFF61E9F + bitmaps.teb[0] = 0xFFF61E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x40; + } + else if (nodeRelevantInnerOptions == (no3A | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FCBD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E1FFFFFFFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFF2009F + bitmaps.teb[0] = 0xFFF2009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7C3D0; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FCFD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x47FCFD; + // DEB - 0x000000000000C1FFFFFFFFFEEF9FF1F1 + bitmaps.deb[0] = 0xEF9FF1F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFF65E9F + bitmaps.teb[0] = 0xEFF65E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 61 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x2000000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FCFD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x47FCFD; + // DEB - 0x000000000000C1FFFFFFFFFEEF8001F1 + bitmaps.deb[0] = 0xEF8001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFF2409F + bitmaps.teb[0] = 0xEFF2409F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 61 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x200000000007C390; + } + else if (nodeRelevantInnerOptions == (noMp | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C1FFFFFFFFFEED9FF1F1 + bitmaps.deb[0] = 0xED9FF1F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFF61E9F + bitmaps.teb[0] = 0xEFF61E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + // 61 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x2000000000000040; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C1FFFFFFFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFF2009F + bitmaps.teb[0] = 0xEFF2009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 61 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x200000000007C3D0; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FCFD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x27FCFD; + // DEB - 0x00000000000021FFFFFFFFFEEF9FF1F1 + bitmaps.deb[0] = 0xEF9FF1F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFF65E9F + bitmaps.teb[0] = 0xDFF65E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 62 b2i_ds_output_1_1- inner node disablement + // 63 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC000000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FCFD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x27FCFD; + // DEB - 0x00000000000021FFFFFFFFFEEF8001F1 + bitmaps.deb[0] = 0xEF8001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFF2409F + bitmaps.teb[0] = 0xDFF2409F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 62 b2i_ds_output_1_1- inner node disablement + // 63 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC00000000007C390; + } + else if (nodeRelevantInnerOptions == (noDp | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x00000000000021FFFFFFFFFEED9FF1F1 + bitmaps.deb[0] = 0xED9FF1F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFF61E9F + bitmaps.teb[0] = 0xDFF61E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + // 62 b2i_ds_output_1_1- inner node disablement + // 63 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC000000000000040; + } + else if (nodeRelevantInnerOptions == (no3A | noDp | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x00000000000021FFFFFFFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFF2009F + bitmaps.teb[0] = 0xDFF2009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 62 b2i_ds_output_1_1- inner node disablement + // 63 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC00000000007C3D0; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000004000206071 + bitmaps.rbm[0] = 0x206071; + bitmaps.rbm[1] = 0x40; + // DEB - 0x00000000000000000000000003871131 + bitmaps.deb[0] = 0x3871131; + // TEB - 0x0000000000045817 + bitmaps.teb[0] = 0x45817; + // REB - 0x0000000000000000000000000300118F + bitmaps.reb[0] = 0x300118F; + + // Kernels disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 19 ifd_gmv_1_4- inner node disablement + // 20 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 21 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 22 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 23 ifd_segmap_bnlm_1_4- inner node disablement + // 24 smurf_bnlm_1_0- inner node disablement + // 25 bnlm_3_4- inner node disablement + // 26 bxt_demosaic- inner node disablement + // 27 vcsc_2_0_b- inner node disablement + // 28 gltm_2_0- inner node disablement + // 29 ifd_segmap_xnr_1_4- inner node disablement + // 30 smurf_xnr_1_0- inner node disablement + // 31 xnr_5_4- inner node disablement + // 32 vcr_3_1- inner node disablement + // 33 glim_2_0- inner node disablement + // 34 ifd_segmap_acm_1_4- inner node disablement + // 35 smurf_acm_1_0- inner node disablement + // 36 acm_1_2- inner node disablement + // 37 gammatm_v4- inner node disablement + // 38 csc_1_1- inner node disablement + // 39 b2i_ds_1_1- inner node disablement + // 40 lbff_crop_espa_1_4- inner node disablement + // 41 tnr7_spatial_1_1- inner node disablement + // 42 tnr_scaler_lb_1_1- inner node disablement + // 43 tnr7_ims_1_2- inner node disablement + // 44 gmv_statistics_1_1- inner node disablement + // 45 odr_gmv_feature_1_4- inner node disablement + // 46 odr_gmv_match_1_4- inner node disablement + // 47 ifd_segmap_tnr_bc_1_4- inner node disablement + // 48 smurf_tnr_bc_1_0- inner node disablement + // 49 tnr7_bc_1_2- inner node disablement + // 50 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 51 ifd_segmap_tnr_blend_1_4- inner node disablement + // 52 smurf_tnr_blend_1_0- inner node disablement + // 53 tnr7_blend_1_1- inner node disablement + // 54 odr_tnr_fp_yuvn_1_4- inner node disablement + // 55 tnr_scaler_fp_1_1- inner node disablement + // 56 image_upscaler_1_1- inner node disablement + // 57 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 58 ifd_segmap_cas_1_4- inner node disablement + // 59 smurf_cas_1_0- inner node disablement + // 60 cas_1_1- inner node disablement + // 61 odr_ofs_mp_1_4- inner node disablement + // 62 b2i_ds_output_1_1- inner node disablement + // 63 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFFFFC00; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000004000006011 + bitmaps.rbm[0] = 0x6011; + bitmaps.rbm[1] = 0x40; + // DEB - 0x00000000000000000000000003800131 + bitmaps.deb[0] = 0x3800131; + // TEB - 0x0000000000004017 + bitmaps.teb[0] = 0x4017; + // REB - 0x00000000000000000000000003000187 + bitmaps.reb[0] = 0x3000187; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 19 ifd_gmv_1_4- inner node disablement + // 20 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 21 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 22 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 23 ifd_segmap_bnlm_1_4- inner node disablement + // 24 smurf_bnlm_1_0- inner node disablement + // 25 bnlm_3_4- inner node disablement + // 26 bxt_demosaic- inner node disablement + // 27 vcsc_2_0_b- inner node disablement + // 28 gltm_2_0- inner node disablement + // 29 ifd_segmap_xnr_1_4- inner node disablement + // 30 smurf_xnr_1_0- inner node disablement + // 31 xnr_5_4- inner node disablement + // 32 vcr_3_1- inner node disablement + // 33 glim_2_0- inner node disablement + // 34 ifd_segmap_acm_1_4- inner node disablement + // 35 smurf_acm_1_0- inner node disablement + // 36 acm_1_2- inner node disablement + // 37 gammatm_v4- inner node disablement + // 38 csc_1_1- inner node disablement + // 39 b2i_ds_1_1- inner node disablement + // 40 lbff_crop_espa_1_4- inner node disablement + // 41 tnr7_spatial_1_1- inner node disablement + // 42 tnr_scaler_lb_1_1- inner node disablement + // 43 tnr7_ims_1_2- inner node disablement + // 44 gmv_statistics_1_1- inner node disablement + // 45 odr_gmv_feature_1_4- inner node disablement + // 46 odr_gmv_match_1_4- inner node disablement + // 47 ifd_segmap_tnr_bc_1_4- inner node disablement + // 48 smurf_tnr_bc_1_0- inner node disablement + // 49 tnr7_bc_1_2- inner node disablement + // 50 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 51 ifd_segmap_tnr_blend_1_4- inner node disablement + // 52 smurf_tnr_blend_1_0- inner node disablement + // 53 tnr7_blend_1_1- inner node disablement + // 54 odr_tnr_fp_yuvn_1_4- inner node disablement + // 55 tnr_scaler_fp_1_1- inner node disablement + // 56 image_upscaler_1_1- inner node disablement + // 57 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 58 ifd_segmap_cas_1_4- inner node disablement + // 59 smurf_cas_1_0- inner node disablement + // 60 cas_1_1- inner node disablement + // 61 odr_ofs_mp_1_4- inner node disablement + // 62 b2i_ds_output_1_1- inner node disablement + // 63 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFFFFF90; + } + else if (nodeRelevantInnerOptions == (noMp | noDp | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000200061 + bitmaps.rbm[0] = 0x200061; + // DEB - 0x00000000000000000000000000071031 + bitmaps.deb[0] = 0x71031; + // TEB - 0x0000000000041817 + bitmaps.teb[0] = 0x41817; + // REB - 0x0000000000000000000000000000100F + bitmaps.reb[0] = 0x100F; + + // Kernels disablement + // 3 dpc_2_2- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 19 ifd_gmv_1_4- inner node disablement + // 20 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 21 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 22 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 23 ifd_segmap_bnlm_1_4- inner node disablement + // 24 smurf_bnlm_1_0- inner node disablement + // 25 bnlm_3_4- inner node disablement + // 26 bxt_demosaic- inner node disablement + // 27 vcsc_2_0_b- inner node disablement + // 28 gltm_2_0- inner node disablement + // 29 ifd_segmap_xnr_1_4- inner node disablement + // 30 smurf_xnr_1_0- inner node disablement + // 31 xnr_5_4- inner node disablement + // 32 vcr_3_1- inner node disablement + // 33 glim_2_0- inner node disablement + // 34 ifd_segmap_acm_1_4- inner node disablement + // 35 smurf_acm_1_0- inner node disablement + // 36 acm_1_2- inner node disablement + // 37 gammatm_v4- inner node disablement + // 38 csc_1_1- inner node disablement + // 39 b2i_ds_1_1- inner node disablement + // 40 lbff_crop_espa_1_4- inner node disablement + // 41 tnr7_spatial_1_1- inner node disablement + // 42 tnr_scaler_lb_1_1- inner node disablement + // 43 tnr7_ims_1_2- inner node disablement + // 44 gmv_statistics_1_1- inner node disablement + // 45 odr_gmv_feature_1_4- inner node disablement + // 46 odr_gmv_match_1_4- inner node disablement + // 47 ifd_segmap_tnr_bc_1_4- inner node disablement + // 48 smurf_tnr_bc_1_0- inner node disablement + // 49 tnr7_bc_1_2- inner node disablement + // 50 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 51 ifd_segmap_tnr_blend_1_4- inner node disablement + // 52 smurf_tnr_blend_1_0- inner node disablement + // 53 tnr7_blend_1_1- inner node disablement + // 54 odr_tnr_fp_yuvn_1_4- inner node disablement + // 55 tnr_scaler_fp_1_1- inner node disablement + // 56 image_upscaler_1_1- inner node disablement + // 57 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 58 ifd_segmap_cas_1_4- inner node disablement + // 59 smurf_cas_1_0- inner node disablement + // 60 cas_1_1- inner node disablement + // 61 odr_ofs_mp_1_4- inner node disablement + // 62 b2i_ds_output_1_1- inner node disablement + // 63 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFFFFC68; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp | noIr)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgbs_grid_1_1- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 19 ifd_gmv_1_4- inner node disablement + // 20 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 21 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 22 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 23 ifd_segmap_bnlm_1_4- inner node disablement + // 24 smurf_bnlm_1_0- inner node disablement + // 25 bnlm_3_4- inner node disablement + // 26 bxt_demosaic- inner node disablement + // 27 vcsc_2_0_b- inner node disablement + // 28 gltm_2_0- inner node disablement + // 29 ifd_segmap_xnr_1_4- inner node disablement + // 30 smurf_xnr_1_0- inner node disablement + // 31 xnr_5_4- inner node disablement + // 32 vcr_3_1- inner node disablement + // 33 glim_2_0- inner node disablement + // 34 ifd_segmap_acm_1_4- inner node disablement + // 35 smurf_acm_1_0- inner node disablement + // 36 acm_1_2- inner node disablement + // 37 gammatm_v4- inner node disablement + // 38 csc_1_1- inner node disablement + // 39 b2i_ds_1_1- inner node disablement + // 40 lbff_crop_espa_1_4- inner node disablement + // 41 tnr7_spatial_1_1- inner node disablement + // 42 tnr_scaler_lb_1_1- inner node disablement + // 43 tnr7_ims_1_2- inner node disablement + // 44 gmv_statistics_1_1- inner node disablement + // 45 odr_gmv_feature_1_4- inner node disablement + // 46 odr_gmv_match_1_4- inner node disablement + // 47 ifd_segmap_tnr_bc_1_4- inner node disablement + // 48 smurf_tnr_bc_1_0- inner node disablement + // 49 tnr7_bc_1_2- inner node disablement + // 50 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 51 ifd_segmap_tnr_blend_1_4- inner node disablement + // 52 smurf_tnr_blend_1_0- inner node disablement + // 53 tnr7_blend_1_1- inner node disablement + // 54 odr_tnr_fp_yuvn_1_4- inner node disablement + // 55 tnr_scaler_fp_1_1- inner node disablement + // 56 image_upscaler_1_1- inner node disablement + // 57 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 58 ifd_segmap_cas_1_4- inner node disablement + // 59 smurf_cas_1_0- inner node disablement + // 60 cas_1_1- inner node disablement + // 61 odr_ofs_mp_1_4- inner node disablement + // 62 b2i_ds_output_1_1- inner node disablement + // 63 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000067FCFD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x67FCFD; + // DEB - 0x000000000000E1FFFFFFFFFEEF9FF1F1 + bitmaps.deb[0] = 0xEF9FF1F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFF65E9F + bitmaps.teb[0] = 0xFFF65E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffRgbIrWithGmvWithTnrWithSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 64; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0xFFFFFFFFFFF83000; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0xFD00000000000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffIrNoGmvNoTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 39; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[7].run_kernel.enable = 0; // wb_1_1 + nodeKernels.kernelList[19].run_kernel.enable = 0; // bxt_demosaic + nodeKernels.kernelList[27].run_kernel.enable = 0; // acm_1_2 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000064001D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x64001D; + // DEB - 0x000000000000E1E00000F9FEEC0001F1 + bitmaps.deb[0] = 0xEC0001F1; + bitmaps.deb[1] = 0xF9FE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000008F000009F + bitmaps.teb[0] = 0xF000009F; + bitmaps.teb[1] = 0x8; + // REB - 0x00000000000000000000001F10F607E7 + bitmaps.reb[0] = 0x10F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 8 rgbs_grid_1_1- inner node disablement + // 9 ccm_3a_2_0- inner node disablement + // 10 fr_grid_1_0- inner node disablement + // 11 odr_awb_std_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFF00; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000044001D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x44001D; + // DEB - 0x000000000000C1E00000F9FEEC1BF1F1 + bitmaps.deb[0] = 0xEC1BF1F1; + bitmaps.deb[1] = 0xF9FE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000008E0001E9F + bitmaps.teb[0] = 0xE0001E9F; + bitmaps.teb[1] = 0x8; + // REB - 0x00000000000000000000001F10F67FE7 + bitmaps.reb[0] = 0x10F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 36 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000044001D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x44001D; + // DEB - 0x000000000000C1E00000F9FEEC0001F1 + bitmaps.deb[0] = 0xEC0001F1; + bitmaps.deb[1] = 0xF9FE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000008E000009F + bitmaps.teb[0] = 0xE000009F; + bitmaps.teb[1] = 0x8; + // REB - 0x00000000000000000000001F10F607E7 + bitmaps.reb[0] = 0x10F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 8 rgbs_grid_1_1- inner node disablement + // 9 ccm_3a_2_0- inner node disablement + // 10 fr_grid_1_0- inner node disablement + // 11 odr_awb_std_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 odr_af_std_1_4- inner node disablement + // 36 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x100000FF00; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000024001D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x24001D; + // DEB - 0x00000000000021E00000F9FEEC1BF1F1 + bitmaps.deb[0] = 0xEC1BF1F1; + bitmaps.deb[1] = 0xF9FE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000008D0001E9F + bitmaps.teb[0] = 0xD0001E9F; + bitmaps.teb[1] = 0x8; + // REB - 0x00000000000000000000001F10F67FE7 + bitmaps.reb[0] = 0x10F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 37 b2i_ds_output_1_1- inner node disablement + // 38 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x6000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000024001D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x24001D; + // DEB - 0x00000000000021E00000F9FEEC0001F1 + bitmaps.deb[0] = 0xEC0001F1; + bitmaps.deb[1] = 0xF9FE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000008D000009F + bitmaps.teb[0] = 0xD000009F; + bitmaps.teb[1] = 0x8; + // REB - 0x00000000000000000000001F10F607E7 + bitmaps.reb[0] = 0x10F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 8 rgbs_grid_1_1- inner node disablement + // 9 ccm_3a_2_0- inner node disablement + // 10 fr_grid_1_0- inner node disablement + // 11 odr_awb_std_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 odr_af_std_1_4- inner node disablement + // 37 b2i_ds_output_1_1- inner node disablement + // 38 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x600000FF00; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000000001E9009 + bitmaps.rbm[0] = 0x1E9009; + // DEB - 0x000000000000000000000000001BF1F1 + bitmaps.deb[0] = 0x1BF1F1; + // TEB - 0x0000000000001E97 + bitmaps.teb[0] = 0x1E97; + // REB - 0x00000000000000000000000000007FE7 + bitmaps.reb[0] = 0x7FE7; + + // Kernels disablement + // 6 gd_2_2- inner node disablement + // 7 wb_1_1- inner node disablement + // 16 ifd_segmap_bnlm_1_4- inner node disablement + // 17 smurf_bnlm_1_0- inner node disablement + // 18 bnlm_3_4- inner node disablement + // 19 bxt_demosaic- inner node disablement + // 20 vcsc_2_0_b- inner node disablement + // 21 gltm_2_0- inner node disablement + // 22 ifd_segmap_xnr_1_4- inner node disablement + // 23 smurf_xnr_1_0- inner node disablement + // 24 xnr_5_4- inner node disablement + // 25 vcr_3_1- inner node disablement + // 26 glim_2_0- inner node disablement + // 27 acm_1_2- inner node disablement + // 28 gammatm_v4- inner node disablement + // 29 csc_1_1- inner node disablement + // 30 b2i_ds_1_1- inner node disablement + // 31 lbff_crop_espa_1_4- inner node disablement + // 32 image_upscaler_1_1- inner node disablement + // 33 ifd_segmap_cas_1_4- inner node disablement + // 34 smurf_cas_1_0- inner node disablement + // 35 cas_1_1- inner node disablement + // 36 odr_ofs_mp_1_4- inner node disablement + // 37 b2i_ds_output_1_1- inner node disablement + // 38 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFF00C0; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 ifd_lsc_1_4- inner node disablement + // 4 lsc_1_2- inner node disablement + // 5 dpc_2_2- inner node disablement + // 6 gd_2_2- inner node disablement + // 7 wb_1_1- inner node disablement + // 8 rgbs_grid_1_1- inner node disablement + // 9 ccm_3a_2_0- inner node disablement + // 10 fr_grid_1_0- inner node disablement + // 11 odr_awb_std_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 odr_af_std_1_4- inner node disablement + // 16 ifd_segmap_bnlm_1_4- inner node disablement + // 17 smurf_bnlm_1_0- inner node disablement + // 18 bnlm_3_4- inner node disablement + // 19 bxt_demosaic- inner node disablement + // 20 vcsc_2_0_b- inner node disablement + // 21 gltm_2_0- inner node disablement + // 22 ifd_segmap_xnr_1_4- inner node disablement + // 23 smurf_xnr_1_0- inner node disablement + // 24 xnr_5_4- inner node disablement + // 25 vcr_3_1- inner node disablement + // 26 glim_2_0- inner node disablement + // 27 acm_1_2- inner node disablement + // 28 gammatm_v4- inner node disablement + // 29 csc_1_1- inner node disablement + // 30 b2i_ds_1_1- inner node disablement + // 31 lbff_crop_espa_1_4- inner node disablement + // 32 image_upscaler_1_1- inner node disablement + // 33 ifd_segmap_cas_1_4- inner node disablement + // 34 smurf_cas_1_0- inner node disablement + // 35 cas_1_1- inner node disablement + // 36 odr_ofs_mp_1_4- inner node disablement + // 37 b2i_ds_output_1_1- inner node disablement + // 38 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000064001D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x64001D; + // DEB - 0x000000000000E1E00000F9FEEC1BF1F1 + bitmaps.deb[0] = 0xEC1BF1F1; + bitmaps.deb[1] = 0xF9FE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000008F0001E9F + bitmaps.teb[0] = 0xF0001E9F; + bitmaps.teb[1] = 0x8; + // REB - 0x00000000000000000000001F10F67FE7 + bitmaps.reb[0] = 0x10F67FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffIrNoGmvNoTnrWithSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 39; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[7].run_kernel.enable = 0; // wb_1_1 + nodeKernels.kernelList[19].run_kernel.enable = 0; // bxt_demosaic + nodeKernels.kernelList[27].run_kernel.enable = 0; // acm_1_2 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x7FFFFF00C0; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x7F00000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffIrWithGmvNoTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 43; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[7].run_kernel.enable = 0; // wb_1_1 + nodeKernels.kernelList[20].run_kernel.enable = 0; // bxt_demosaic + nodeKernels.kernelList[28].run_kernel.enable = 0; // acm_1_2 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000064003D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x64003D; + // DEB - 0x000000000000E1E0000FF9FEEC0001F1 + bitmaps.deb[0] = 0xEC0001F1; + bitmaps.deb[1] = 0xFF9FE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000008F032009F + bitmaps.teb[0] = 0xF032009F; + bitmaps.teb[1] = 0x8; + // REB - 0x00000000000000000000001F10F607E7 + bitmaps.reb[0] = 0x10F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 8 rgbs_grid_1_1- inner node disablement + // 9 ccm_3a_2_0- inner node disablement + // 10 fr_grid_1_0- inner node disablement + // 11 odr_awb_std_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFF00; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000044003D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x44003D; + // DEB - 0x000000000000C1E0000FF9FEEC1BF1F1 + bitmaps.deb[0] = 0xEC1BF1F1; + bitmaps.deb[1] = 0xFF9FE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000008E0321E9F + bitmaps.teb[0] = 0xE0321E9F; + bitmaps.teb[1] = 0x8; + // REB - 0x00000000000000000000001F10F67FE7 + bitmaps.reb[0] = 0x10F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 40 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x10000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000044003D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x44003D; + // DEB - 0x000000000000C1E0000FF9FEEC0001F1 + bitmaps.deb[0] = 0xEC0001F1; + bitmaps.deb[1] = 0xFF9FE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000008E032009F + bitmaps.teb[0] = 0xE032009F; + bitmaps.teb[1] = 0x8; + // REB - 0x00000000000000000000001F10F607E7 + bitmaps.reb[0] = 0x10F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 8 rgbs_grid_1_1- inner node disablement + // 9 ccm_3a_2_0- inner node disablement + // 10 fr_grid_1_0- inner node disablement + // 11 odr_awb_std_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 odr_af_std_1_4- inner node disablement + // 40 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1000000FF00; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000024003D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x24003D; + // DEB - 0x00000000000021E0000FF9FEEC1BF1F1 + bitmaps.deb[0] = 0xEC1BF1F1; + bitmaps.deb[1] = 0xFF9FE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000008D0321E9F + bitmaps.teb[0] = 0xD0321E9F; + bitmaps.teb[1] = 0x8; + // REB - 0x00000000000000000000001F10F67FE7 + bitmaps.reb[0] = 0x10F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 41 b2i_ds_output_1_1- inner node disablement + // 42 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x60000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000024003D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x24003D; + // DEB - 0x00000000000021E0000FF9FEEC0001F1 + bitmaps.deb[0] = 0xEC0001F1; + bitmaps.deb[1] = 0xFF9FE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000008D032009F + bitmaps.teb[0] = 0xD032009F; + bitmaps.teb[1] = 0x8; + // REB - 0x00000000000000000000001F10F607E7 + bitmaps.reb[0] = 0x10F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 8 rgbs_grid_1_1- inner node disablement + // 9 ccm_3a_2_0- inner node disablement + // 10 fr_grid_1_0- inner node disablement + // 11 odr_awb_std_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 odr_af_std_1_4- inner node disablement + // 41 b2i_ds_output_1_1- inner node disablement + // 42 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x6000000FF00; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000000001E9009 + bitmaps.rbm[0] = 0x1E9009; + // DEB - 0x000000000000000000000000001BF1F1 + bitmaps.deb[0] = 0x1BF1F1; + // TEB - 0x0000000000001E97 + bitmaps.teb[0] = 0x1E97; + // REB - 0x00000000000000000000000000007FE7 + bitmaps.reb[0] = 0x7FE7; + + // Kernels disablement + // 6 gd_2_2- inner node disablement + // 7 wb_1_1- inner node disablement + // 16 ifd_gmv_1_4- inner node disablement + // 17 ifd_segmap_bnlm_1_4- inner node disablement + // 18 smurf_bnlm_1_0- inner node disablement + // 19 bnlm_3_4- inner node disablement + // 20 bxt_demosaic- inner node disablement + // 21 vcsc_2_0_b- inner node disablement + // 22 gltm_2_0- inner node disablement + // 23 ifd_segmap_xnr_1_4- inner node disablement + // 24 smurf_xnr_1_0- inner node disablement + // 25 xnr_5_4- inner node disablement + // 26 vcr_3_1- inner node disablement + // 27 glim_2_0- inner node disablement + // 28 acm_1_2- inner node disablement + // 29 gammatm_v4- inner node disablement + // 30 csc_1_1- inner node disablement + // 31 b2i_ds_1_1- inner node disablement + // 32 lbff_crop_espa_1_4- inner node disablement + // 33 image_upscaler_1_1- inner node disablement + // 34 gmv_statistics_1_1- inner node disablement + // 35 odr_gmv_feature_1_4- inner node disablement + // 36 odr_gmv_match_1_4- inner node disablement + // 37 ifd_segmap_cas_1_4- inner node disablement + // 38 smurf_cas_1_0- inner node disablement + // 39 cas_1_1- inner node disablement + // 40 odr_ofs_mp_1_4- inner node disablement + // 41 b2i_ds_output_1_1- inner node disablement + // 42 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFF00C0; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 ifd_lsc_1_4- inner node disablement + // 4 lsc_1_2- inner node disablement + // 5 dpc_2_2- inner node disablement + // 6 gd_2_2- inner node disablement + // 7 wb_1_1- inner node disablement + // 8 rgbs_grid_1_1- inner node disablement + // 9 ccm_3a_2_0- inner node disablement + // 10 fr_grid_1_0- inner node disablement + // 11 odr_awb_std_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 odr_af_std_1_4- inner node disablement + // 16 ifd_gmv_1_4- inner node disablement + // 17 ifd_segmap_bnlm_1_4- inner node disablement + // 18 smurf_bnlm_1_0- inner node disablement + // 19 bnlm_3_4- inner node disablement + // 20 bxt_demosaic- inner node disablement + // 21 vcsc_2_0_b- inner node disablement + // 22 gltm_2_0- inner node disablement + // 23 ifd_segmap_xnr_1_4- inner node disablement + // 24 smurf_xnr_1_0- inner node disablement + // 25 xnr_5_4- inner node disablement + // 26 vcr_3_1- inner node disablement + // 27 glim_2_0- inner node disablement + // 28 acm_1_2- inner node disablement + // 29 gammatm_v4- inner node disablement + // 30 csc_1_1- inner node disablement + // 31 b2i_ds_1_1- inner node disablement + // 32 lbff_crop_espa_1_4- inner node disablement + // 33 image_upscaler_1_1- inner node disablement + // 34 gmv_statistics_1_1- inner node disablement + // 35 odr_gmv_feature_1_4- inner node disablement + // 36 odr_gmv_match_1_4- inner node disablement + // 37 ifd_segmap_cas_1_4- inner node disablement + // 38 smurf_cas_1_0- inner node disablement + // 39 cas_1_1- inner node disablement + // 40 odr_ofs_mp_1_4- inner node disablement + // 41 b2i_ds_output_1_1- inner node disablement + // 42 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000064003D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x64003D; + // DEB - 0x000000000000E1E0000FF9FEEC1BF1F1 + bitmaps.deb[0] = 0xEC1BF1F1; + bitmaps.deb[1] = 0xFF9FE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000008F0321E9F + bitmaps.teb[0] = 0xF0321E9F; + bitmaps.teb[1] = 0x8; + // REB - 0x00000000000000000000001F10F67FE7 + bitmaps.reb[0] = 0x10F67FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffIrWithGmvNoTnrWithSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 43; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[7].run_kernel.enable = 0; // wb_1_1 + nodeKernels.kernelList[20].run_kernel.enable = 0; // bxt_demosaic + nodeKernels.kernelList[28].run_kernel.enable = 0; // acm_1_2 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x7FFFFFF00C0; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x7E200000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffIrNoGmvWithTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 55; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[7].run_kernel.enable = 0; // wb_1_1 + nodeKernels.kernelList[22].run_kernel.enable = 0; // bxt_demosaic + nodeKernels.kernelList[30].run_kernel.enable = 0; // acm_1_2 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FC1D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x67FC1D; + // DEB - 0x000000000000E1FFFFF0F9FEEC0001F1 + bitmaps.deb[0] = 0xEC0001F1; + bitmaps.deb[1] = 0xFFF0F9FE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000EFFC0009F + bitmaps.teb[0] = 0xFFC0009F; + bitmaps.teb[1] = 0xE; + // REB - 0x00000000000000000000001FF0F607E7 + bitmaps.reb[0] = 0xF0F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 8 rgbs_grid_1_1- inner node disablement + // 9 ccm_3a_2_0- inner node disablement + // 10 fr_grid_1_0- inner node disablement + // 11 odr_awb_std_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFF00; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FC1D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x47FC1D; + // DEB - 0x000000000000C1FFFFF0F9FEEC1BF1F1 + bitmaps.deb[0] = 0xEC1BF1F1; + bitmaps.deb[1] = 0xFFF0F9FE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000EEFC01E9F + bitmaps.teb[0] = 0xEFC01E9F; + bitmaps.teb[1] = 0xE; + // REB - 0x00000000000000000000001FF0F67FE7 + bitmaps.reb[0] = 0xF0F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 52 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x10000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FC1D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x47FC1D; + // DEB - 0x000000000000C1FFFFF0F9FEEC0001F1 + bitmaps.deb[0] = 0xEC0001F1; + bitmaps.deb[1] = 0xFFF0F9FE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000EEFC0009F + bitmaps.teb[0] = 0xEFC0009F; + bitmaps.teb[1] = 0xE; + // REB - 0x00000000000000000000001FF0F607E7 + bitmaps.reb[0] = 0xF0F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 8 rgbs_grid_1_1- inner node disablement + // 9 ccm_3a_2_0- inner node disablement + // 10 fr_grid_1_0- inner node disablement + // 11 odr_awb_std_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 odr_af_std_1_4- inner node disablement + // 52 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1000000000FF00; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FC1D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x27FC1D; + // DEB - 0x00000000000021FFFFF0F9FEEC1BF1F1 + bitmaps.deb[0] = 0xEC1BF1F1; + bitmaps.deb[1] = 0xFFF0F9FE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000EDFC01E9F + bitmaps.teb[0] = 0xDFC01E9F; + bitmaps.teb[1] = 0xE; + // REB - 0x00000000000000000000001FF0F67FE7 + bitmaps.reb[0] = 0xF0F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 53 b2i_ds_output_1_1- inner node disablement + // 54 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x60000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FC1D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x27FC1D; + // DEB - 0x00000000000021FFFFF0F9FEEC0001F1 + bitmaps.deb[0] = 0xEC0001F1; + bitmaps.deb[1] = 0xFFF0F9FE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000EDFC0009F + bitmaps.teb[0] = 0xDFC0009F; + bitmaps.teb[1] = 0xE; + // REB - 0x00000000000000000000001FF0F607E7 + bitmaps.reb[0] = 0xF0F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 8 rgbs_grid_1_1- inner node disablement + // 9 ccm_3a_2_0- inner node disablement + // 10 fr_grid_1_0- inner node disablement + // 11 odr_awb_std_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 odr_af_std_1_4- inner node disablement + // 53 b2i_ds_output_1_1- inner node disablement + // 54 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x6000000000FF00; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000000001E9009 + bitmaps.rbm[0] = 0x1E9009; + // DEB - 0x000000000000000000000000001BF1F1 + bitmaps.deb[0] = 0x1BF1F1; + // TEB - 0x0000000000001E97 + bitmaps.teb[0] = 0x1E97; + // REB - 0x00000000000000000000000000007FE7 + bitmaps.reb[0] = 0x7FE7; + + // Kernels disablement + // 6 gd_2_2- inner node disablement + // 7 wb_1_1- inner node disablement + // 16 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 17 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 18 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 19 ifd_segmap_bnlm_1_4- inner node disablement + // 20 smurf_bnlm_1_0- inner node disablement + // 21 bnlm_3_4- inner node disablement + // 22 bxt_demosaic- inner node disablement + // 23 vcsc_2_0_b- inner node disablement + // 24 gltm_2_0- inner node disablement + // 25 ifd_segmap_xnr_1_4- inner node disablement + // 26 smurf_xnr_1_0- inner node disablement + // 27 xnr_5_4- inner node disablement + // 28 vcr_3_1- inner node disablement + // 29 glim_2_0- inner node disablement + // 30 acm_1_2- inner node disablement + // 31 gammatm_v4- inner node disablement + // 32 csc_1_1- inner node disablement + // 33 b2i_ds_1_1- inner node disablement + // 34 lbff_crop_espa_1_4- inner node disablement + // 35 tnr7_spatial_1_1- inner node disablement + // 36 tnr_scaler_lb_1_1- inner node disablement + // 37 tnr7_ims_1_2- inner node disablement + // 38 ifd_segmap_tnr_bc_1_4- inner node disablement + // 39 smurf_tnr_bc_1_0- inner node disablement + // 40 tnr7_bc_1_2- inner node disablement + // 41 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 42 ifd_segmap_tnr_blend_1_4- inner node disablement + // 43 smurf_tnr_blend_1_0- inner node disablement + // 44 tnr7_blend_1_1- inner node disablement + // 45 odr_tnr_fp_yuvn_1_4- inner node disablement + // 46 tnr_scaler_fp_1_1- inner node disablement + // 47 image_upscaler_1_1- inner node disablement + // 48 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 49 ifd_segmap_cas_1_4- inner node disablement + // 50 smurf_cas_1_0- inner node disablement + // 51 cas_1_1- inner node disablement + // 52 odr_ofs_mp_1_4- inner node disablement + // 53 b2i_ds_output_1_1- inner node disablement + // 54 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFFFF00C0; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 ifd_lsc_1_4- inner node disablement + // 4 lsc_1_2- inner node disablement + // 5 dpc_2_2- inner node disablement + // 6 gd_2_2- inner node disablement + // 7 wb_1_1- inner node disablement + // 8 rgbs_grid_1_1- inner node disablement + // 9 ccm_3a_2_0- inner node disablement + // 10 fr_grid_1_0- inner node disablement + // 11 odr_awb_std_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 odr_af_std_1_4- inner node disablement + // 16 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 17 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 18 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 19 ifd_segmap_bnlm_1_4- inner node disablement + // 20 smurf_bnlm_1_0- inner node disablement + // 21 bnlm_3_4- inner node disablement + // 22 bxt_demosaic- inner node disablement + // 23 vcsc_2_0_b- inner node disablement + // 24 gltm_2_0- inner node disablement + // 25 ifd_segmap_xnr_1_4- inner node disablement + // 26 smurf_xnr_1_0- inner node disablement + // 27 xnr_5_4- inner node disablement + // 28 vcr_3_1- inner node disablement + // 29 glim_2_0- inner node disablement + // 30 acm_1_2- inner node disablement + // 31 gammatm_v4- inner node disablement + // 32 csc_1_1- inner node disablement + // 33 b2i_ds_1_1- inner node disablement + // 34 lbff_crop_espa_1_4- inner node disablement + // 35 tnr7_spatial_1_1- inner node disablement + // 36 tnr_scaler_lb_1_1- inner node disablement + // 37 tnr7_ims_1_2- inner node disablement + // 38 ifd_segmap_tnr_bc_1_4- inner node disablement + // 39 smurf_tnr_bc_1_0- inner node disablement + // 40 tnr7_bc_1_2- inner node disablement + // 41 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 42 ifd_segmap_tnr_blend_1_4- inner node disablement + // 43 smurf_tnr_blend_1_0- inner node disablement + // 44 tnr7_blend_1_1- inner node disablement + // 45 odr_tnr_fp_yuvn_1_4- inner node disablement + // 46 tnr_scaler_fp_1_1- inner node disablement + // 47 image_upscaler_1_1- inner node disablement + // 48 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 49 ifd_segmap_cas_1_4- inner node disablement + // 50 smurf_cas_1_0- inner node disablement + // 51 cas_1_1- inner node disablement + // 52 odr_ofs_mp_1_4- inner node disablement + // 53 b2i_ds_output_1_1- inner node disablement + // 54 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000067FC1D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x67FC1D; + // DEB - 0x000000000000E1FFFFF0F9FEEC1BF1F1 + bitmaps.deb[0] = 0xEC1BF1F1; + bitmaps.deb[1] = 0xFFF0F9FE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000EFFC01E9F + bitmaps.teb[0] = 0xFFC01E9F; + bitmaps.teb[1] = 0xE; + // REB - 0x00000000000000000000001FF0F67FE7 + bitmaps.reb[0] = 0xF0F67FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffIrNoGmvWithTnrWithSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 55; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[7].run_kernel.enable = 0; // wb_1_1 + nodeKernels.kernelList[22].run_kernel.enable = 0; // bxt_demosaic + nodeKernels.kernelList[30].run_kernel.enable = 0; // acm_1_2 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x7FFFFFFFFF00C0; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x7E800000000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffIrWithGmvWithTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 59; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[7].run_kernel.enable = 0; // wb_1_1 + nodeKernels.kernelList[23].run_kernel.enable = 0; // bxt_demosaic + nodeKernels.kernelList[31].run_kernel.enable = 0; // acm_1_2 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000067FC3D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x67FC3D; + // DEB - 0x000000000000E1FFFFFFF9FEEC0001F1 + bitmaps.deb[0] = 0xEC0001F1; + bitmaps.deb[1] = 0xFFFFF9FE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000EFFF2009F + bitmaps.teb[0] = 0xFFF2009F; + bitmaps.teb[1] = 0xE; + // REB - 0x00000000000000000000001FF0F607E7 + bitmaps.reb[0] = 0xF0F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 8 rgbs_grid_1_1- inner node disablement + // 9 ccm_3a_2_0- inner node disablement + // 10 fr_grid_1_0- inner node disablement + // 11 odr_awb_std_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFF00; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FC3D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x47FC3D; + // DEB - 0x000000000000C1FFFFFFF9FEEC1BF1F1 + bitmaps.deb[0] = 0xEC1BF1F1; + bitmaps.deb[1] = 0xFFFFF9FE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000EEFF21E9F + bitmaps.teb[0] = 0xEFF21E9F; + bitmaps.teb[1] = 0xE; + // REB - 0x00000000000000000000001FF0F67FE7 + bitmaps.reb[0] = 0xF0F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 56 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x100000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000047FC3D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x47FC3D; + // DEB - 0x000000000000C1FFFFFFF9FEEC0001F1 + bitmaps.deb[0] = 0xEC0001F1; + bitmaps.deb[1] = 0xFFFFF9FE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000EEFF2009F + bitmaps.teb[0] = 0xEFF2009F; + bitmaps.teb[1] = 0xE; + // REB - 0x00000000000000000000001FF0F607E7 + bitmaps.reb[0] = 0xF0F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 8 rgbs_grid_1_1- inner node disablement + // 9 ccm_3a_2_0- inner node disablement + // 10 fr_grid_1_0- inner node disablement + // 11 odr_awb_std_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 odr_af_std_1_4- inner node disablement + // 56 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x10000000000FF00; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FC3D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x27FC3D; + // DEB - 0x00000000000021FFFFFFF9FEEC1BF1F1 + bitmaps.deb[0] = 0xEC1BF1F1; + bitmaps.deb[1] = 0xFFFFF9FE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000EDFF21E9F + bitmaps.teb[0] = 0xDFF21E9F; + bitmaps.teb[1] = 0xE; + // REB - 0x00000000000000000000001FF0F67FE7 + bitmaps.reb[0] = 0xF0F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 57 b2i_ds_output_1_1- inner node disablement + // 58 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x600000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000027FC3D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x27FC3D; + // DEB - 0x00000000000021FFFFFFF9FEEC0001F1 + bitmaps.deb[0] = 0xEC0001F1; + bitmaps.deb[1] = 0xFFFFF9FE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000EDFF2009F + bitmaps.teb[0] = 0xDFF2009F; + bitmaps.teb[1] = 0xE; + // REB - 0x00000000000000000000001FF0F607E7 + bitmaps.reb[0] = 0xF0F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 8 rgbs_grid_1_1- inner node disablement + // 9 ccm_3a_2_0- inner node disablement + // 10 fr_grid_1_0- inner node disablement + // 11 odr_awb_std_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 odr_af_std_1_4- inner node disablement + // 57 b2i_ds_output_1_1- inner node disablement + // 58 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x60000000000FF00; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000000001E9009 + bitmaps.rbm[0] = 0x1E9009; + // DEB - 0x000000000000000000000000001BF1F1 + bitmaps.deb[0] = 0x1BF1F1; + // TEB - 0x0000000000001E97 + bitmaps.teb[0] = 0x1E97; + // REB - 0x00000000000000000000000000007FE7 + bitmaps.reb[0] = 0x7FE7; + + // Kernels disablement + // 6 gd_2_2- inner node disablement + // 7 wb_1_1- inner node disablement + // 16 ifd_gmv_1_4- inner node disablement + // 17 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 18 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 19 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 20 ifd_segmap_bnlm_1_4- inner node disablement + // 21 smurf_bnlm_1_0- inner node disablement + // 22 bnlm_3_4- inner node disablement + // 23 bxt_demosaic- inner node disablement + // 24 vcsc_2_0_b- inner node disablement + // 25 gltm_2_0- inner node disablement + // 26 ifd_segmap_xnr_1_4- inner node disablement + // 27 smurf_xnr_1_0- inner node disablement + // 28 xnr_5_4- inner node disablement + // 29 vcr_3_1- inner node disablement + // 30 glim_2_0- inner node disablement + // 31 acm_1_2- inner node disablement + // 32 gammatm_v4- inner node disablement + // 33 csc_1_1- inner node disablement + // 34 b2i_ds_1_1- inner node disablement + // 35 lbff_crop_espa_1_4- inner node disablement + // 36 tnr7_spatial_1_1- inner node disablement + // 37 tnr_scaler_lb_1_1- inner node disablement + // 38 tnr7_ims_1_2- inner node disablement + // 39 gmv_statistics_1_1- inner node disablement + // 40 odr_gmv_feature_1_4- inner node disablement + // 41 odr_gmv_match_1_4- inner node disablement + // 42 ifd_segmap_tnr_bc_1_4- inner node disablement + // 43 smurf_tnr_bc_1_0- inner node disablement + // 44 tnr7_bc_1_2- inner node disablement + // 45 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 46 ifd_segmap_tnr_blend_1_4- inner node disablement + // 47 smurf_tnr_blend_1_0- inner node disablement + // 48 tnr7_blend_1_1- inner node disablement + // 49 odr_tnr_fp_yuvn_1_4- inner node disablement + // 50 tnr_scaler_fp_1_1- inner node disablement + // 51 image_upscaler_1_1- inner node disablement + // 52 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 53 ifd_segmap_cas_1_4- inner node disablement + // 54 smurf_cas_1_0- inner node disablement + // 55 cas_1_1- inner node disablement + // 56 odr_ofs_mp_1_4- inner node disablement + // 57 b2i_ds_output_1_1- inner node disablement + // 58 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFFFFF00C0; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 ifd_lsc_1_4- inner node disablement + // 4 lsc_1_2- inner node disablement + // 5 dpc_2_2- inner node disablement + // 6 gd_2_2- inner node disablement + // 7 wb_1_1- inner node disablement + // 8 rgbs_grid_1_1- inner node disablement + // 9 ccm_3a_2_0- inner node disablement + // 10 fr_grid_1_0- inner node disablement + // 11 odr_awb_std_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 odr_af_std_1_4- inner node disablement + // 16 ifd_gmv_1_4- inner node disablement + // 17 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 18 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 19 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 20 ifd_segmap_bnlm_1_4- inner node disablement + // 21 smurf_bnlm_1_0- inner node disablement + // 22 bnlm_3_4- inner node disablement + // 23 bxt_demosaic- inner node disablement + // 24 vcsc_2_0_b- inner node disablement + // 25 gltm_2_0- inner node disablement + // 26 ifd_segmap_xnr_1_4- inner node disablement + // 27 smurf_xnr_1_0- inner node disablement + // 28 xnr_5_4- inner node disablement + // 29 vcr_3_1- inner node disablement + // 30 glim_2_0- inner node disablement + // 31 acm_1_2- inner node disablement + // 32 gammatm_v4- inner node disablement + // 33 csc_1_1- inner node disablement + // 34 b2i_ds_1_1- inner node disablement + // 35 lbff_crop_espa_1_4- inner node disablement + // 36 tnr7_spatial_1_1- inner node disablement + // 37 tnr_scaler_lb_1_1- inner node disablement + // 38 tnr7_ims_1_2- inner node disablement + // 39 gmv_statistics_1_1- inner node disablement + // 40 odr_gmv_feature_1_4- inner node disablement + // 41 odr_gmv_match_1_4- inner node disablement + // 42 ifd_segmap_tnr_bc_1_4- inner node disablement + // 43 smurf_tnr_bc_1_0- inner node disablement + // 44 tnr7_bc_1_2- inner node disablement + // 45 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 46 ifd_segmap_tnr_blend_1_4- inner node disablement + // 47 smurf_tnr_blend_1_0- inner node disablement + // 48 tnr7_blend_1_1- inner node disablement + // 49 odr_tnr_fp_yuvn_1_4- inner node disablement + // 50 tnr_scaler_fp_1_1- inner node disablement + // 51 image_upscaler_1_1- inner node disablement + // 52 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 53 ifd_segmap_cas_1_4- inner node disablement + // 54 smurf_cas_1_0- inner node disablement + // 55 cas_1_1- inner node disablement + // 56 odr_ofs_mp_1_4- inner node disablement + // 57 b2i_ds_output_1_1- inner node disablement + // 58 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000067FC3D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x67FC3D; + // DEB - 0x000000000000E1FFFFFFF9FEEC1BF1F1 + bitmaps.deb[0] = 0xEC1BF1F1; + bitmaps.deb[1] = 0xFFFFF9FE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000EFFF21E9F + bitmaps.teb[0] = 0xFFF21E9F; + bitmaps.teb[1] = 0xE; + // REB - 0x00000000000000000000001FF0F67FE7 + bitmaps.reb[0] = 0xF0F67FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffIrWithGmvWithTnrWithSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 59; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[7].run_kernel.enable = 0; // wb_1_1 + nodeKernels.kernelList[23].run_kernel.enable = 0; // bxt_demosaic + nodeKernels.kernelList[31].run_kernel.enable = 0; // acm_1_2 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x7FFFFFFFFFF00C0; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x7E8000000000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 47; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noPdaf | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x00000000000000000064009D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1E00000FFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F008009F + bitmaps.teb[0] = 0xF008009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFC00; + } + else if (nodeRelevantInnerOptions == (noPdaf)) + { + // HW bitmaps + // RBM - 0x00000000000000000064009D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1E00000FFFEEDBBF1F1 + bitmaps.deb[0] = 0xEDBBF1F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F0081E9F + bitmaps.teb[0] = 0xF0081E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F6FFE7 + bitmaps.reb[0] = 0x12F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3C0000; + } + else if (nodeRelevantInnerOptions == (no3A | noPdaf)) + { + // HW bitmaps + // RBM - 0x00000000000000000064009D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1E00000FFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F008009F + bitmaps.teb[0] = 0xF008009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFC00; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000044019D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x44019D; + // DEB - 0x000000000000C1E00000FFFEEDFBFFF1 + bitmaps.deb[0] = 0xEDFBFFF1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E0083F9F + bitmaps.teb[0] = 0xE0083F9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 44 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x100000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000044009D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1E00000FFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E008009F + bitmaps.teb[0] = 0xE008009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 44 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1000003FFC00; + } + else if (nodeRelevantInnerOptions == (noPdaf | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000044009D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1E00000FFFEEDBBF1F1 + bitmaps.deb[0] = 0xEDBBF1F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E0081E9F + bitmaps.teb[0] = 0xE0081E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F6FFE7 + bitmaps.reb[0] = 0x12F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 44 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1000003C0000; + } + else if (nodeRelevantInnerOptions == (no3A | noPdaf | noMp)) + { + // HW bitmaps + // RBM - 0x00000000000000000044009D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1E00000FFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E008009F + bitmaps.teb[0] = 0xE008009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 44 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1000003FFC00; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000024019D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x24019D; + // DEB - 0x00000000000021E00000FFFEEDFBFFF1 + bitmaps.deb[0] = 0xEDFBFFF1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D0083F9F + bitmaps.teb[0] = 0xD0083F9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 45 b2i_ds_output_1_1- inner node disablement + // 46 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x600000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000024009D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021E00000FFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D008009F + bitmaps.teb[0] = 0xD008009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 45 b2i_ds_output_1_1- inner node disablement + // 46 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x6000003FFC00; + } + else if (nodeRelevantInnerOptions == (noPdaf | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000024009D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021E00000FFFEEDBBF1F1 + bitmaps.deb[0] = 0xEDBBF1F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D0081E9F + bitmaps.teb[0] = 0xD0081E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F6FFE7 + bitmaps.reb[0] = 0x12F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 45 b2i_ds_output_1_1- inner node disablement + // 46 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x6000003C0000; + } + else if (nodeRelevantInnerOptions == (no3A | noPdaf | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000024009D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021E00000FFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D008009F + bitmaps.teb[0] = 0xD008009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 45 b2i_ds_output_1_1- inner node disablement + // 46 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x6000003FFC00; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000180041E6811 + bitmaps.rbm[0] = 0x41E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001FBFFF1 + bitmaps.deb[0] = 0x1FBFFF1; + // TEB - 0x0000000000083F97 + bitmaps.teb[0] = 0x83F97; + // REB - 0x0000000000000000000000000601FFE7 + bitmaps.reb[0] = 0x601FFE7; + + // Kernels disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 22 ifd_segmap_bnlm_1_4- inner node disablement + // 23 smurf_bnlm_1_0- inner node disablement + // 24 bnlm_3_4- inner node disablement + // 25 bxt_demosaic- inner node disablement + // 26 vcsc_2_0_b- inner node disablement + // 27 gltm_2_0- inner node disablement + // 28 ifd_segmap_xnr_1_4- inner node disablement + // 29 smurf_xnr_1_0- inner node disablement + // 30 xnr_5_4- inner node disablement + // 31 vcr_3_1- inner node disablement + // 32 glim_2_0- inner node disablement + // 33 ifd_segmap_acm_1_4- inner node disablement + // 34 smurf_acm_1_0- inner node disablement + // 35 acm_1_2- inner node disablement + // 36 gammatm_v4- inner node disablement + // 37 csc_1_1- inner node disablement + // 38 b2i_ds_1_1- inner node disablement + // 39 lbff_crop_espa_1_4- inner node disablement + // 40 image_upscaler_1_1- inner node disablement + // 41 ifd_segmap_cas_1_4- inner node disablement + // 42 smurf_cas_1_0- inner node disablement + // 43 cas_1_1- inner node disablement + // 44 odr_ofs_mp_1_4- inner node disablement + // 45 b2i_ds_output_1_1- inner node disablement + // 46 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFC00300; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 odr_dpc_pdaf_1_4- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 ifd_lsc_1_4- inner node disablement + // 7 lsc_1_2- inner node disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 22 ifd_segmap_bnlm_1_4- inner node disablement + // 23 smurf_bnlm_1_0- inner node disablement + // 24 bnlm_3_4- inner node disablement + // 25 bxt_demosaic- inner node disablement + // 26 vcsc_2_0_b- inner node disablement + // 27 gltm_2_0- inner node disablement + // 28 ifd_segmap_xnr_1_4- inner node disablement + // 29 smurf_xnr_1_0- inner node disablement + // 30 xnr_5_4- inner node disablement + // 31 vcr_3_1- inner node disablement + // 32 glim_2_0- inner node disablement + // 33 ifd_segmap_acm_1_4- inner node disablement + // 34 smurf_acm_1_0- inner node disablement + // 35 acm_1_2- inner node disablement + // 36 gammatm_v4- inner node disablement + // 37 csc_1_1- inner node disablement + // 38 b2i_ds_1_1- inner node disablement + // 39 lbff_crop_espa_1_4- inner node disablement + // 40 image_upscaler_1_1- inner node disablement + // 41 ifd_segmap_cas_1_4- inner node disablement + // 42 smurf_cas_1_0- inner node disablement + // 43 cas_1_1- inner node disablement + // 44 odr_ofs_mp_1_4- inner node disablement + // 45 b2i_ds_output_1_1- inner node disablement + // 46 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFFFFFF; + } + else if (nodeRelevantInnerOptions == (noPdaf | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000080041E6811 + bitmaps.rbm[0] = 0x41E6811; + bitmaps.rbm[1] = 0x80; + // DEB - 0x00000000000000000000000001BBF1F1 + bitmaps.deb[0] = 0x1BBF1F1; + // TEB - 0x0000000000081E97 + bitmaps.teb[0] = 0x81E97; + // REB - 0x0000000000000000000000000200FFE7 + bitmaps.reb[0] = 0x200FFE7; + + // Kernels disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 22 ifd_segmap_bnlm_1_4- inner node disablement + // 23 smurf_bnlm_1_0- inner node disablement + // 24 bnlm_3_4- inner node disablement + // 25 bxt_demosaic- inner node disablement + // 26 vcsc_2_0_b- inner node disablement + // 27 gltm_2_0- inner node disablement + // 28 ifd_segmap_xnr_1_4- inner node disablement + // 29 smurf_xnr_1_0- inner node disablement + // 30 xnr_5_4- inner node disablement + // 31 vcr_3_1- inner node disablement + // 32 glim_2_0- inner node disablement + // 33 ifd_segmap_acm_1_4- inner node disablement + // 34 smurf_acm_1_0- inner node disablement + // 35 acm_1_2- inner node disablement + // 36 gammatm_v4- inner node disablement + // 37 csc_1_1- inner node disablement + // 38 b2i_ds_1_1- inner node disablement + // 39 lbff_crop_espa_1_4- inner node disablement + // 40 image_upscaler_1_1- inner node disablement + // 41 ifd_segmap_cas_1_4- inner node disablement + // 42 smurf_cas_1_0- inner node disablement + // 43 cas_1_1- inner node disablement + // 44 odr_ofs_mp_1_4- inner node disablement + // 45 b2i_ds_output_1_1- inner node disablement + // 46 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFC0300; + } + else if (nodeRelevantInnerOptions == (no3A | noPdaf | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 odr_dpc_pdaf_1_4- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 ifd_lsc_1_4- inner node disablement + // 7 lsc_1_2- inner node disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 22 ifd_segmap_bnlm_1_4- inner node disablement + // 23 smurf_bnlm_1_0- inner node disablement + // 24 bnlm_3_4- inner node disablement + // 25 bxt_demosaic- inner node disablement + // 26 vcsc_2_0_b- inner node disablement + // 27 gltm_2_0- inner node disablement + // 28 ifd_segmap_xnr_1_4- inner node disablement + // 29 smurf_xnr_1_0- inner node disablement + // 30 xnr_5_4- inner node disablement + // 31 vcr_3_1- inner node disablement + // 32 glim_2_0- inner node disablement + // 33 ifd_segmap_acm_1_4- inner node disablement + // 34 smurf_acm_1_0- inner node disablement + // 35 acm_1_2- inner node disablement + // 36 gammatm_v4- inner node disablement + // 37 csc_1_1- inner node disablement + // 38 b2i_ds_1_1- inner node disablement + // 39 lbff_crop_espa_1_4- inner node disablement + // 40 image_upscaler_1_1- inner node disablement + // 41 ifd_segmap_cas_1_4- inner node disablement + // 42 smurf_cas_1_0- inner node disablement + // 43 cas_1_1- inner node disablement + // 44 odr_ofs_mp_1_4- inner node disablement + // 45 b2i_ds_output_1_1- inner node disablement + // 46 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x00000000000000000064019D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x64019D; + // DEB - 0x000000000000E1E00000FFFEEDFBFFF1 + bitmaps.deb[0] = 0xEDFBFFF1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F0083F9F + bitmaps.teb[0] = 0xF0083F9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 47; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x7FFFFFC00300; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x7F0000000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 51; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noPdaf | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) + { + // HW bitmaps + // RBM - 0x0000000000000000006400BD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E1E0000FFFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F03A009F + bitmaps.teb[0] = 0xF03A009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFC00; + } + else if (nodeRelevantInnerOptions == (noPdaf)) + { + // HW bitmaps + // RBM - 0x0000000000000000006400BD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E1E0000FFFFEEDBBF1F1 + bitmaps.deb[0] = 0xEDBBF1F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F03A1E9F + bitmaps.teb[0] = 0xF03A1E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F6FFE7 + bitmaps.reb[0] = 0x12F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3C0000; + } + else if (nodeRelevantInnerOptions == (no3A | noPdaf)) + { + // HW bitmaps + // RBM - 0x0000000000000000006400BD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E1E0000FFFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F03A009F + bitmaps.teb[0] = 0xF03A009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFC00; + } + else if (nodeRelevantInnerOptions == (noMp)) + { + // HW bitmaps + // RBM - 0x0000000000000000004401BD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x4401BD; + // DEB - 0x000000000000C1E0000FFFFEEDFBFFF1 + bitmaps.deb[0] = 0xEDFBFFF1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E03A3F9F + bitmaps.teb[0] = 0xE03A3F9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 48 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noMp)) + { + // HW bitmaps + // RBM - 0x0000000000000000004400BD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C1E0000FFFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E03A009F + bitmaps.teb[0] = 0xE03A009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 48 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x10000003FFC00; + } + else if (nodeRelevantInnerOptions == (noPdaf | noMp)) + { + // HW bitmaps + // RBM - 0x0000000000000000004400BD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C1E0000FFFFEEDBBF1F1 + bitmaps.deb[0] = 0xEDBBF1F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E03A1E9F + bitmaps.teb[0] = 0xE03A1E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F6FFE7 + bitmaps.reb[0] = 0x12F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 48 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x10000003C0000; + } + else if (nodeRelevantInnerOptions == (no3A | noPdaf | noMp)) + { + // HW bitmaps + // RBM - 0x0000000000000000004400BD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C1E0000FFFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E03A009F + bitmaps.teb[0] = 0xE03A009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 48 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x10000003FFC00; + } + else if (nodeRelevantInnerOptions == (noDp)) + { + // HW bitmaps + // RBM - 0x0000000000000000002401BD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x2401BD; + // DEB - 0x00000000000021E0000FFFFEEDFBFFF1 + bitmaps.deb[0] = 0xEDFBFFF1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D03A3F9F + bitmaps.teb[0] = 0xD03A3F9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 49 b2i_ds_output_1_1- inner node disablement + // 50 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x6000000000000; + } + else if (nodeRelevantInnerOptions == (no3A | noDp)) + { + // HW bitmaps + // RBM - 0x0000000000000000002400BD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x00000000000021E0000FFFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D03A009F + bitmaps.teb[0] = 0xD03A009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 49 b2i_ds_output_1_1- inner node disablement + // 50 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x60000003FFC00; + } + else if (nodeRelevantInnerOptions == (noPdaf | noDp)) + { + // HW bitmaps + // RBM - 0x0000000000000000002400BD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x00000000000021E0000FFFFEEDBBF1F1 + bitmaps.deb[0] = 0xEDBBF1F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D03A1E9F + bitmaps.teb[0] = 0xD03A1E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F6FFE7 + bitmaps.reb[0] = 0x12F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 49 b2i_ds_output_1_1- inner node disablement + // 50 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x60000003C0000; + } + else if (nodeRelevantInnerOptions == (no3A | noPdaf | noDp)) + { + // HW bitmaps + // RBM - 0x0000000000000000002400BD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x00000000000021E0000FFFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D03A009F + bitmaps.teb[0] = 0xD03A009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 49 b2i_ds_output_1_1- inner node disablement + // 50 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x60000003FFC00; + } + else if (nodeRelevantInnerOptions == (noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000180041E6811 + bitmaps.rbm[0] = 0x41E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001FBFFF1 + bitmaps.deb[0] = 0x1FBFFF1; + // TEB - 0x0000000000083F97 + bitmaps.teb[0] = 0x83F97; + // REB - 0x0000000000000000000000000601FFE7 + bitmaps.reb[0] = 0x601FFE7; + + // Kernels disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 22 ifd_gmv_1_4- inner node disablement + // 23 ifd_segmap_bnlm_1_4- inner node disablement + // 24 smurf_bnlm_1_0- inner node disablement + // 25 bnlm_3_4- inner node disablement + // 26 bxt_demosaic- inner node disablement + // 27 vcsc_2_0_b- inner node disablement + // 28 gltm_2_0- inner node disablement + // 29 ifd_segmap_xnr_1_4- inner node disablement + // 30 smurf_xnr_1_0- inner node disablement + // 31 xnr_5_4- inner node disablement + // 32 vcr_3_1- inner node disablement + // 33 glim_2_0- inner node disablement + // 34 ifd_segmap_acm_1_4- inner node disablement + // 35 smurf_acm_1_0- inner node disablement + // 36 acm_1_2- inner node disablement + // 37 gammatm_v4- inner node disablement + // 38 csc_1_1- inner node disablement + // 39 b2i_ds_1_1- inner node disablement + // 40 lbff_crop_espa_1_4- inner node disablement + // 41 image_upscaler_1_1- inner node disablement + // 42 gmv_statistics_1_1- inner node disablement + // 43 odr_gmv_feature_1_4- inner node disablement + // 44 odr_gmv_match_1_4- inner node disablement + // 45 ifd_segmap_cas_1_4- inner node disablement + // 46 smurf_cas_1_0- inner node disablement + // 47 cas_1_1- inner node disablement + // 48 odr_ofs_mp_1_4- inner node disablement + // 49 b2i_ds_output_1_1- inner node disablement + // 50 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFC00300; + } + else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 odr_dpc_pdaf_1_4- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 ifd_lsc_1_4- inner node disablement + // 7 lsc_1_2- inner node disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 22 ifd_gmv_1_4- inner node disablement + // 23 ifd_segmap_bnlm_1_4- inner node disablement + // 24 smurf_bnlm_1_0- inner node disablement + // 25 bnlm_3_4- inner node disablement + // 26 bxt_demosaic- inner node disablement + // 27 vcsc_2_0_b- inner node disablement + // 28 gltm_2_0- inner node disablement + // 29 ifd_segmap_xnr_1_4- inner node disablement + // 30 smurf_xnr_1_0- inner node disablement + // 31 xnr_5_4- inner node disablement + // 32 vcr_3_1- inner node disablement + // 33 glim_2_0- inner node disablement + // 34 ifd_segmap_acm_1_4- inner node disablement + // 35 smurf_acm_1_0- inner node disablement + // 36 acm_1_2- inner node disablement + // 37 gammatm_v4- inner node disablement + // 38 csc_1_1- inner node disablement + // 39 b2i_ds_1_1- inner node disablement + // 40 lbff_crop_espa_1_4- inner node disablement + // 41 image_upscaler_1_1- inner node disablement + // 42 gmv_statistics_1_1- inner node disablement + // 43 odr_gmv_feature_1_4- inner node disablement + // 44 odr_gmv_match_1_4- inner node disablement + // 45 ifd_segmap_cas_1_4- inner node disablement + // 46 smurf_cas_1_0- inner node disablement + // 47 cas_1_1- inner node disablement + // 48 odr_ofs_mp_1_4- inner node disablement + // 49 b2i_ds_output_1_1- inner node disablement + // 50 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFFFFFFF; + } + else if (nodeRelevantInnerOptions == (noPdaf | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x000000000000000000000080041E6811 + bitmaps.rbm[0] = 0x41E6811; + bitmaps.rbm[1] = 0x80; + // DEB - 0x00000000000000000000000001BBF1F1 + bitmaps.deb[0] = 0x1BBF1F1; + // TEB - 0x0000000000081E97 + bitmaps.teb[0] = 0x81E97; + // REB - 0x0000000000000000000000000200FFE7 + bitmaps.reb[0] = 0x200FFE7; + + // Kernels disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 22 ifd_gmv_1_4- inner node disablement + // 23 ifd_segmap_bnlm_1_4- inner node disablement + // 24 smurf_bnlm_1_0- inner node disablement + // 25 bnlm_3_4- inner node disablement + // 26 bxt_demosaic- inner node disablement + // 27 vcsc_2_0_b- inner node disablement + // 28 gltm_2_0- inner node disablement + // 29 ifd_segmap_xnr_1_4- inner node disablement + // 30 smurf_xnr_1_0- inner node disablement + // 31 xnr_5_4- inner node disablement + // 32 vcr_3_1- inner node disablement + // 33 glim_2_0- inner node disablement + // 34 ifd_segmap_acm_1_4- inner node disablement + // 35 smurf_acm_1_0- inner node disablement + // 36 acm_1_2- inner node disablement + // 37 gammatm_v4- inner node disablement + // 38 csc_1_1- inner node disablement + // 39 b2i_ds_1_1- inner node disablement + // 40 lbff_crop_espa_1_4- inner node disablement + // 41 image_upscaler_1_1- inner node disablement + // 42 gmv_statistics_1_1- inner node disablement + // 43 odr_gmv_feature_1_4- inner node disablement + // 44 odr_gmv_match_1_4- inner node disablement + // 45 ifd_segmap_cas_1_4- inner node disablement + // 46 smurf_cas_1_0- inner node disablement + // 47 cas_1_1- inner node disablement + // 48 odr_ofs_mp_1_4- inner node disablement + // 49 b2i_ds_output_1_1- inner node disablement + // 50 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFFC0300; + } + else if (nodeRelevantInnerOptions == (no3A | noPdaf | noMp | noDp)) + { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 odr_dpc_pdaf_1_4- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 ifd_lsc_1_4- inner node disablement + // 7 lsc_1_2- inner node disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 22 ifd_gmv_1_4- inner node disablement + // 23 ifd_segmap_bnlm_1_4- inner node disablement + // 24 smurf_bnlm_1_0- inner node disablement + // 25 bnlm_3_4- inner node disablement + // 26 bxt_demosaic- inner node disablement + // 27 vcsc_2_0_b- inner node disablement + // 28 gltm_2_0- inner node disablement + // 29 ifd_segmap_xnr_1_4- inner node disablement + // 30 smurf_xnr_1_0- inner node disablement + // 31 xnr_5_4- inner node disablement + // 32 vcr_3_1- inner node disablement + // 33 glim_2_0- inner node disablement + // 34 ifd_segmap_acm_1_4- inner node disablement + // 35 smurf_acm_1_0- inner node disablement + // 36 acm_1_2- inner node disablement + // 37 gammatm_v4- inner node disablement + // 38 csc_1_1- inner node disablement + // 39 b2i_ds_1_1- inner node disablement + // 40 lbff_crop_espa_1_4- inner node disablement + // 41 image_upscaler_1_1- inner node disablement + // 42 gmv_statistics_1_1- inner node disablement + // 43 odr_gmv_feature_1_4- inner node disablement + // 44 odr_gmv_match_1_4- inner node disablement + // 45 ifd_segmap_cas_1_4- inner node disablement + // 46 smurf_cas_1_0- inner node disablement + // 47 cas_1_1- inner node disablement + // 48 odr_ofs_mp_1_4- inner node disablement + // 49 b2i_ds_output_1_1- inner node disablement + // 50 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFFFFFFF; + } + else // default inner node + { + // RBM - 0x0000000000000000006401BD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x6401BD; + // DEB - 0x000000000000E1E0000FFFFEEDFBFFF1 + bitmaps.deb[0] = 0xEDFBFFF1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F03A3F9F + bitmaps.teb[0] = 0xF03A3F9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); + +} + +void LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + // Kernel default enablement + for (uint8_t i = 0; i < 51; ++i) + { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + // Kernel current inner node enablement + uint64_t disabledRunKernelsBitmap[2]; + disabledRunKernelsBitmap[0] = disabledRunKernelsBitmapNotVanished[0]; + disabledRunKernelsBitmap[1] = disabledRunKernelsBitmapNotVanished[1]; + + switch (vanishStatus) + { + case VanishOption::Full: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0xFFFFFFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0xFFFFFFFF; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0xFFFFFFFF; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0xFFFFFFFF; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0xFFFFFFFF; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0xFFFFFFFF; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0xFFFFFFFF; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0xFFFFFFFF; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xFFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0xFFFFFFFF; + + break; + } + case VanishOption::AfterStats: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0x8FFEFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3C0; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0x3FFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0x0; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x0; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xF09FFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x0; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xC7FFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x0; + disabledRunKernelsBitmap[0] |= 0x7FFFFFFC00300; + + break; + } + case VanishOption::AfterTnr: + { + bitmaps.rbm[0] = bitmapsNotVanished.rbm[0] & 0xFFFFFFFF; + bitmaps.rbm[1] = bitmapsNotVanished.rbm[1] & 0x3FFFF; + bitmaps.rbm[2] = bitmapsNotVanished.rbm[2] & 0x0; + bitmaps.rbm[3] = bitmapsNotVanished.rbm[3] & 0x0; + bitmaps.deb[0] = bitmapsNotVanished.deb[0] & 0xFFFFFFFF; + bitmaps.deb[1] = bitmapsNotVanished.deb[1] & 0xFFFFFFFF; + bitmaps.deb[2] = bitmapsNotVanished.deb[2] & 0x1F; + bitmaps.deb[3] = bitmapsNotVanished.deb[3] & 0x0; + bitmaps.reb[0] = bitmapsNotVanished.reb[0] & 0xFFFFFFFF; + bitmaps.reb[1] = bitmapsNotVanished.reb[1] & 0x3; + bitmaps.reb[2] = bitmapsNotVanished.reb[2] & 0x0; + bitmaps.reb[3] = bitmapsNotVanished.reb[3] & 0x0; + bitmaps.teb[0] = bitmapsNotVanished.teb[0] & 0xCFFFFFFF; + bitmaps.teb[1] = bitmapsNotVanished.teb[1] & 0x7; + disabledRunKernelsBitmap[0] |= 0x7E20000000000; + + break; + } + } + + // Set Kernel enablement for inner node + vanish status + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void WithCvOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) +{ + + // No inner nodes + (void)nodeInnerOptions; +} + +void WithCvOuterNode::configVanishStatus(VanishOption vanishStatus) +{ + (void)vanishStatus; + return; +} + +/* + * Graph 100000 + */ +StaticGraph100000::StaticGraph100000(GraphConfiguration100000* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100000, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffBayerNoGmvNoTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerNoGmvNoTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->destNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->destNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 9; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffBayerNoGmvNoTnrNoSapOuterNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffBayerNoGmvNoTnrNoSapOuterNode->contextId = 1; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100000::~StaticGraph100000() +{ +} + +StaticGraphStatus imageSubGraphTopology100000::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerNoGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerNoGmvNoTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[7]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerNoGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[8]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerNoGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffBayerNoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = !(lbffBayerNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[4]->isActive = !(lbffBayerNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[5]->isActive = !(lbffBayerNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[6]->isActive = !(lbffBayerNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[7]->isActive = !(lbffBayerNoGmvNoTnrNoSapInnerOptions & noMp); // lbff_Bayer_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[8]->isActive = !(lbffBayerNoGmvNoTnrNoSapInnerOptions & noDp); // lbff_Bayer_NoGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 9; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerNoGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerNoGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100001 + */ +StaticGraph100001::StaticGraph100001(GraphConfiguration100001* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100001, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffBayerWithGmvNoTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerWithGmvNoTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->destNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->destNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->destNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 14; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffBayerWithGmvNoTnrNoSapOuterNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffBayerWithGmvNoTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100001::~StaticGraph100001() +{ +} + +StaticGraphStatus imageSubGraphTopology100001::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerWithGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerWithGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerWithGmvNoTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[9]->linkConfiguration->bufferSize == 0 && + subGraphLinks[11]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerWithGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[10]->linkConfiguration->bufferSize == 0 && + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerWithGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerWithGmvNoTnrNoSapOuterNode->setInnerNode(lbffBayerWithGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = !(lbffBayerWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[4]->isActive = !(lbffBayerWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[5]->isActive = !(lbffBayerWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[6]->isActive = !(lbffBayerWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[9]->isActive = !(lbffBayerWithGmvNoTnrNoSapInnerOptions & noMp); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[11]->isActive = !(lbffBayerWithGmvNoTnrNoSapInnerOptions & noMp); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[10]->isActive = !(lbffBayerWithGmvNoTnrNoSapInnerOptions & noDp); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[12]->isActive = !(lbffBayerWithGmvNoTnrNoSapInnerOptions & noDp); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 14; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[7]->isActive = (lbffBayerWithGmvNoTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_gmv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerWithGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerWithGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100002 + */ +StaticGraph100002::StaticGraph100002(GraphConfiguration100002* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100002, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffBayerNoGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerNoGmvWithTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 12; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffBayerNoGmvWithTnrNoSapOuterNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffBayerNoGmvWithTnrNoSapOuterNode->contextId = 1; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100002::~StaticGraph100002() +{ +} + +StaticGraphStatus imageSubGraphTopology100002::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerNoGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[10]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerNoGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[11]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerNoGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffBayerNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[4]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[5]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[6]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[10]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[11]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 12; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[7]->isActive = (lbffBayerNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[8]->isActive = (lbffBayerNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[9]->isActive = (lbffBayerNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerNoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerNoGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100003 + */ +StaticGraph100003::StaticGraph100003(GraphConfiguration100003* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100003, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffBayerWithGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerWithGmvWithTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[16]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 17; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffBayerWithGmvWithTnrNoSapOuterNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffBayerWithGmvWithTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100003::~StaticGraph100003() +{ +} + +StaticGraphStatus imageSubGraphTopology100003::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerWithGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerWithGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerWithGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerWithGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerWithGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerWithGmvWithTnrNoSapOuterNode->setInnerNode(lbffBayerWithGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[4]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[5]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[6]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[12]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[14]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[13]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[15]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 17; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[7]->isActive = (lbffBayerWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_gmv_input + subGraphLinks[9]->isActive = (lbffBayerWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[10]->isActive = (lbffBayerWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[11]->isActive = (lbffBayerWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerWithGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerWithGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100137 + */ +StaticGraph100137::StaticGraph100137(GraphConfiguration100137* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100137, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffBayerWithGmvWithTnrWithSapOuterNode.Init(&_graphConfiguration.lbffBayerWithGmvWithTnrWithSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->destNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->destNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->destNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->destNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->destNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->destNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->destNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->destNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->destNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->destNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->destNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->destNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[24]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[25]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[26]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[27]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 28; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerWithGmvWithTnrWithSapOuterNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerWithGmvWithTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + _imageSubGraph.swScalerOuterNode->contextId = 4; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100137::~StaticGraph100137() +{ +} + +StaticGraphStatus imageSubGraphTopology100137::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerWithGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerWithGmvWithTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerWithGmvWithTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[21]->linkConfiguration->bufferSize == 0 && + subGraphLinks[23]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerWithGmvWithTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[22]->linkConfiguration->bufferSize == 0 && + subGraphLinks[24]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerWithGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerWithGmvWithTnrWithSapOuterNode->setInnerNode(lbffBayerWithGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[12]->isActive = !(lbffBayerWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[13]->isActive = !(lbffBayerWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[14]->isActive = !(lbffBayerWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[15]->isActive = !(lbffBayerWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[21]->isActive = !(lbffBayerWithGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[23]->isActive = !(lbffBayerWithGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[22]->isActive = !(lbffBayerWithGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[24]->isActive = !(lbffBayerWithGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 28; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[16]->isActive = (lbffBayerWithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_gmv_feature_output -> lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_gmv_input + subGraphLinks[18]->isActive = (lbffBayerWithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_blend_output -> lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[19]->isActive = (lbffBayerWithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_bc_output -> lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[20]->isActive = (lbffBayerWithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmapsNotVanished = lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100137::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[5]->isActive == false) + { + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x600000; // Run kernel ids 21 (ifd_segmap_bnlm_1_4) and 22 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[6]->isActive == false) + { + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0x18000000; // Run kernel ids 27 (ifd_segmap_xnr_1_4) and 28 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0x300000000; // Run kernel ids 32 (ifd_segmap_acm_1_4) and 33 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x300000000000000; // Run kernel ids 56 (ifd_segmap_cas_1_4) and 57 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[9]->isActive == false) + { + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= 0x600000000000; // Run kernel ids 45 (ifd_segmap_tnr_bc_1_4) and 46 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[10]->isActive == false) + { + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= 0x6000000000000; // Run kernel ids 49 (ifd_segmap_tnr_blend_1_4) and 50 (smurf_tnr_blend_1_0) + } + + lbffBayerWithGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100079 + */ +StaticGraph100079::StaticGraph100079(GraphConfiguration100079* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100079, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffBayerNoGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerNoGmvWithTnrNoSapOuterNodeConfiguration); + _swNntmOuterNode.Init(&_graphConfiguration.swNntmOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[16]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 17; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffBayerNoGmvWithTnrNoSapOuterNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + _imageSubGraph.swNntmOuterNode = &_swNntmOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffBayerNoGmvWithTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swNntmOuterNode->contextId = 2; + _imageSubGraph.swScalerOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100079::~StaticGraph100079() +{ +} + +StaticGraphStatus imageSubGraphTopology100079::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerNoGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[10]->linkConfiguration->bufferSize == 0 && + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerNoGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[11]->linkConfiguration->bufferSize == 0 && + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerNoGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffBayerNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[4]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[5]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[6]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[10]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[12]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> sw_nntm:terminal_connect_input + subGraphLinks[11]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[13]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> sw_nntm:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 17; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[7]->isActive = (lbffBayerNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[8]->isActive = (lbffBayerNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[9]->isActive = (lbffBayerNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerNoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerNoGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100080 + */ +StaticGraph100080::StaticGraph100080(GraphConfiguration100080* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100080, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffBayerNoGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerNoGmvWithTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[16]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 17; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffBayerNoGmvWithTnrNoSapOuterNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffBayerNoGmvWithTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + _imageSubGraph.swScalerOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100080::~StaticGraph100080() +{ +} + +StaticGraphStatus imageSubGraphTopology100080::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerNoGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[10]->linkConfiguration->bufferSize == 0 && + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerNoGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[11]->linkConfiguration->bufferSize == 0 && + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerNoGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffBayerNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[4]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[5]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[6]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[10]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[12]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[11]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[13]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 17; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[7]->isActive = (lbffBayerNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[8]->isActive = (lbffBayerNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[9]->isActive = (lbffBayerNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerNoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerNoGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100138 + */ +StaticGraph100138::StaticGraph100138(GraphConfiguration100138* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100138, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffBayerNoGmvWithTnrWithSapOuterNode.Init(&_graphConfiguration.lbffBayerNoGmvWithTnrWithSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[23]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[24]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[25]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 26; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerNoGmvWithTnrWithSapOuterNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerNoGmvWithTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + _imageSubGraph.swScalerOuterNode->contextId = 4; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100138::~StaticGraph100138() +{ +} + +StaticGraphStatus imageSubGraphTopology100138::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerNoGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerNoGmvWithTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerNoGmvWithTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[19]->linkConfiguration->bufferSize == 0 && + subGraphLinks[21]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerNoGmvWithTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[20]->linkConfiguration->bufferSize == 0 && + subGraphLinks[22]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerNoGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerNoGmvWithTnrWithSapOuterNode->setInnerNode(lbffBayerNoGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[12]->isActive = !(lbffBayerNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[13]->isActive = !(lbffBayerNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[14]->isActive = !(lbffBayerNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[15]->isActive = !(lbffBayerNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[19]->isActive = !(lbffBayerNoGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[21]->isActive = !(lbffBayerNoGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[20]->isActive = !(lbffBayerNoGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[22]->isActive = !(lbffBayerNoGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 26; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[16]->isActive = (lbffBayerNoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_blend_output -> lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[17]->isActive = (lbffBayerNoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_bc_output -> lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[18]->isActive = (lbffBayerNoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmapsNotVanished = lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100138::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[5]->isActive == false) + { + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x300000; // Run kernel ids 20 (ifd_segmap_bnlm_1_4) and 21 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[6]->isActive == false) + { + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0xC000000; // Run kernel ids 26 (ifd_segmap_xnr_1_4) and 27 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0x180000000; // Run kernel ids 31 (ifd_segmap_acm_1_4) and 32 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x30000000000000; // Run kernel ids 52 (ifd_segmap_cas_1_4) and 53 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[9]->isActive == false) + { + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= 0x60000000000; // Run kernel ids 41 (ifd_segmap_tnr_bc_1_4) and 42 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[10]->isActive == false) + { + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= 0x600000000000; // Run kernel ids 45 (ifd_segmap_tnr_blend_1_4) and 46 (smurf_tnr_blend_1_0) + } + + lbffBayerNoGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100142 + */ +StaticGraph100142::StaticGraph100142(GraphConfiguration100142* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100142, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysPdaf2WithCvOuterNode.Init(&_graphConfiguration.isysPdaf2WithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf2NoGmvWithTnrWithSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::PdafBuffer; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 7; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[24]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[25]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[26]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[27]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[28]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 29; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysPdaf2WithCvOuterNode = &_isysPdaf2WithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysPdaf2WithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + _imageSubGraph.swScalerOuterNode->contextId = 4; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100142::~StaticGraph100142() +{ +} + +StaticGraphStatus imageSubGraphTopology100142::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf2NoGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[22]->linkConfiguration->bufferSize == 0 && + subGraphLinks[24]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[23]->linkConfiguration->bufferSize == 0 && + subGraphLinks[25]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->setInnerNode(lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[15]->isActive = !(lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[16]->isActive = !(lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[17]->isActive = !(lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[18]->isActive = !(lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[22]->isActive = !(lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[24]->isActive = !(lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[23]->isActive = !(lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[25]->isActive = !(lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 29; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[19]->isActive = (lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_blend_output -> lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[20]->isActive = (lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_bc_output -> lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[21]->isActive = (lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmapsNotVanished = lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100142::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x3000000; // Run kernel ids 24 (ifd_segmap_bnlm_1_4) and 25 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0xC0000000; // Run kernel ids 30 (ifd_segmap_xnr_1_4) and 31 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[9]->isActive == false) + { + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0x1800000000; // Run kernel ids 35 (ifd_segmap_acm_1_4) and 36 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[10]->isActive == false) + { + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x300000000000000; // Run kernel ids 56 (ifd_segmap_cas_1_4) and 57 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[11]->isActive == false) + { + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= 0x600000000000; // Run kernel ids 45 (ifd_segmap_tnr_bc_1_4) and 46 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[12]->isActive == false) + { + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= 0x6000000000000; // Run kernel ids 49 (ifd_segmap_tnr_blend_1_4) and 50 (smurf_tnr_blend_1_0) + } + + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100162 + */ +StaticGraph100162::StaticGraph100162(GraphConfiguration100162* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100162, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysPdaf2WithCvOuterNode.Init(&_graphConfiguration.isysPdaf2WithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffBayerPdaf2WithTnrWithSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf2WithTnrWithSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::PdafBuffer; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 7; + link->dest = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 24; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysPdaf2WithCvOuterNode = &_isysPdaf2WithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerPdaf2WithTnrWithSapOuterNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysPdaf2WithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerPdaf2WithTnrWithSapOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100162::~StaticGraph100162() +{ +} + +StaticGraphStatus imageSubGraphTopology100162::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf2WithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf2WithTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf2WithTnrWithSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[22]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2WithTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[23]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2WithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf2WithTnrWithSapOuterNode->setInnerNode(lbffBayerPdaf2WithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[15]->isActive = !(lbffBayerPdaf2WithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[16]->isActive = !(lbffBayerPdaf2WithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[17]->isActive = !(lbffBayerPdaf2WithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[18]->isActive = !(lbffBayerPdaf2WithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[22]->isActive = !(lbffBayerPdaf2WithTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf2_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[23]->isActive = !(lbffBayerPdaf2WithTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf2_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 24; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[19]->isActive = (lbffBayerPdaf2WithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_WithTnr_WithSap:terminal_connect_blend_output -> lbff_Bayer_Pdaf2_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[20]->isActive = (lbffBayerPdaf2WithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_WithTnr_WithSap:terminal_connect_bc_output -> lbff_Bayer_Pdaf2_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[21]->isActive = (lbffBayerPdaf2WithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_Pdaf2_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf2WithTnrWithSapOuterNode->bitmapsNotVanished = lbffBayerPdaf2WithTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100162::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffBayerPdaf2WithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerPdaf2WithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerPdaf2WithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x6000000; // Run kernel ids 25 (ifd_segmap_bnlm_1_4) and 26 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffBayerPdaf2WithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerPdaf2WithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerPdaf2WithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0x180000000; // Run kernel ids 31 (ifd_segmap_xnr_1_4) and 32 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[9]->isActive == false) + { + lbffBayerPdaf2WithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerPdaf2WithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerPdaf2WithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0x3000000000; // Run kernel ids 36 (ifd_segmap_acm_1_4) and 37 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[10]->isActive == false) + { + lbffBayerPdaf2WithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerPdaf2WithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerPdaf2WithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x3000000000000000; // Run kernel ids 60 (ifd_segmap_cas_1_4) and 61 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[11]->isActive == false) + { + lbffBayerPdaf2WithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffBayerPdaf2WithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffBayerPdaf2WithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= 0x6000000000000; // Run kernel ids 49 (ifd_segmap_tnr_bc_1_4) and 50 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[12]->isActive == false) + { + lbffBayerPdaf2WithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffBayerPdaf2WithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffBayerPdaf2WithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= 0x60000000000000; // Run kernel ids 53 (ifd_segmap_tnr_blend_1_4) and 54 (smurf_tnr_blend_1_0) + } + + lbffBayerPdaf2WithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100143 + */ +StaticGraph100143::StaticGraph100143(GraphConfiguration100143* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100143, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf3NoGmvWithTnrWithSapOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[24]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[25]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[26]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 27; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + _imageSubGraph.swScalerOuterNode->contextId = 4; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100143::~StaticGraph100143() +{ +} + +StaticGraphStatus imageSubGraphTopology100143::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3NoGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[20]->linkConfiguration->bufferSize == 0 && + subGraphLinks[22]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[21]->linkConfiguration->bufferSize == 0 && + subGraphLinks[23]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->setInnerNode(lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[13]->isActive = !(lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[14]->isActive = !(lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[15]->isActive = !(lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[16]->isActive = !(lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[20]->isActive = !(lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[22]->isActive = !(lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[21]->isActive = !(lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[23]->isActive = !(lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 27; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[17]->isActive = (lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_blend_output -> lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[18]->isActive = (lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_bc_output -> lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[19]->isActive = (lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmapsNotVanished = lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100143::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[6]->isActive == false) + { + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x1800000; // Run kernel ids 23 (ifd_segmap_bnlm_1_4) and 24 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0x60000000; // Run kernel ids 29 (ifd_segmap_xnr_1_4) and 30 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0xC00000000; // Run kernel ids 34 (ifd_segmap_acm_1_4) and 35 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[9]->isActive == false) + { + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x180000000000000; // Run kernel ids 55 (ifd_segmap_cas_1_4) and 56 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[10]->isActive == false) + { + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= 0x300000000000; // Run kernel ids 44 (ifd_segmap_tnr_bc_1_4) and 45 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[11]->isActive == false) + { + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= 0x3000000000000; // Run kernel ids 48 (ifd_segmap_tnr_blend_1_4) and 49 (smurf_tnr_blend_1_0) + } + + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100144 + */ +StaticGraph100144::StaticGraph100144(GraphConfiguration100144* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100144, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 19; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[24]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[25]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[26]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[27]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 28; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + _imageSubGraph.swScalerOuterNode->contextId = 4; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100144::~StaticGraph100144() +{ +} + +StaticGraphStatus imageSubGraphTopology100144::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[21]->linkConfiguration->bufferSize == 0 && + subGraphLinks[23]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[22]->linkConfiguration->bufferSize == 0 && + subGraphLinks[24]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->setInnerNode(lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[14]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[15]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[16]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[17]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[12]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & noPdaf); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_pdaf_output -> pdaf_out + subGraphLinks[21]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[23]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[22]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[24]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 28; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[11]->isActive = (lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & (no3A|noMp|noDp|noIr)) != (no3A|noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_dpc_pdaf_output -> lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_pdaf_data_input + subGraphLinks[18]->isActive = (lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_blend_output -> lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[19]->isActive = (lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_bc_output -> lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[20]->isActive = (lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmapsNotVanished = lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100144::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[5]->isActive == false) + { + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x6000000; // Run kernel ids 25 (ifd_segmap_bnlm_1_4) and 26 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[6]->isActive == false) + { + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0x180000000; // Run kernel ids 31 (ifd_segmap_xnr_1_4) and 32 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0x3000000000; // Run kernel ids 36 (ifd_segmap_acm_1_4) and 37 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x600000000000000; // Run kernel ids 57 (ifd_segmap_cas_1_4) and 58 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[9]->isActive == false) + { + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= 0xC00000000000; // Run kernel ids 46 (ifd_segmap_tnr_bc_1_4) and 47 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[10]->isActive == false) + { + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= 0xC000000000000; // Run kernel ids 50 (ifd_segmap_tnr_blend_1_4) and 51 (smurf_tnr_blend_1_0) + } + + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100081 + */ +StaticGraph100081::StaticGraph100081(GraphConfiguration100081* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100081, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffBayerWithGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerWithGmvWithTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[16]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[18]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 19; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffBayerWithGmvWithTnrNoSapOuterNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffBayerWithGmvWithTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + _imageSubGraph.swScalerOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100081::~StaticGraph100081() +{ +} + +StaticGraphStatus imageSubGraphTopology100081::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerWithGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerWithGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerWithGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerWithGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerWithGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerWithGmvWithTnrNoSapOuterNode->setInnerNode(lbffBayerWithGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[4]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[5]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[6]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[12]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[14]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[13]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[15]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 19; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[7]->isActive = (lbffBayerWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_gmv_input + subGraphLinks[9]->isActive = (lbffBayerWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[10]->isActive = (lbffBayerWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[11]->isActive = (lbffBayerWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerWithGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerWithGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100004 + */ +StaticGraph100004::StaticGraph100004(GraphConfiguration100004* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100004, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysPdaf2OuterNode.Init(&_graphConfiguration.isysPdaf2OuterNodeConfiguration); + _lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf2NoGmvNoTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2; + link->destNode = &_isysPdaf2OuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::PdafBuffer; + link->dest = GraphElementType::IsysPdaf2; + link->destNode = &_isysPdaf2OuterNode; + link->destTerminalId = 6; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysPdaf2; + link->srcNode = &_isysPdaf2OuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysPdaf2; + link->srcNode = &_isysPdaf2OuterNode; + link->srcTerminalId = 7; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 12; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysPdaf2OuterNode = &_isysPdaf2OuterNode; + _imageSubGraph.lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode = &_lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysPdaf2OuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode->contextId = 1; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100004::~StaticGraph100004() +{ +} + +StaticGraphStatus imageSubGraphTopology100004::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf2NoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf2NoGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf2NoGmvNoTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[10]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2NoGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[11]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2NoGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode->setInnerNode(lbffBayerPdaf2NoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[6]->isActive = !(lbffBayerPdaf2NoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[7]->isActive = !(lbffBayerPdaf2NoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[8]->isActive = !(lbffBayerPdaf2NoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[9]->isActive = !(lbffBayerPdaf2NoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[10]->isActive = !(lbffBayerPdaf2NoGmvNoTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf2_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[11]->isActive = !(lbffBayerPdaf2NoGmvNoTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf2_NoGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 12; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100005 + */ +StaticGraph100005::StaticGraph100005(GraphConfiguration100005* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100005, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysPdaf2OuterNode.Init(&_graphConfiguration.isysPdaf2OuterNodeConfiguration); + _lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf2WithGmvNoTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2; + link->destNode = &_isysPdaf2OuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::PdafBuffer; + link->dest = GraphElementType::IsysPdaf2; + link->destNode = &_isysPdaf2OuterNode; + link->destTerminalId = 6; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysPdaf2; + link->srcNode = &_isysPdaf2OuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysPdaf2; + link->srcNode = &_isysPdaf2OuterNode; + link->srcTerminalId = 7; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[16]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 17; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysPdaf2OuterNode = &_isysPdaf2OuterNode; + _imageSubGraph.lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysPdaf2OuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100005::~StaticGraph100005() +{ +} + +StaticGraphStatus imageSubGraphTopology100005::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf2WithGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf2WithGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf2WithGmvNoTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2WithGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2WithGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode->setInnerNode(lbffBayerPdaf2WithGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[6]->isActive = !(lbffBayerPdaf2WithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[7]->isActive = !(lbffBayerPdaf2WithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[8]->isActive = !(lbffBayerPdaf2WithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[9]->isActive = !(lbffBayerPdaf2WithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[12]->isActive = !(lbffBayerPdaf2WithGmvNoTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[14]->isActive = !(lbffBayerPdaf2WithGmvNoTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[13]->isActive = !(lbffBayerPdaf2WithGmvNoTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[15]->isActive = !(lbffBayerPdaf2WithGmvNoTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 17; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[10]->isActive = (lbffBayerPdaf2WithGmvNoTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_Bayer_Pdaf2_WithGmv_NoTnr_NoSap:terminal_connect_gmv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100006 + */ +StaticGraph100006::StaticGraph100006(GraphConfiguration100006* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100006, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysPdaf2OuterNode.Init(&_graphConfiguration.isysPdaf2OuterNodeConfiguration); + _lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf2NoGmvWithTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2; + link->destNode = &_isysPdaf2OuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::PdafBuffer; + link->dest = GraphElementType::IsysPdaf2; + link->destNode = &_isysPdaf2OuterNode; + link->destTerminalId = 6; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysPdaf2; + link->srcNode = &_isysPdaf2OuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysPdaf2; + link->srcNode = &_isysPdaf2OuterNode; + link->srcTerminalId = 7; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 15; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysPdaf2OuterNode = &_isysPdaf2OuterNode; + _imageSubGraph.lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysPdaf2OuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode->contextId = 1; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100006::~StaticGraph100006() +{ +} + +StaticGraphStatus imageSubGraphTopology100006::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf2NoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode->setInnerNode(lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[6]->isActive = !(lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[7]->isActive = !(lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[8]->isActive = !(lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[9]->isActive = !(lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[13]->isActive = !(lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[14]->isActive = !(lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 15; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[10]->isActive = (lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[11]->isActive = (lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[12]->isActive = (lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100066 + */ +StaticGraph100066::StaticGraph100066(GraphConfiguration100066* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100066, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysPdaf2OuterNode.Init(&_graphConfiguration.isysPdaf2OuterNodeConfiguration); + _lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf2NoGmvWithTnrNoSapOuterNodeConfiguration); + _swNntmOuterNode.Init(&_graphConfiguration.swNntmOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2; + link->destNode = &_isysPdaf2OuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::PdafBuffer; + link->dest = GraphElementType::IsysPdaf2; + link->destNode = &_isysPdaf2OuterNode; + link->destTerminalId = 6; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysPdaf2; + link->srcNode = &_isysPdaf2OuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysPdaf2; + link->srcNode = &_isysPdaf2OuterNode; + link->srcTerminalId = 7; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[17]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[19]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 20; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysPdaf2OuterNode = &_isysPdaf2OuterNode; + _imageSubGraph.lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + _imageSubGraph.swNntmOuterNode = &_swNntmOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysPdaf2OuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swNntmOuterNode->contextId = 2; + _imageSubGraph.swScalerOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100066::~StaticGraph100066() +{ +} + +StaticGraphStatus imageSubGraphTopology100066::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf2NoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode->setInnerNode(lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[6]->isActive = !(lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[7]->isActive = !(lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[8]->isActive = !(lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[9]->isActive = !(lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[13]->isActive = !(lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[15]->isActive = !(lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> sw_nntm:terminal_connect_input + subGraphLinks[14]->isActive = !(lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[16]->isActive = !(lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> sw_nntm:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 20; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[10]->isActive = (lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[11]->isActive = (lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[12]->isActive = (lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100007 + */ +StaticGraph100007::StaticGraph100007(GraphConfiguration100007* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100007, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysPdaf2OuterNode.Init(&_graphConfiguration.isysPdaf2OuterNodeConfiguration); + _lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf2WithGmvWithTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2; + link->destNode = &_isysPdaf2OuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::PdafBuffer; + link->dest = GraphElementType::IsysPdaf2; + link->destNode = &_isysPdaf2OuterNode; + link->destTerminalId = 6; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysPdaf2; + link->srcNode = &_isysPdaf2OuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysPdaf2; + link->srcNode = &_isysPdaf2OuterNode; + link->srcTerminalId = 7; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[19]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 20; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysPdaf2OuterNode = &_isysPdaf2OuterNode; + _imageSubGraph.lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysPdaf2OuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100007::~StaticGraph100007() +{ +} + +StaticGraphStatus imageSubGraphTopology100007::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf2WithGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + subGraphLinks[18]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode->setInnerNode(lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[6]->isActive = !(lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[7]->isActive = !(lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[8]->isActive = !(lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[9]->isActive = !(lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[15]->isActive = !(lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[17]->isActive = !(lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[16]->isActive = !(lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[18]->isActive = !(lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 20; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[10]->isActive = (lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_gmv_input + subGraphLinks[12]->isActive = (lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[13]->isActive = (lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[14]->isActive = (lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100067 + */ +StaticGraph100067::StaticGraph100067(GraphConfiguration100067* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100067, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysPdaf2OuterNode.Init(&_graphConfiguration.isysPdaf2OuterNodeConfiguration); + _lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf2WithGmvWithTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + _swNntmOuterNode.Init(&_graphConfiguration.swNntmOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2; + link->destNode = &_isysPdaf2OuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::PdafBuffer; + link->dest = GraphElementType::IsysPdaf2; + link->destNode = &_isysPdaf2OuterNode; + link->destTerminalId = 6; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysPdaf2; + link->srcNode = &_isysPdaf2OuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysPdaf2; + link->srcNode = &_isysPdaf2OuterNode; + link->srcTerminalId = 7; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[19]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[20]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[21]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[22]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 23; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysPdaf2OuterNode = &_isysPdaf2OuterNode; + _imageSubGraph.lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + _imageSubGraph.swNntmOuterNode = &_swNntmOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysPdaf2OuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + _imageSubGraph.swNntmOuterNode->contextId = 3; + _imageSubGraph.swScalerOuterNode->contextId = 4; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100067::~StaticGraph100067() +{ +} + +StaticGraphStatus imageSubGraphTopology100067::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf2WithGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + subGraphLinks[18]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode->setInnerNode(lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[6]->isActive = !(lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[7]->isActive = !(lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[8]->isActive = !(lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[9]->isActive = !(lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[15]->isActive = !(lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[17]->isActive = !(lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[16]->isActive = !(lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[18]->isActive = !(lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 23; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[10]->isActive = (lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_gmv_input + subGraphLinks[12]->isActive = (lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[13]->isActive = (lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[14]->isActive = (lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100139 + */ +StaticGraph100139::StaticGraph100139(GraphConfiguration100139* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100139, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysPdaf2WithCvOuterNode.Init(&_graphConfiguration.isysPdaf2WithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf2WithGmvWithTnrWithSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::PdafBuffer; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 7; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[24]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[25]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[26]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[27]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[28]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[29]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[30]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 31; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysPdaf2WithCvOuterNode = &_isysPdaf2WithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysPdaf2WithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + _imageSubGraph.swScalerOuterNode->contextId = 4; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100139::~StaticGraph100139() +{ +} + +StaticGraphStatus imageSubGraphTopology100139::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf2WithGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[24]->linkConfiguration->bufferSize == 0 && + subGraphLinks[26]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[25]->linkConfiguration->bufferSize == 0 && + subGraphLinks[27]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->setInnerNode(lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[15]->isActive = !(lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[16]->isActive = !(lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[17]->isActive = !(lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[18]->isActive = !(lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[24]->isActive = !(lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[26]->isActive = !(lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[25]->isActive = !(lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[27]->isActive = !(lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 31; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[19]->isActive = (lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_gmv_feature_output -> lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_gmv_input + subGraphLinks[21]->isActive = (lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_blend_output -> lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[22]->isActive = (lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_bc_output -> lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[23]->isActive = (lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmapsNotVanished = lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100139::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x6000000; // Run kernel ids 25 (ifd_segmap_bnlm_1_4) and 26 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0x180000000; // Run kernel ids 31 (ifd_segmap_xnr_1_4) and 32 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[9]->isActive == false) + { + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0x3000000000; // Run kernel ids 36 (ifd_segmap_acm_1_4) and 37 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[10]->isActive == false) + { + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x3000000000000000; // Run kernel ids 60 (ifd_segmap_cas_1_4) and 61 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[11]->isActive == false) + { + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= 0x6000000000000; // Run kernel ids 49 (ifd_segmap_tnr_bc_1_4) and 50 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[12]->isActive == false) + { + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= 0x60000000000000; // Run kernel ids 53 (ifd_segmap_tnr_blend_1_4) and 54 (smurf_tnr_blend_1_0) + } + + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100169 + */ +StaticGraph100169::StaticGraph100169(GraphConfiguration100169* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100169, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysPdaf2WithCvOuterNode.Init(&_graphConfiguration.isysPdaf2WithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffBayerPdaf2WithTnrWithSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf2WithTnrWithSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::PdafBuffer; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 7; + link->dest = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffBayerPdaf2WithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 24; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysPdaf2WithCvOuterNode = &_isysPdaf2WithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerPdaf2WithTnrWithSapOuterNode = &_lbffBayerPdaf2WithTnrWithSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysPdaf2WithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerPdaf2WithTnrWithSapOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100169::~StaticGraph100169() +{ +} + +StaticGraphStatus imageSubGraphTopology100169::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf2WithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf2WithTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf2WithTnrWithSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[22]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2WithTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[23]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2WithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf2WithTnrWithSapOuterNode->setInnerNode(lbffBayerPdaf2WithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[15]->isActive = !(lbffBayerPdaf2WithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[16]->isActive = !(lbffBayerPdaf2WithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[17]->isActive = !(lbffBayerPdaf2WithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[18]->isActive = !(lbffBayerPdaf2WithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[22]->isActive = !(lbffBayerPdaf2WithTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf2_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[23]->isActive = !(lbffBayerPdaf2WithTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf2_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 24; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[19]->isActive = (lbffBayerPdaf2WithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_WithTnr_WithSap:terminal_connect_blend_output -> lbff_Bayer_Pdaf2_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[20]->isActive = (lbffBayerPdaf2WithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_WithTnr_WithSap:terminal_connect_bc_output -> lbff_Bayer_Pdaf2_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[21]->isActive = (lbffBayerPdaf2WithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_Pdaf2_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf2WithTnrWithSapOuterNode->bitmapsNotVanished = lbffBayerPdaf2WithTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100169::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffBayerPdaf2WithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerPdaf2WithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerPdaf2WithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x6000000; // Run kernel ids 25 (ifd_segmap_bnlm_1_4) and 26 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffBayerPdaf2WithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerPdaf2WithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerPdaf2WithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0x180000000; // Run kernel ids 31 (ifd_segmap_xnr_1_4) and 32 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[9]->isActive == false) + { + lbffBayerPdaf2WithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerPdaf2WithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerPdaf2WithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0x3000000000; // Run kernel ids 36 (ifd_segmap_acm_1_4) and 37 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[10]->isActive == false) + { + lbffBayerPdaf2WithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerPdaf2WithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerPdaf2WithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x3000000000000000; // Run kernel ids 60 (ifd_segmap_cas_1_4) and 61 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[11]->isActive == false) + { + lbffBayerPdaf2WithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffBayerPdaf2WithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffBayerPdaf2WithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= 0x6000000000000; // Run kernel ids 49 (ifd_segmap_tnr_bc_1_4) and 50 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[12]->isActive == false) + { + lbffBayerPdaf2WithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffBayerPdaf2WithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffBayerPdaf2WithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= 0x60000000000000; // Run kernel ids 53 (ifd_segmap_tnr_blend_1_4) and 54 (smurf_tnr_blend_1_0) + } + + lbffBayerPdaf2WithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100008 + */ +StaticGraph100008::StaticGraph100008(GraphConfiguration100008* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100008, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf3NoGmvNoTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 10; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode = &_lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode->contextId = 1; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100008::~StaticGraph100008() +{ +} + +StaticGraphStatus imageSubGraphTopology100008::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3NoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3NoGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3NoGmvNoTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[8]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3NoGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[9]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3NoGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode->setInnerNode(lbffBayerPdaf3NoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[4]->isActive = !(lbffBayerPdaf3NoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[5]->isActive = !(lbffBayerPdaf3NoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[6]->isActive = !(lbffBayerPdaf3NoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[7]->isActive = !(lbffBayerPdaf3NoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[8]->isActive = !(lbffBayerPdaf3NoGmvNoTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf3_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[9]->isActive = !(lbffBayerPdaf3NoGmvNoTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf3_NoGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 10; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100009 + */ +StaticGraph100009::StaticGraph100009(GraphConfiguration100009* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100009, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf3WithGmvNoTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 15; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100009::~StaticGraph100009() +{ +} + +StaticGraphStatus imageSubGraphTopology100009::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3WithGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3WithGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3WithGmvNoTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[10]->linkConfiguration->bufferSize == 0 && + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3WithGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[11]->linkConfiguration->bufferSize == 0 && + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3WithGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode->setInnerNode(lbffBayerPdaf3WithGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[4]->isActive = !(lbffBayerPdaf3WithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[5]->isActive = !(lbffBayerPdaf3WithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[6]->isActive = !(lbffBayerPdaf3WithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[7]->isActive = !(lbffBayerPdaf3WithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[10]->isActive = !(lbffBayerPdaf3WithGmvNoTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[12]->isActive = !(lbffBayerPdaf3WithGmvNoTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[11]->isActive = !(lbffBayerPdaf3WithGmvNoTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[13]->isActive = !(lbffBayerPdaf3WithGmvNoTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 15; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[8]->isActive = (lbffBayerPdaf3WithGmvNoTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_Bayer_Pdaf3_WithGmv_NoTnr_NoSap:terminal_connect_gmv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100010 + */ +StaticGraph100010::StaticGraph100010(GraphConfiguration100010* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100010, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf3NoGmvWithTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 13; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode->contextId = 1; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100010::~StaticGraph100010() +{ +} + +StaticGraphStatus imageSubGraphTopology100010::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3NoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[11]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode->setInnerNode(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[4]->isActive = !(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[5]->isActive = !(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[6]->isActive = !(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[7]->isActive = !(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[11]->isActive = !(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[12]->isActive = !(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 13; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[8]->isActive = (lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[9]->isActive = (lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[10]->isActive = (lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100011 + */ +StaticGraph100011::StaticGraph100011(GraphConfiguration100011* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100011, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf3WithGmvWithTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[17]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 18; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100011::~StaticGraph100011() +{ +} + +StaticGraphStatus imageSubGraphTopology100011::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3WithGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode->setInnerNode(lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[4]->isActive = !(lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[5]->isActive = !(lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[6]->isActive = !(lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[7]->isActive = !(lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[13]->isActive = !(lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[15]->isActive = !(lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[14]->isActive = !(lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[16]->isActive = !(lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 18; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[8]->isActive = (lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_gmv_input + subGraphLinks[10]->isActive = (lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[11]->isActive = (lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[12]->isActive = (lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100140 + */ +StaticGraph100140::StaticGraph100140(GraphConfiguration100140* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100140, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf3WithGmvWithTnrWithSapOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[24]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[25]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[26]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[27]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[28]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 29; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + _imageSubGraph.swScalerOuterNode->contextId = 4; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100140::~StaticGraph100140() +{ +} + +StaticGraphStatus imageSubGraphTopology100140::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3WithGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[22]->linkConfiguration->bufferSize == 0 && + subGraphLinks[24]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[23]->linkConfiguration->bufferSize == 0 && + subGraphLinks[25]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->setInnerNode(lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[13]->isActive = !(lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[14]->isActive = !(lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[15]->isActive = !(lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[16]->isActive = !(lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[22]->isActive = !(lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[24]->isActive = !(lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[23]->isActive = !(lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[25]->isActive = !(lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 29; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[17]->isActive = (lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_gmv_feature_output -> lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_gmv_input + subGraphLinks[19]->isActive = (lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_blend_output -> lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[20]->isActive = (lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_bc_output -> lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[21]->isActive = (lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmapsNotVanished = lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100140::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[6]->isActive == false) + { + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x3000000; // Run kernel ids 24 (ifd_segmap_bnlm_1_4) and 25 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0xC0000000; // Run kernel ids 30 (ifd_segmap_xnr_1_4) and 31 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0x1800000000; // Run kernel ids 35 (ifd_segmap_acm_1_4) and 36 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[9]->isActive == false) + { + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x1800000000000000; // Run kernel ids 59 (ifd_segmap_cas_1_4) and 60 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[10]->isActive == false) + { + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= 0x3000000000000; // Run kernel ids 48 (ifd_segmap_tnr_bc_1_4) and 49 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[11]->isActive == false) + { + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= 0x30000000000000; // Run kernel ids 52 (ifd_segmap_tnr_blend_1_4) and 53 (smurf_tnr_blend_1_0) + } + + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100045 + */ +StaticGraph100045::StaticGraph100045(GraphConfiguration100045* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100045, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf3NoGmvWithTnrNoSapOuterNodeConfiguration); + _swNntmOuterNode.Init(&_graphConfiguration.swNntmOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[15]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[17]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 18; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + _imageSubGraph.swNntmOuterNode = &_swNntmOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swNntmOuterNode->contextId = 2; + _imageSubGraph.swScalerOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100045::~StaticGraph100045() +{ +} + +StaticGraphStatus imageSubGraphTopology100045::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3NoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[11]->linkConfiguration->bufferSize == 0 && + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode->setInnerNode(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[4]->isActive = !(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[5]->isActive = !(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[6]->isActive = !(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[7]->isActive = !(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[11]->isActive = !(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[13]->isActive = !(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> sw_nntm:terminal_connect_input + subGraphLinks[12]->isActive = !(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[14]->isActive = !(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> sw_nntm:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 18; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[8]->isActive = (lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[9]->isActive = (lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[10]->isActive = (lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100012 + */ +StaticGraph100012::StaticGraph100012(GraphConfiguration100012* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100012, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysDolOuterNode.Init(&_graphConfiguration.isysDolOuterNodeConfiguration); + _lbffDol2InputsNoGmvNoTnrNoSapOuterNode.Init(&_graphConfiguration.lbffDol2InputsNoGmvNoTnrNoSapOuterNodeConfiguration); + _swNntmOuterNode.Init(&_graphConfiguration.swNntmOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDol; + link->destNode = &_isysDolOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDol; + link->destNode = &_isysDolOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDol2InputsNoGmvNoTnrNoSap; + link->destNode = &_lbffDol2InputsNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::LbffDol2InputsNoGmvNoTnrNoSap; + link->destNode = &_lbffDol2InputsNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffDol2InputsNoGmvNoTnrNoSap; + link->destNode = &_lbffDol2InputsNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffDol2InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffDol2InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffDol2InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffDol2InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffDol2InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffDol2InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffDol2InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffDol2InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffDol2InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[16]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 17; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysDolOuterNode = &_isysDolOuterNode; + _imageSubGraph.lbffDol2InputsNoGmvNoTnrNoSapOuterNode = &_lbffDol2InputsNoGmvNoTnrNoSapOuterNode; + _imageSubGraph.swNntmOuterNode = &_swNntmOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysDolOuterNode->contextId = 0; + _imageSubGraph.lbffDol2InputsNoGmvNoTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swNntmOuterNode->contextId = 2; + _imageSubGraph.swScalerOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100012::~StaticGraph100012() +{ +} + +StaticGraphStatus imageSubGraphTopology100012::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffDol2InputsNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffDol2InputsNoGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffDol2InputsNoGmvNoTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[10]->linkConfiguration->bufferSize == 0 && + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol2InputsNoGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[11]->linkConfiguration->bufferSize == 0 && + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol2InputsNoGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffDol2InputsNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffDol2InputsNoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[5]->isActive = !(lbffDol2InputsNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_NoTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[6]->isActive = !(lbffDol2InputsNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[7]->isActive = !(lbffDol2InputsNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[8]->isActive = !(lbffDol2InputsNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[9]->isActive = !(lbffDol2InputsNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[10]->isActive = !(lbffDol2InputsNoGmvNoTnrNoSapInnerOptions & noMp); // lbff_Dol2Inputs_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[12]->isActive = !(lbffDol2InputsNoGmvNoTnrNoSapInnerOptions & noMp); // lbff_Dol2Inputs_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> sw_nntm:terminal_connect_input + subGraphLinks[11]->isActive = !(lbffDol2InputsNoGmvNoTnrNoSapInnerOptions & noDp); // lbff_Dol2Inputs_NoGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[13]->isActive = !(lbffDol2InputsNoGmvNoTnrNoSapInnerOptions & noDp); // lbff_Dol2Inputs_NoGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> sw_nntm:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 17; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Save the not-vanished HW bitmaps + */ + lbffDol2InputsNoGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffDol2InputsNoGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100013 + */ +StaticGraph100013::StaticGraph100013(GraphConfiguration100013* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100013, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysDolOuterNode.Init(&_graphConfiguration.isysDolOuterNodeConfiguration); + _lbffDol2InputsWithGmvNoTnrNoSapOuterNode.Init(&_graphConfiguration.lbffDol2InputsWithGmvNoTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDol; + link->destNode = &_isysDolOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDol; + link->destNode = &_isysDolOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->destNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->destNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->destNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->destNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[16]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 17; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysDolOuterNode = &_isysDolOuterNode; + _imageSubGraph.lbffDol2InputsWithGmvNoTnrNoSapOuterNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysDolOuterNode->contextId = 0; + _imageSubGraph.lbffDol2InputsWithGmvNoTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100013::~StaticGraph100013() +{ +} + +StaticGraphStatus imageSubGraphTopology100013::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffDol2InputsWithGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffDol2InputsWithGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffDol2InputsWithGmvNoTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol2InputsWithGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol2InputsWithGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffDol2InputsWithGmvNoTnrNoSapOuterNode->setInnerNode(lbffDol2InputsWithGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[5]->isActive = !(lbffDol2InputsWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_NoTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[6]->isActive = !(lbffDol2InputsWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[7]->isActive = !(lbffDol2InputsWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[8]->isActive = !(lbffDol2InputsWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[9]->isActive = !(lbffDol2InputsWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[12]->isActive = !(lbffDol2InputsWithGmvNoTnrNoSapInnerOptions & noMp); // lbff_Dol2Inputs_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[14]->isActive = !(lbffDol2InputsWithGmvNoTnrNoSapInnerOptions & noMp); // lbff_Dol2Inputs_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[13]->isActive = !(lbffDol2InputsWithGmvNoTnrNoSapInnerOptions & noDp); // lbff_Dol2Inputs_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[15]->isActive = !(lbffDol2InputsWithGmvNoTnrNoSapInnerOptions & noDp); // lbff_Dol2Inputs_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 17; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[10]->isActive = (lbffDol2InputsWithGmvNoTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol2Inputs_WithGmv_NoTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_Dol2Inputs_WithGmv_NoTnr_NoSap:terminal_connect_gmv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffDol2InputsWithGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffDol2InputsWithGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100014 + */ +StaticGraph100014::StaticGraph100014(GraphConfiguration100014* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100014, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysDolOuterNode.Init(&_graphConfiguration.isysDolOuterNodeConfiguration); + _lbffDol2InputsNoGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffDol2InputsNoGmvWithTnrNoSapOuterNodeConfiguration); + _swNntmOuterNode.Init(&_graphConfiguration.swNntmOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDol; + link->destNode = &_isysDolOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDol; + link->destNode = &_isysDolOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[17]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[19]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 20; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysDolOuterNode = &_isysDolOuterNode; + _imageSubGraph.lbffDol2InputsNoGmvWithTnrNoSapOuterNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + _imageSubGraph.swNntmOuterNode = &_swNntmOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysDolOuterNode->contextId = 0; + _imageSubGraph.lbffDol2InputsNoGmvWithTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swNntmOuterNode->contextId = 2; + _imageSubGraph.swScalerOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100014::~StaticGraph100014() +{ +} + +StaticGraphStatus imageSubGraphTopology100014::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffDol2InputsNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffDol2InputsNoGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffDol2InputsNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol2InputsNoGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol2InputsNoGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffDol2InputsNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffDol2InputsNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[5]->isActive = !(lbffDol2InputsNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[6]->isActive = !(lbffDol2InputsNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[7]->isActive = !(lbffDol2InputsNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[8]->isActive = !(lbffDol2InputsNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[9]->isActive = !(lbffDol2InputsNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[13]->isActive = !(lbffDol2InputsNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[15]->isActive = !(lbffDol2InputsNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> sw_nntm:terminal_connect_input + subGraphLinks[14]->isActive = !(lbffDol2InputsNoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[16]->isActive = !(lbffDol2InputsNoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> sw_nntm:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 20; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[10]->isActive = (lbffDol2InputsNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[11]->isActive = (lbffDol2InputsNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[12]->isActive = (lbffDol2InputsNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffDol2InputsNoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffDol2InputsNoGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100015 + */ +StaticGraph100015::StaticGraph100015(GraphConfiguration100015* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100015, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysDolOuterNode.Init(&_graphConfiguration.isysDolOuterNodeConfiguration); + _lbffDol2InputsWithGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffDol2InputsWithGmvWithTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDol; + link->destNode = &_isysDolOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDol; + link->destNode = &_isysDolOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[19]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 20; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysDolOuterNode = &_isysDolOuterNode; + _imageSubGraph.lbffDol2InputsWithGmvWithTnrNoSapOuterNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysDolOuterNode->contextId = 0; + _imageSubGraph.lbffDol2InputsWithGmvWithTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100015::~StaticGraph100015() +{ +} + +StaticGraphStatus imageSubGraphTopology100015::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffDol2InputsWithGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffDol2InputsWithGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffDol2InputsWithGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol2InputsWithGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + subGraphLinks[18]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol2InputsWithGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffDol2InputsWithGmvWithTnrNoSapOuterNode->setInnerNode(lbffDol2InputsWithGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[5]->isActive = !(lbffDol2InputsWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[6]->isActive = !(lbffDol2InputsWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[7]->isActive = !(lbffDol2InputsWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[8]->isActive = !(lbffDol2InputsWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[9]->isActive = !(lbffDol2InputsWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[15]->isActive = !(lbffDol2InputsWithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[17]->isActive = !(lbffDol2InputsWithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[16]->isActive = !(lbffDol2InputsWithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[18]->isActive = !(lbffDol2InputsWithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 20; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[10]->isActive = (lbffDol2InputsWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_gmv_input + subGraphLinks[12]->isActive = (lbffDol2InputsWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[13]->isActive = (lbffDol2InputsWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[14]->isActive = (lbffDol2InputsWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffDol2InputsWithGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffDol2InputsWithGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100016 + */ +StaticGraph100016::StaticGraph100016(GraphConfiguration100016* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100016, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysDolOuterNode.Init(&_graphConfiguration.isysDolOuterNodeConfiguration); + _lbffDolSmoothOuterNode.Init(&_graphConfiguration.lbffDolSmoothOuterNodeConfiguration); + _lbffDol3InputsNoGmvNoTnrNoSapOuterNode.Init(&_graphConfiguration.lbffDol3InputsNoGmvNoTnrNoSapOuterNodeConfiguration); + _swNntmOuterNode.Init(&_graphConfiguration.swNntmOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDol; + link->destNode = &_isysDolOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDol; + link->destNode = &_isysDolOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDolSmooth; + link->destNode = &_lbffDolSmoothOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffDolSmooth; + link->srcNode = &_lbffDolSmoothOuterNode; + link->srcTerminalId = 16; + link->dest = GraphElementType::LbffDol3InputsNoGmvNoTnrNoSap; + link->destNode = &_lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDol3InputsNoGmvNoTnrNoSap; + link->destNode = &_lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::LbffDol3InputsNoGmvNoTnrNoSap; + link->destNode = &_lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffDol3InputsNoGmvNoTnrNoSap; + link->destNode = &_lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffDol3InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffDol3InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffDol3InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffDol3InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffDol3InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffDol3InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffDol3InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffDol3InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffDol3InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[16]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[18]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 19; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysDolOuterNode = &_isysDolOuterNode; + _imageSubGraph.lbffDolSmoothOuterNode = &_lbffDolSmoothOuterNode; + _imageSubGraph.lbffDol3InputsNoGmvNoTnrNoSapOuterNode = &_lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + _imageSubGraph.swNntmOuterNode = &_swNntmOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysDolOuterNode->contextId = 0; + _imageSubGraph.lbffDolSmoothOuterNode->contextId = 1; + _imageSubGraph.lbffDol3InputsNoGmvNoTnrNoSapOuterNode->contextId = 2; + _imageSubGraph.swNntmOuterNode->contextId = 3; + _imageSubGraph.swScalerOuterNode->contextId = 4; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100016::~StaticGraph100016() +{ +} + +StaticGraphStatus imageSubGraphTopology100016::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffDol3InputsNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffDol3InputsNoGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffDol3InputsNoGmvNoTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol3InputsNoGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol3InputsNoGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffDol3InputsNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffDol3InputsNoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[7]->isActive = !(lbffDol3InputsNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_NoGmv_NoTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[8]->isActive = !(lbffDol3InputsNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[9]->isActive = !(lbffDol3InputsNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[10]->isActive = !(lbffDol3InputsNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[11]->isActive = !(lbffDol3InputsNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[12]->isActive = !(lbffDol3InputsNoGmvNoTnrNoSapInnerOptions & noMp); // lbff_Dol3Inputs_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[14]->isActive = !(lbffDol3InputsNoGmvNoTnrNoSapInnerOptions & noMp); // lbff_Dol3Inputs_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> sw_nntm:terminal_connect_input + subGraphLinks[13]->isActive = !(lbffDol3InputsNoGmvNoTnrNoSapInnerOptions & noDp); // lbff_Dol3Inputs_NoGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[15]->isActive = !(lbffDol3InputsNoGmvNoTnrNoSapInnerOptions & noDp); // lbff_Dol3Inputs_NoGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> sw_nntm:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 19; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Save the not-vanished HW bitmaps + */ + lbffDol3InputsNoGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffDol3InputsNoGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100017 + */ +StaticGraph100017::StaticGraph100017(GraphConfiguration100017* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100017, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysDolOuterNode.Init(&_graphConfiguration.isysDolOuterNodeConfiguration); + _lbffDolSmoothOuterNode.Init(&_graphConfiguration.lbffDolSmoothOuterNodeConfiguration); + _lbffDol3InputsWithGmvNoTnrNoSapOuterNode.Init(&_graphConfiguration.lbffDol3InputsWithGmvNoTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDol; + link->destNode = &_isysDolOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDol; + link->destNode = &_isysDolOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDolSmooth; + link->destNode = &_lbffDolSmoothOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffDolSmooth; + link->srcNode = &_lbffDolSmoothOuterNode; + link->srcTerminalId = 16; + link->dest = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->destNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->destNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->destNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->destNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->destNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[18]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 19; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysDolOuterNode = &_isysDolOuterNode; + _imageSubGraph.lbffDolSmoothOuterNode = &_lbffDolSmoothOuterNode; + _imageSubGraph.lbffDol3InputsWithGmvNoTnrNoSapOuterNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysDolOuterNode->contextId = 0; + _imageSubGraph.lbffDolSmoothOuterNode->contextId = 1; + _imageSubGraph.lbffDol3InputsWithGmvNoTnrNoSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100017::~StaticGraph100017() +{ +} + +StaticGraphStatus imageSubGraphTopology100017::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffDol3InputsWithGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffDol3InputsWithGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffDol3InputsWithGmvNoTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol3InputsWithGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol3InputsWithGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffDol3InputsWithGmvNoTnrNoSapOuterNode->setInnerNode(lbffDol3InputsWithGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[7]->isActive = !(lbffDol3InputsWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_NoTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[8]->isActive = !(lbffDol3InputsWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[9]->isActive = !(lbffDol3InputsWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[10]->isActive = !(lbffDol3InputsWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[11]->isActive = !(lbffDol3InputsWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[14]->isActive = !(lbffDol3InputsWithGmvNoTnrNoSapInnerOptions & noMp); // lbff_Dol3Inputs_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[16]->isActive = !(lbffDol3InputsWithGmvNoTnrNoSapInnerOptions & noMp); // lbff_Dol3Inputs_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[15]->isActive = !(lbffDol3InputsWithGmvNoTnrNoSapInnerOptions & noDp); // lbff_Dol3Inputs_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[17]->isActive = !(lbffDol3InputsWithGmvNoTnrNoSapInnerOptions & noDp); // lbff_Dol3Inputs_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 19; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[12]->isActive = (lbffDol3InputsWithGmvNoTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol3Inputs_WithGmv_NoTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_Dol3Inputs_WithGmv_NoTnr_NoSap:terminal_connect_gmv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffDol3InputsWithGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffDol3InputsWithGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100018 + */ +StaticGraph100018::StaticGraph100018(GraphConfiguration100018* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100018, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysDolOuterNode.Init(&_graphConfiguration.isysDolOuterNodeConfiguration); + _lbffDolSmoothOuterNode.Init(&_graphConfiguration.lbffDolSmoothOuterNodeConfiguration); + _lbffDol3InputsNoGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffDol3InputsNoGmvWithTnrNoSapOuterNodeConfiguration); + _swNntmOuterNode.Init(&_graphConfiguration.swNntmOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDol; + link->destNode = &_isysDolOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDol; + link->destNode = &_isysDolOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDolSmooth; + link->destNode = &_lbffDolSmoothOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffDolSmooth; + link->srcNode = &_lbffDolSmoothOuterNode; + link->srcTerminalId = 16; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[19]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[20]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[21]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 22; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysDolOuterNode = &_isysDolOuterNode; + _imageSubGraph.lbffDolSmoothOuterNode = &_lbffDolSmoothOuterNode; + _imageSubGraph.lbffDol3InputsNoGmvWithTnrNoSapOuterNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + _imageSubGraph.swNntmOuterNode = &_swNntmOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysDolOuterNode->contextId = 0; + _imageSubGraph.lbffDolSmoothOuterNode->contextId = 1; + _imageSubGraph.lbffDol3InputsNoGmvWithTnrNoSapOuterNode->contextId = 2; + _imageSubGraph.swNntmOuterNode->contextId = 3; + _imageSubGraph.swScalerOuterNode->contextId = 4; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100018::~StaticGraph100018() +{ +} + +StaticGraphStatus imageSubGraphTopology100018::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffDol3InputsNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffDol3InputsNoGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffDol3InputsNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol3InputsNoGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + subGraphLinks[18]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol3InputsNoGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffDol3InputsNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffDol3InputsNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[7]->isActive = !(lbffDol3InputsNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[8]->isActive = !(lbffDol3InputsNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[9]->isActive = !(lbffDol3InputsNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[10]->isActive = !(lbffDol3InputsNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[11]->isActive = !(lbffDol3InputsNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[15]->isActive = !(lbffDol3InputsNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[17]->isActive = !(lbffDol3InputsNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> sw_nntm:terminal_connect_input + subGraphLinks[16]->isActive = !(lbffDol3InputsNoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[18]->isActive = !(lbffDol3InputsNoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> sw_nntm:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 22; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[12]->isActive = (lbffDol3InputsNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[13]->isActive = (lbffDol3InputsNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[14]->isActive = (lbffDol3InputsNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffDol3InputsNoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffDol3InputsNoGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100019 + */ +StaticGraph100019::StaticGraph100019(GraphConfiguration100019* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100019, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysDolOuterNode.Init(&_graphConfiguration.isysDolOuterNodeConfiguration); + _lbffDolSmoothOuterNode.Init(&_graphConfiguration.lbffDolSmoothOuterNodeConfiguration); + _lbffDol3InputsWithGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffDol3InputsWithGmvWithTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDol; + link->destNode = &_isysDolOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDol; + link->destNode = &_isysDolOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDolSmooth; + link->destNode = &_lbffDolSmoothOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffDolSmooth; + link->srcNode = &_lbffDolSmoothOuterNode; + link->srcTerminalId = 16; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[21]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 22; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysDolOuterNode = &_isysDolOuterNode; + _imageSubGraph.lbffDolSmoothOuterNode = &_lbffDolSmoothOuterNode; + _imageSubGraph.lbffDol3InputsWithGmvWithTnrNoSapOuterNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysDolOuterNode->contextId = 0; + _imageSubGraph.lbffDolSmoothOuterNode->contextId = 1; + _imageSubGraph.lbffDol3InputsWithGmvWithTnrNoSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100019::~StaticGraph100019() +{ +} + +StaticGraphStatus imageSubGraphTopology100019::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffDol3InputsWithGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffDol3InputsWithGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffDol3InputsWithGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && + subGraphLinks[19]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol3InputsWithGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[18]->linkConfiguration->bufferSize == 0 && + subGraphLinks[20]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol3InputsWithGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffDol3InputsWithGmvWithTnrNoSapOuterNode->setInnerNode(lbffDol3InputsWithGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[7]->isActive = !(lbffDol3InputsWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[8]->isActive = !(lbffDol3InputsWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[9]->isActive = !(lbffDol3InputsWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[10]->isActive = !(lbffDol3InputsWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[11]->isActive = !(lbffDol3InputsWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[17]->isActive = !(lbffDol3InputsWithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[19]->isActive = !(lbffDol3InputsWithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[18]->isActive = !(lbffDol3InputsWithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[20]->isActive = !(lbffDol3InputsWithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 22; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[12]->isActive = (lbffDol3InputsWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_gmv_input + subGraphLinks[14]->isActive = (lbffDol3InputsWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[15]->isActive = (lbffDol3InputsWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[16]->isActive = (lbffDol3InputsWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffDol3InputsWithGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffDol3InputsWithGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100020 + */ +StaticGraph100020::StaticGraph100020(GraphConfiguration100020* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100020, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) + ,_irSubGraph(_sinkMappingConfiguration) + ,_image_irSubGraph(_sinkMappingConfiguration) +{ + + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffRgbIrNoGmvNoTnrNoSapOuterNode.Init(&_graphConfiguration.lbffRgbIrNoGmvNoTnrNoSapOuterNodeConfiguration); + _lbffRgbIrIrNoGmvNoTnrNoSapOuterNode.Init(&_graphConfiguration.lbffRgbIrIrNoGmvNoTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + _imageSubGraph.links[0] = link; + _irSubGraph.links[0] = link; + _image_irSubGraph.links[0] = link; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffRgbIrNoGmvNoTnrNoSap; + link->destNode = &_lbffRgbIrNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + _imageSubGraph.links[1] = link; + _irSubGraph.links[1] = link; + _image_irSubGraph.links[1] = link; + + link = &_graphLinks[2]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffRgbIrNoGmvNoTnrNoSap; + link->destNode = &_lbffRgbIrNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + _imageSubGraph.links[2] = link; + _irSubGraph.links[2] = link; + _image_irSubGraph.links[2] = link; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffRgbIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[3] = link; + _irSubGraph.links[3] = link; + _image_irSubGraph.links[3] = link; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffRgbIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[4] = link; + _irSubGraph.links[4] = link; + _image_irSubGraph.links[4] = link; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffRgbIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[5] = link; + _irSubGraph.links[5] = link; + _image_irSubGraph.links[5] = link; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffRgbIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[6] = link; + _irSubGraph.links[6] = link; + _image_irSubGraph.links[6] = link; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffRgbIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[7] = link; + _irSubGraph.links[7] = link; + _image_irSubGraph.links[7] = link; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffRgbIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[8] = link; + _irSubGraph.links[8] = link; + _image_irSubGraph.links[8] = link; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffRgbIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[9] = link; + _irSubGraph.links[9] = link; + _image_irSubGraph.links[9] = link; + + link = &_graphLinks[10]; + link->src = GraphElementType::LscBufferIr; + link->dest = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + _irSubGraph.links[10] = link; + _image_irSubGraph.links[10] = link; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffRgbIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 14; + link->dest = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + _irSubGraph.links[11] = link; + _image_irSubGraph.links[11] = link; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::IrAeOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[12] = link; + _image_irSubGraph.links[12] = link; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::IrAfStdOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[13] = link; + _image_irSubGraph.links[13] = link; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::IrAwbStdOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[14] = link; + _image_irSubGraph.links[14] = link; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::IrAwbSatOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[15] = link; + _image_irSubGraph.links[15] = link; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::IrMp; + link->type = LinkType::Node2Sink; + _irSubGraph.links[16] = link; + _image_irSubGraph.links[16] = link; + + for (uint8_t i = 0; i < 17; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffRgbIrNoGmvNoTnrNoSapOuterNode = &_lbffRgbIrNoGmvNoTnrNoSapOuterNode; + _irSubGraph.isysOuterNode = &_isysOuterNode; + _irSubGraph.lbffRgbIrNoGmvNoTnrNoSapOuterNode = &_lbffRgbIrNoGmvNoTnrNoSapOuterNode; + _irSubGraph.lbffRgbIrIrNoGmvNoTnrNoSapOuterNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + _image_irSubGraph.isysOuterNode = &_isysOuterNode; + _image_irSubGraph.lbffRgbIrNoGmvNoTnrNoSapOuterNode = &_lbffRgbIrNoGmvNoTnrNoSapOuterNode; + _image_irSubGraph.lbffRgbIrIrNoGmvNoTnrNoSapOuterNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + + // choose the selected sub graph + if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.video != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.stills != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.thumbnail != static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.previewIr == static_cast(HwSink::Disconnected))) + { + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffRgbIrNoGmvNoTnrNoSapOuterNode->contextId = 1; + } + else if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.video == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.stills == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.thumbnail == static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.previewIr != static_cast(HwSink::Disconnected))) + { + _selectedGraphTopology = &_irSubGraph; + + // logical node IDs + _irSubGraph.isysOuterNode->contextId = 0; + _irSubGraph.lbffRgbIrNoGmvNoTnrNoSapOuterNode->contextId = 1; + _irSubGraph.lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->contextId = 2; + } + else if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.video != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.stills != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.thumbnail != static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.previewIr != static_cast(HwSink::Disconnected))) + { + _selectedGraphTopology = &_image_irSubGraph; + + // logical node IDs + _image_irSubGraph.isysOuterNode->contextId = 0; + _image_irSubGraph.lbffRgbIrNoGmvNoTnrNoSapOuterNode->contextId = 1; + _image_irSubGraph.lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->contextId = 2; + } + else + { + STATIC_GRAPH_LOG("Didn't found a matching sub graph for the selected virtual sinks."); + } + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100020::~StaticGraph100020() +{ +} + +StaticGraphStatus imageSubGraphTopology100020::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffRgbIrNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrNoGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrNoGmvNoTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[8]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrNoGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[9]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrNoGmvNoTnrNoSapInnerOptions |= noDp; + } + // always active private inner options + lbffRgbIrNoGmvNoTnrNoSapInnerOptions |= (noIr); + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffRgbIrNoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[4]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[5]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[6]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[7]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[8]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & noMp); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[9]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & noDp); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 10; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Save the not-vanished HW bitmaps + */ + lbffRgbIrNoGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrNoGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus irSubGraphTopology100020::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags irPublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.irInnerOptions); + + /* + * Setting Node lbffRgbIrNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrNoGmvNoTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrNoGmvNoTnrNoSapInnerOptions |= (noPdaf); + // active public options according to sink mapping + if ( + subGraphLinks[8]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrNoGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[9]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrNoGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Setting Node lbffRgbIrIrNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions |= (noPdaf | noDp | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions |= noMp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffRgbIrNoGmvNoTnrNoSapInnerOptions); + lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[4]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[5]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[6]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[7]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[8]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & noMp); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[9]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & noDp); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[12]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ir_ae_out + subGraphLinks[13]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> ir_af_std_out + subGraphLinks[14]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> ir_awb_std_out + subGraphLinks[15]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> ir_awb_sat_out + subGraphLinks[16]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & noMp); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> ir_mp + + /* + * Link enablement by private inner options + */ + subGraphLinks[11]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & noIr); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_ir_output -> lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_main_data_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 17; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Save the not-vanished HW bitmaps + */ + lbffRgbIrNoGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrNoGmvNoTnrNoSapOuterNode->bitmaps; + lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus image_irSubGraphTopology100020::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + InnerNodeOptionsFlags irPublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.irInnerOptions); + + /* + * Setting Node lbffRgbIrNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrNoGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // active public inner options according to sink mapping + if ( + subGraphLinks[8]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrNoGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[9]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrNoGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Setting Node lbffRgbIrIrNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions |= (noPdaf | noDp | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions |= noMp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffRgbIrNoGmvNoTnrNoSapInnerOptions); + lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[4]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[5]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[6]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[7]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[8]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & noMp); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[9]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & noDp); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[12]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ir_ae_out + subGraphLinks[13]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> ir_af_std_out + subGraphLinks[14]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> ir_awb_std_out + subGraphLinks[15]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> ir_awb_sat_out + subGraphLinks[16]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & noMp); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> ir_mp + + /* + * Link enablement by private inner options + */ + subGraphLinks[11]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & noIr); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_ir_output -> lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_main_data_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 17; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Save the not-vanished HW bitmaps + */ + lbffRgbIrNoGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrNoGmvNoTnrNoSapOuterNode->bitmaps; + lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100021 + */ +StaticGraph100021::StaticGraph100021(GraphConfiguration100021* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100021, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) + ,_irSubGraph(_sinkMappingConfiguration) + ,_image_irSubGraph(_sinkMappingConfiguration) +{ + + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffRgbIrWithGmvNoTnrNoSapOuterNode.Init(&_graphConfiguration.lbffRgbIrWithGmvNoTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + _lbffRgbIrIrNoGmvNoTnrNoSapOuterNode.Init(&_graphConfiguration.lbffRgbIrIrNoGmvNoTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + _imageSubGraph.links[0] = link; + _irSubGraph.links[0] = link; + _image_irSubGraph.links[0] = link; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->destNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + _imageSubGraph.links[1] = link; + _irSubGraph.links[1] = link; + _image_irSubGraph.links[1] = link; + + link = &_graphLinks[2]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->destNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + _imageSubGraph.links[2] = link; + _irSubGraph.links[2] = link; + _image_irSubGraph.links[2] = link; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[3] = link; + _irSubGraph.links[3] = link; + _image_irSubGraph.links[3] = link; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[4] = link; + _irSubGraph.links[4] = link; + _image_irSubGraph.links[4] = link; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[5] = link; + _irSubGraph.links[5] = link; + _image_irSubGraph.links[5] = link; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[6] = link; + _irSubGraph.links[6] = link; + _image_irSubGraph.links[6] = link; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[7] = link; + _irSubGraph.links[7] = link; + _image_irSubGraph.links[7] = link; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->destNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _imageSubGraph.links[8] = link; + _irSubGraph.links[8] = link; + _image_irSubGraph.links[8] = link; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[9] = link; + _irSubGraph.links[9] = link; + _image_irSubGraph.links[9] = link; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[10] = link; + _irSubGraph.links[10] = link; + _image_irSubGraph.links[10] = link; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[11] = link; + _irSubGraph.links[11] = link; + _image_irSubGraph.links[11] = link; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + _imageSubGraph.links[12] = link; + _image_irSubGraph.links[12] = link; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + _imageSubGraph.links[13] = link; + _image_irSubGraph.links[13] = link; + + link = &_graphLinks[14]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[14] = link; + _image_irSubGraph.links[14] = link; + + link = &_graphLinks[15]; + link->src = GraphElementType::LscBufferIr; + link->dest = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + _irSubGraph.links[12] = link; + _image_irSubGraph.links[15] = link; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 14; + link->dest = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + _irSubGraph.links[13] = link; + _image_irSubGraph.links[16] = link; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::IrAeOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[14] = link; + _image_irSubGraph.links[17] = link; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::IrAfStdOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[15] = link; + _image_irSubGraph.links[18] = link; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::IrAwbStdOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[16] = link; + _image_irSubGraph.links[19] = link; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::IrAwbSatOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[17] = link; + _image_irSubGraph.links[20] = link; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::IrMp; + link->type = LinkType::Node2Sink; + _irSubGraph.links[18] = link; + _image_irSubGraph.links[21] = link; + + for (uint8_t i = 0; i < 22; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffRgbIrWithGmvNoTnrNoSapOuterNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + _irSubGraph.isysOuterNode = &_isysOuterNode; + _irSubGraph.lbffRgbIrWithGmvNoTnrNoSapOuterNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + _irSubGraph.lbffRgbIrIrNoGmvNoTnrNoSapOuterNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + _image_irSubGraph.isysOuterNode = &_isysOuterNode; + _image_irSubGraph.lbffRgbIrWithGmvNoTnrNoSapOuterNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + _image_irSubGraph.swGdcOuterNode = &_swGdcOuterNode; + _image_irSubGraph.lbffRgbIrIrNoGmvNoTnrNoSapOuterNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + + // choose the selected sub graph + if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.video != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.stills != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.thumbnail != static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.previewIr == static_cast(HwSink::Disconnected))) + { + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffRgbIrWithGmvNoTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + } + else if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.video == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.stills == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.thumbnail == static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.previewIr != static_cast(HwSink::Disconnected))) + { + _selectedGraphTopology = &_irSubGraph; + + // logical node IDs + _irSubGraph.isysOuterNode->contextId = 0; + _irSubGraph.lbffRgbIrWithGmvNoTnrNoSapOuterNode->contextId = 1; + _irSubGraph.lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->contextId = 2; + } + else if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.video != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.stills != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.thumbnail != static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.previewIr != static_cast(HwSink::Disconnected))) + { + _selectedGraphTopology = &_image_irSubGraph; + + // logical node IDs + _image_irSubGraph.isysOuterNode->contextId = 0; + _image_irSubGraph.lbffRgbIrWithGmvNoTnrNoSapOuterNode->contextId = 1; + _image_irSubGraph.swGdcOuterNode->contextId = 2; + _image_irSubGraph.lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->contextId = 3; + } + else + { + STATIC_GRAPH_LOG("Didn't found a matching sub graph for the selected virtual sinks."); + } + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100021::~StaticGraph100021() +{ +} + +StaticGraphStatus imageSubGraphTopology100021::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffRgbIrWithGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrWithGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrWithGmvNoTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[10]->linkConfiguration->bufferSize == 0 && + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrWithGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[11]->linkConfiguration->bufferSize == 0 && + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrWithGmvNoTnrNoSapInnerOptions |= noDp; + } + // always active private inner options + lbffRgbIrWithGmvNoTnrNoSapInnerOptions |= (noIr); + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrWithGmvNoTnrNoSapOuterNode->setInnerNode(lbffRgbIrWithGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[4]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[5]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[6]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[7]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[10]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & noMp); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[12]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & noMp); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[11]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & noDp); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[13]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & noDp); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 15; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[8]->isActive = (lbffRgbIrWithGmvNoTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_gmv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffRgbIrWithGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrWithGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus irSubGraphTopology100021::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags irPublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.irInnerOptions); + + /* + * Setting Node lbffRgbIrWithGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrWithGmvNoTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrWithGmvNoTnrNoSapInnerOptions |= (noPdaf); + // active public options according to sink mapping + if ( + subGraphLinks[10]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrWithGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[11]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrWithGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Setting Node lbffRgbIrIrNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions |= (noPdaf | noDp | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[18]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions |= noMp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrWithGmvNoTnrNoSapOuterNode->setInnerNode(lbffRgbIrWithGmvNoTnrNoSapInnerOptions); + lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[4]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[5]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[6]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[7]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[10]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & noMp); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[11]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & noDp); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[14]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ir_ae_out + subGraphLinks[15]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> ir_af_std_out + subGraphLinks[16]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> ir_awb_std_out + subGraphLinks[17]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> ir_awb_sat_out + subGraphLinks[18]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & noMp); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> ir_mp + + /* + * Link enablement by private inner options + */ + subGraphLinks[13]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & noIr); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ir_output -> lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_main_data_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 19; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[8]->isActive = (lbffRgbIrWithGmvNoTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_gmv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffRgbIrWithGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrWithGmvNoTnrNoSapOuterNode->bitmaps; + lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus image_irSubGraphTopology100021::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + InnerNodeOptionsFlags irPublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.irInnerOptions); + + /* + * Setting Node lbffRgbIrWithGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrWithGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // active public inner options according to sink mapping + if ( + subGraphLinks[10]->linkConfiguration->bufferSize == 0 && + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrWithGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[11]->linkConfiguration->bufferSize == 0 && + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrWithGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Setting Node lbffRgbIrIrNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions |= (noPdaf | noDp | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[21]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions |= noMp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrWithGmvNoTnrNoSapOuterNode->setInnerNode(lbffRgbIrWithGmvNoTnrNoSapInnerOptions); + lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[4]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[5]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[6]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[7]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[10]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & noMp); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[12]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & noMp); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[11]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & noDp); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[13]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & noDp); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + subGraphLinks[17]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ir_ae_out + subGraphLinks[18]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> ir_af_std_out + subGraphLinks[19]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> ir_awb_std_out + subGraphLinks[20]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> ir_awb_sat_out + subGraphLinks[21]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & noMp); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> ir_mp + + /* + * Link enablement by private inner options + */ + subGraphLinks[16]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & noIr); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ir_output -> lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_main_data_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 22; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[8]->isActive = (lbffRgbIrWithGmvNoTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_gmv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffRgbIrWithGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrWithGmvNoTnrNoSapOuterNode->bitmaps; + lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100022 + */ +StaticGraph100022::StaticGraph100022(GraphConfiguration100022* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100022, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) + ,_irSubGraph(_sinkMappingConfiguration) + ,_image_irSubGraph(_sinkMappingConfiguration) +{ + + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffRgbIrNoGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffRgbIrNoGmvWithTnrNoSapOuterNodeConfiguration); + _lbffRgbIrIrNoGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffRgbIrIrNoGmvWithTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + _imageSubGraph.links[0] = link; + _irSubGraph.links[0] = link; + _image_irSubGraph.links[0] = link; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + _imageSubGraph.links[1] = link; + _irSubGraph.links[1] = link; + _image_irSubGraph.links[1] = link; + + link = &_graphLinks[2]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + _imageSubGraph.links[2] = link; + _irSubGraph.links[2] = link; + _image_irSubGraph.links[2] = link; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[3] = link; + _irSubGraph.links[3] = link; + _image_irSubGraph.links[3] = link; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[4] = link; + _irSubGraph.links[4] = link; + _image_irSubGraph.links[4] = link; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[5] = link; + _irSubGraph.links[5] = link; + _image_irSubGraph.links[5] = link; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[6] = link; + _irSubGraph.links[6] = link; + _image_irSubGraph.links[6] = link; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[7] = link; + _irSubGraph.links[7] = link; + _image_irSubGraph.links[7] = link; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _imageSubGraph.links[8] = link; + _irSubGraph.links[8] = link; + _image_irSubGraph.links[8] = link; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _imageSubGraph.links[9] = link; + _irSubGraph.links[9] = link; + _image_irSubGraph.links[9] = link; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _imageSubGraph.links[10] = link; + _irSubGraph.links[10] = link; + _image_irSubGraph.links[10] = link; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[11] = link; + _irSubGraph.links[11] = link; + _image_irSubGraph.links[11] = link; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[12] = link; + _irSubGraph.links[12] = link; + _image_irSubGraph.links[12] = link; + + link = &_graphLinks[13]; + link->src = GraphElementType::LscBufferIr; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + _irSubGraph.links[13] = link; + _image_irSubGraph.links[13] = link; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 14; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + _irSubGraph.links[14] = link; + _image_irSubGraph.links[14] = link; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::IrAeOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[15] = link; + _image_irSubGraph.links[15] = link; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::IrAfStdOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[16] = link; + _image_irSubGraph.links[16] = link; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::IrAwbStdOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[17] = link; + _image_irSubGraph.links[17] = link; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::IrAwbSatOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[18] = link; + _image_irSubGraph.links[18] = link; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _irSubGraph.links[19] = link; + _image_irSubGraph.links[19] = link; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _irSubGraph.links[20] = link; + _image_irSubGraph.links[20] = link; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _irSubGraph.links[21] = link; + _image_irSubGraph.links[21] = link; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::IrMp; + link->type = LinkType::Node2Sink; + _irSubGraph.links[22] = link; + _image_irSubGraph.links[22] = link; + + for (uint8_t i = 0; i < 23; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffRgbIrNoGmvWithTnrNoSapOuterNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + _irSubGraph.isysOuterNode = &_isysOuterNode; + _irSubGraph.lbffRgbIrNoGmvWithTnrNoSapOuterNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + _irSubGraph.lbffRgbIrIrNoGmvWithTnrNoSapOuterNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + _image_irSubGraph.isysOuterNode = &_isysOuterNode; + _image_irSubGraph.lbffRgbIrNoGmvWithTnrNoSapOuterNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + _image_irSubGraph.lbffRgbIrIrNoGmvWithTnrNoSapOuterNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + + // choose the selected sub graph + if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.video != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.stills != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.thumbnail != static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.previewIr == static_cast(HwSink::Disconnected))) + { + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffRgbIrNoGmvWithTnrNoSapOuterNode->contextId = 1; + } + else if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.video == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.stills == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.thumbnail == static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.previewIr != static_cast(HwSink::Disconnected))) + { + _selectedGraphTopology = &_irSubGraph; + + // logical node IDs + _irSubGraph.isysOuterNode->contextId = 0; + _irSubGraph.lbffRgbIrNoGmvWithTnrNoSapOuterNode->contextId = 1; + _irSubGraph.lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->contextId = 2; + } + else if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.video != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.stills != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.thumbnail != static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.previewIr != static_cast(HwSink::Disconnected))) + { + _selectedGraphTopology = &_image_irSubGraph; + + // logical node IDs + _image_irSubGraph.isysOuterNode->contextId = 0; + _image_irSubGraph.lbffRgbIrNoGmvWithTnrNoSapOuterNode->contextId = 1; + _image_irSubGraph.lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->contextId = 2; + } + else + { + STATIC_GRAPH_LOG("Didn't found a matching sub graph for the selected virtual sinks."); + } + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100022::~StaticGraph100022() +{ +} + +StaticGraphStatus imageSubGraphTopology100022::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffRgbIrNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrNoGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[11]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrNoGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrNoGmvWithTnrNoSapInnerOptions |= noDp; + } + // always active private inner options + lbffRgbIrNoGmvWithTnrNoSapInnerOptions |= (noIr); + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffRgbIrNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[4]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[5]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[6]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[7]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[11]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[12]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & noDp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 13; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[8]->isActive = (lbffRgbIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[9]->isActive = (lbffRgbIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[10]->isActive = (lbffRgbIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffRgbIrNoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrNoGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus irSubGraphTopology100022::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags irPublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.irInnerOptions); + + /* + * Setting Node lbffRgbIrNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrNoGmvWithTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrNoGmvWithTnrNoSapInnerOptions |= (noPdaf); + // active public options according to sink mapping + if ( + subGraphLinks[11]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrNoGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrNoGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Setting Node lbffRgbIrIrNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noDp | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[22]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions |= noMp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffRgbIrNoGmvWithTnrNoSapInnerOptions); + lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[4]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[5]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[6]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[7]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[11]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[12]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & noDp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[15]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ir_ae_out + subGraphLinks[16]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> ir_af_std_out + subGraphLinks[17]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> ir_awb_std_out + subGraphLinks[18]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> ir_awb_sat_out + subGraphLinks[22]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> ir_mp + + /* + * Link enablement by private inner options + */ + subGraphLinks[14]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & noIr); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_ir_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_main_data_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 23; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[8]->isActive = (lbffRgbIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[9]->isActive = (lbffRgbIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[10]->isActive = (lbffRgbIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + subGraphLinks[19]->isActive = (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[20]->isActive = (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[21]->isActive = (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffRgbIrNoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrNoGmvWithTnrNoSapOuterNode->bitmaps; + lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus image_irSubGraphTopology100022::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + InnerNodeOptionsFlags irPublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.irInnerOptions); + + /* + * Setting Node lbffRgbIrNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrNoGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // active public inner options according to sink mapping + if ( + subGraphLinks[11]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrNoGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrNoGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Setting Node lbffRgbIrIrNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noDp | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[22]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions |= noMp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffRgbIrNoGmvWithTnrNoSapInnerOptions); + lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[4]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[5]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[6]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[7]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[11]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[12]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & noDp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[15]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ir_ae_out + subGraphLinks[16]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> ir_af_std_out + subGraphLinks[17]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> ir_awb_std_out + subGraphLinks[18]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> ir_awb_sat_out + subGraphLinks[22]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> ir_mp + + /* + * Link enablement by private inner options + */ + subGraphLinks[14]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & noIr); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_ir_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_main_data_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 23; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[8]->isActive = (lbffRgbIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[9]->isActive = (lbffRgbIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[10]->isActive = (lbffRgbIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + subGraphLinks[19]->isActive = (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[20]->isActive = (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[21]->isActive = (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffRgbIrNoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrNoGmvWithTnrNoSapOuterNode->bitmaps; + lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100023 + */ +StaticGraph100023::StaticGraph100023(GraphConfiguration100023* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100023, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) + ,_irSubGraph(_sinkMappingConfiguration) + ,_image_irSubGraph(_sinkMappingConfiguration) +{ + + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffRgbIrWithGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffRgbIrWithGmvWithTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + _lbffRgbIrIrNoGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffRgbIrIrNoGmvWithTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + _imageSubGraph.links[0] = link; + _irSubGraph.links[0] = link; + _image_irSubGraph.links[0] = link; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + _imageSubGraph.links[1] = link; + _irSubGraph.links[1] = link; + _image_irSubGraph.links[1] = link; + + link = &_graphLinks[2]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + _imageSubGraph.links[2] = link; + _irSubGraph.links[2] = link; + _image_irSubGraph.links[2] = link; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[3] = link; + _irSubGraph.links[3] = link; + _image_irSubGraph.links[3] = link; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[4] = link; + _irSubGraph.links[4] = link; + _image_irSubGraph.links[4] = link; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[5] = link; + _irSubGraph.links[5] = link; + _image_irSubGraph.links[5] = link; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[6] = link; + _irSubGraph.links[6] = link; + _image_irSubGraph.links[6] = link; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[7] = link; + _irSubGraph.links[7] = link; + _image_irSubGraph.links[7] = link; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _imageSubGraph.links[8] = link; + _irSubGraph.links[8] = link; + _image_irSubGraph.links[8] = link; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[9] = link; + _irSubGraph.links[9] = link; + _image_irSubGraph.links[9] = link; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _imageSubGraph.links[10] = link; + _irSubGraph.links[10] = link; + _image_irSubGraph.links[10] = link; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _imageSubGraph.links[11] = link; + _irSubGraph.links[11] = link; + _image_irSubGraph.links[11] = link; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _imageSubGraph.links[12] = link; + _irSubGraph.links[12] = link; + _image_irSubGraph.links[12] = link; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[13] = link; + _irSubGraph.links[13] = link; + _image_irSubGraph.links[13] = link; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[14] = link; + _irSubGraph.links[14] = link; + _image_irSubGraph.links[14] = link; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + _imageSubGraph.links[15] = link; + _image_irSubGraph.links[15] = link; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + _imageSubGraph.links[16] = link; + _image_irSubGraph.links[16] = link; + + link = &_graphLinks[17]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[17] = link; + _image_irSubGraph.links[17] = link; + + link = &_graphLinks[18]; + link->src = GraphElementType::LscBufferIr; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + _irSubGraph.links[15] = link; + _image_irSubGraph.links[18] = link; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 14; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + _irSubGraph.links[16] = link; + _image_irSubGraph.links[19] = link; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::IrAeOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[17] = link; + _image_irSubGraph.links[20] = link; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::IrAfStdOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[18] = link; + _image_irSubGraph.links[21] = link; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::IrAwbStdOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[19] = link; + _image_irSubGraph.links[22] = link; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::IrAwbSatOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[20] = link; + _image_irSubGraph.links[23] = link; + + link = &_graphLinks[24]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _irSubGraph.links[21] = link; + _image_irSubGraph.links[24] = link; + + link = &_graphLinks[25]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _irSubGraph.links[22] = link; + _image_irSubGraph.links[25] = link; + + link = &_graphLinks[26]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _irSubGraph.links[23] = link; + _image_irSubGraph.links[26] = link; + + link = &_graphLinks[27]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::IrMp; + link->type = LinkType::Node2Sink; + _irSubGraph.links[24] = link; + _image_irSubGraph.links[27] = link; + + for (uint8_t i = 0; i < 28; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffRgbIrWithGmvWithTnrNoSapOuterNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + _irSubGraph.isysOuterNode = &_isysOuterNode; + _irSubGraph.lbffRgbIrWithGmvWithTnrNoSapOuterNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + _irSubGraph.lbffRgbIrIrNoGmvWithTnrNoSapOuterNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + _image_irSubGraph.isysOuterNode = &_isysOuterNode; + _image_irSubGraph.lbffRgbIrWithGmvWithTnrNoSapOuterNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + _image_irSubGraph.swGdcOuterNode = &_swGdcOuterNode; + _image_irSubGraph.lbffRgbIrIrNoGmvWithTnrNoSapOuterNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + + // choose the selected sub graph + if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.video != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.stills != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.thumbnail != static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.previewIr == static_cast(HwSink::Disconnected))) + { + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffRgbIrWithGmvWithTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + } + else if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.video == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.stills == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.thumbnail == static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.previewIr != static_cast(HwSink::Disconnected))) + { + _selectedGraphTopology = &_irSubGraph; + + // logical node IDs + _irSubGraph.isysOuterNode->contextId = 0; + _irSubGraph.lbffRgbIrWithGmvWithTnrNoSapOuterNode->contextId = 1; + _irSubGraph.lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->contextId = 2; + } + else if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.video != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.stills != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.thumbnail != static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.previewIr != static_cast(HwSink::Disconnected))) + { + _selectedGraphTopology = &_image_irSubGraph; + + // logical node IDs + _image_irSubGraph.isysOuterNode->contextId = 0; + _image_irSubGraph.lbffRgbIrWithGmvWithTnrNoSapOuterNode->contextId = 1; + _image_irSubGraph.swGdcOuterNode->contextId = 2; + _image_irSubGraph.lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->contextId = 3; + } + else + { + STATIC_GRAPH_LOG("Didn't found a matching sub graph for the selected virtual sinks."); + } + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100023::~StaticGraph100023() +{ +} + +StaticGraphStatus imageSubGraphTopology100023::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffRgbIrWithGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrWithGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrWithGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrWithGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrWithGmvWithTnrNoSapInnerOptions |= noDp; + } + // always active private inner options + lbffRgbIrWithGmvWithTnrNoSapInnerOptions |= (noIr); + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrWithGmvWithTnrNoSapOuterNode->setInnerNode(lbffRgbIrWithGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[4]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[5]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[6]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[7]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[13]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & noMp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[15]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & noMp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[14]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[16]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 18; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[8]->isActive = (lbffRgbIrWithGmvWithTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_gmv_input + subGraphLinks[10]->isActive = (lbffRgbIrWithGmvWithTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[11]->isActive = (lbffRgbIrWithGmvWithTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[12]->isActive = (lbffRgbIrWithGmvWithTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffRgbIrWithGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrWithGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus irSubGraphTopology100023::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags irPublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.irInnerOptions); + + /* + * Setting Node lbffRgbIrWithGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrWithGmvWithTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrWithGmvWithTnrNoSapInnerOptions |= (noPdaf); + // active public options according to sink mapping + if ( + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrWithGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrWithGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Setting Node lbffRgbIrIrNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noDp | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[24]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions |= noMp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrWithGmvWithTnrNoSapOuterNode->setInnerNode(lbffRgbIrWithGmvWithTnrNoSapInnerOptions); + lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[4]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[5]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[6]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[7]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[13]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & noMp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[14]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[17]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ir_ae_out + subGraphLinks[18]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> ir_af_std_out + subGraphLinks[19]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> ir_awb_std_out + subGraphLinks[20]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> ir_awb_sat_out + subGraphLinks[24]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> ir_mp + + /* + * Link enablement by private inner options + */ + subGraphLinks[16]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & noIr); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ir_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_main_data_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 25; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[8]->isActive = (lbffRgbIrWithGmvWithTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_gmv_input + subGraphLinks[10]->isActive = (lbffRgbIrWithGmvWithTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[11]->isActive = (lbffRgbIrWithGmvWithTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[12]->isActive = (lbffRgbIrWithGmvWithTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + subGraphLinks[21]->isActive = (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[22]->isActive = (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[23]->isActive = (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffRgbIrWithGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrWithGmvWithTnrNoSapOuterNode->bitmaps; + lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus image_irSubGraphTopology100023::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + InnerNodeOptionsFlags irPublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.irInnerOptions); + + /* + * Setting Node lbffRgbIrWithGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrWithGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // active public inner options according to sink mapping + if ( + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrWithGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrWithGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Setting Node lbffRgbIrIrNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noDp | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[27]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions |= noMp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrWithGmvWithTnrNoSapOuterNode->setInnerNode(lbffRgbIrWithGmvWithTnrNoSapInnerOptions); + lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[4]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[5]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[6]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[7]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[13]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & noMp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[15]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & noMp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[14]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[16]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + subGraphLinks[20]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ir_ae_out + subGraphLinks[21]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> ir_af_std_out + subGraphLinks[22]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> ir_awb_std_out + subGraphLinks[23]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> ir_awb_sat_out + subGraphLinks[27]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> ir_mp + + /* + * Link enablement by private inner options + */ + subGraphLinks[19]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & noIr); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ir_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_main_data_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 28; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[8]->isActive = (lbffRgbIrWithGmvWithTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_gmv_input + subGraphLinks[10]->isActive = (lbffRgbIrWithGmvWithTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[11]->isActive = (lbffRgbIrWithGmvWithTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[12]->isActive = (lbffRgbIrWithGmvWithTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + subGraphLinks[24]->isActive = (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[25]->isActive = (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[26]->isActive = (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffRgbIrWithGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrWithGmvWithTnrNoSapOuterNode->bitmaps; + lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100024 + */ +StaticGraph100024::StaticGraph100024(GraphConfiguration100024* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100024, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _lbffBayerNoGmvNoTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerNoGmvNoTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->destNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->destNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 8; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.lbffBayerNoGmvNoTnrNoSapOuterNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.lbffBayerNoGmvNoTnrNoSapOuterNode->contextId = 0; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100024::~StaticGraph100024() +{ +} + +StaticGraphStatus imageSubGraphTopology100024::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerNoGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerNoGmvNoTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[6]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerNoGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[7]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerNoGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffBayerNoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[2]->isActive = !(lbffBayerNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[3]->isActive = !(lbffBayerNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[4]->isActive = !(lbffBayerNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[5]->isActive = !(lbffBayerNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[6]->isActive = !(lbffBayerNoGmvNoTnrNoSapInnerOptions & noMp); // lbff_Bayer_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[7]->isActive = !(lbffBayerNoGmvNoTnrNoSapInnerOptions & noDp); // lbff_Bayer_NoGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 8; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerNoGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerNoGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100040 + */ +StaticGraph100040::StaticGraph100040(GraphConfiguration100040* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100040, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _lbffBayerWithGmvNoTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerWithGmvNoTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->destNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->destNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->destNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 13; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.lbffBayerWithGmvNoTnrNoSapOuterNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.lbffBayerWithGmvNoTnrNoSapOuterNode->contextId = 0; + _imageSubGraph.swGdcOuterNode->contextId = 1; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100040::~StaticGraph100040() +{ +} + +StaticGraphStatus imageSubGraphTopology100040::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerWithGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerWithGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerWithGmvNoTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[8]->linkConfiguration->bufferSize == 0 && + subGraphLinks[10]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerWithGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[9]->linkConfiguration->bufferSize == 0 && + subGraphLinks[11]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerWithGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerWithGmvNoTnrNoSapOuterNode->setInnerNode(lbffBayerWithGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[2]->isActive = !(lbffBayerWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[3]->isActive = !(lbffBayerWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[4]->isActive = !(lbffBayerWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[5]->isActive = !(lbffBayerWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[8]->isActive = !(lbffBayerWithGmvNoTnrNoSapInnerOptions & noMp); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[10]->isActive = !(lbffBayerWithGmvNoTnrNoSapInnerOptions & noMp); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[9]->isActive = !(lbffBayerWithGmvNoTnrNoSapInnerOptions & noDp); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[11]->isActive = !(lbffBayerWithGmvNoTnrNoSapInnerOptions & noDp); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 13; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[6]->isActive = (lbffBayerWithGmvNoTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_gmv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerWithGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerWithGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100041 + */ +StaticGraph100041::StaticGraph100041(GraphConfiguration100041* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100041, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _lbffBayerWithGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerWithGmvWithTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[15]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 16; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.lbffBayerWithGmvWithTnrNoSapOuterNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.lbffBayerWithGmvWithTnrNoSapOuterNode->contextId = 0; + _imageSubGraph.swGdcOuterNode->contextId = 1; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100041::~StaticGraph100041() +{ +} + +StaticGraphStatus imageSubGraphTopology100041::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerWithGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerWithGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerWithGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[11]->linkConfiguration->bufferSize == 0 && + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerWithGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerWithGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerWithGmvWithTnrNoSapOuterNode->setInnerNode(lbffBayerWithGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[2]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[3]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[4]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[5]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[11]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[13]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[12]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[14]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 16; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[6]->isActive = (lbffBayerWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_gmv_input + subGraphLinks[8]->isActive = (lbffBayerWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[9]->isActive = (lbffBayerWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[10]->isActive = (lbffBayerWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerWithGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerWithGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100042 + */ +StaticGraph100042::StaticGraph100042(GraphConfiguration100042* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100042, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _lbffBayerNoGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerNoGmvWithTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 11; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.lbffBayerNoGmvWithTnrNoSapOuterNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.lbffBayerNoGmvWithTnrNoSapOuterNode->contextId = 0; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100042::~StaticGraph100042() +{ +} + +StaticGraphStatus imageSubGraphTopology100042::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerNoGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[9]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerNoGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[10]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerNoGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffBayerNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[2]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[3]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[4]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[5]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[9]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[10]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 11; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[6]->isActive = (lbffBayerNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[7]->isActive = (lbffBayerNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[8]->isActive = (lbffBayerNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerNoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerNoGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100027 + */ +StaticGraph100027::StaticGraph100027(GraphConfiguration100027* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100027, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffIrNoGmvNoTnrNoSapOuterNode.Init(&_graphConfiguration.lbffIrNoGmvNoTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffIrNoGmvNoTnrNoSap; + link->destNode = &_lbffIrNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffIrNoGmvNoTnrNoSap; + link->destNode = &_lbffIrNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 9; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffIrNoGmvNoTnrNoSapOuterNode = &_lbffIrNoGmvNoTnrNoSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffIrNoGmvNoTnrNoSapOuterNode->contextId = 1; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100027::~StaticGraph100027() +{ +} + +StaticGraphStatus imageSubGraphTopology100027::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffIrNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffIrNoGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffIrNoGmvNoTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[7]->linkConfiguration->bufferSize == 0 && + true) + { + lbffIrNoGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[8]->linkConfiguration->bufferSize == 0 && + true) + { + lbffIrNoGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffIrNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffIrNoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = !(lbffIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[4]->isActive = !(lbffIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Ir_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[5]->isActive = !(lbffIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[6]->isActive = !(lbffIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[7]->isActive = !(lbffIrNoGmvNoTnrNoSapInnerOptions & noMp); // lbff_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[8]->isActive = !(lbffIrNoGmvNoTnrNoSapInnerOptions & noDp); // lbff_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 9; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Save the not-vanished HW bitmaps + */ + lbffIrNoGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffIrNoGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100028 + */ +StaticGraph100028::StaticGraph100028(GraphConfiguration100028* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100028, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffIrWithGmvNoTnrNoSapOuterNode.Init(&_graphConfiguration.lbffIrWithGmvNoTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffIrWithGmvNoTnrNoSap; + link->destNode = &_lbffIrWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffIrWithGmvNoTnrNoSap; + link->destNode = &_lbffIrWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffIrWithGmvNoTnrNoSap; + link->destNode = &_lbffIrWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 14; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffIrWithGmvNoTnrNoSapOuterNode = &_lbffIrWithGmvNoTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffIrWithGmvNoTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100028::~StaticGraph100028() +{ +} + +StaticGraphStatus imageSubGraphTopology100028::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffIrWithGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffIrWithGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffIrWithGmvNoTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[9]->linkConfiguration->bufferSize == 0 && + subGraphLinks[11]->linkConfiguration->bufferSize == 0 && + true) + { + lbffIrWithGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[10]->linkConfiguration->bufferSize == 0 && + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + true) + { + lbffIrWithGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffIrWithGmvNoTnrNoSapOuterNode->setInnerNode(lbffIrWithGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = !(lbffIrWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Ir_WithGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[4]->isActive = !(lbffIrWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Ir_WithGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[5]->isActive = !(lbffIrWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Ir_WithGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[6]->isActive = !(lbffIrWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Ir_WithGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[9]->isActive = !(lbffIrWithGmvNoTnrNoSapInnerOptions & noMp); // lbff_Ir_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[11]->isActive = !(lbffIrWithGmvNoTnrNoSapInnerOptions & noMp); // lbff_Ir_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[10]->isActive = !(lbffIrWithGmvNoTnrNoSapInnerOptions & noDp); // lbff_Ir_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[12]->isActive = !(lbffIrWithGmvNoTnrNoSapInnerOptions & noDp); // lbff_Ir_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 14; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[7]->isActive = (lbffIrWithGmvNoTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Ir_WithGmv_NoTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_Ir_WithGmv_NoTnr_NoSap:terminal_connect_gmv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffIrWithGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffIrWithGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100029 + */ +StaticGraph100029::StaticGraph100029(GraphConfiguration100029* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100029, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffIrNoGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffIrNoGmvWithTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffIrNoGmvWithTnrNoSap; + link->destNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffIrNoGmvWithTnrNoSap; + link->destNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffIrNoGmvWithTnrNoSap; + link->destNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffIrNoGmvWithTnrNoSap; + link->destNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffIrNoGmvWithTnrNoSap; + link->destNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 12; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffIrNoGmvWithTnrNoSapOuterNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffIrNoGmvWithTnrNoSapOuterNode->contextId = 1; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100029::~StaticGraph100029() +{ +} + +StaticGraphStatus imageSubGraphTopology100029::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffIrNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffIrNoGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffIrNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[10]->linkConfiguration->bufferSize == 0 && + true) + { + lbffIrNoGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[11]->linkConfiguration->bufferSize == 0 && + true) + { + lbffIrNoGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffIrNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffIrNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = !(lbffIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[4]->isActive = !(lbffIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Ir_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[5]->isActive = !(lbffIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[6]->isActive = !(lbffIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[10]->isActive = !(lbffIrNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[11]->isActive = !(lbffIrNoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 12; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[7]->isActive = (lbffIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[8]->isActive = (lbffIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[9]->isActive = (lbffIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Ir_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffIrNoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffIrNoGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100030 + */ +StaticGraph100030::StaticGraph100030(GraphConfiguration100030* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100030, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffIrWithGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffIrWithGmvWithTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->destNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->destNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->destNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->destNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->destNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->destNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[16]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 17; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffIrWithGmvWithTnrNoSapOuterNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffIrWithGmvWithTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100030::~StaticGraph100030() +{ +} + +StaticGraphStatus imageSubGraphTopology100030::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffIrWithGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffIrWithGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffIrWithGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + true) + { + lbffIrWithGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + true) + { + lbffIrWithGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffIrWithGmvWithTnrNoSapOuterNode->setInnerNode(lbffIrWithGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = !(lbffIrWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[4]->isActive = !(lbffIrWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[5]->isActive = !(lbffIrWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[6]->isActive = !(lbffIrWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[12]->isActive = !(lbffIrWithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[14]->isActive = !(lbffIrWithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[13]->isActive = !(lbffIrWithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[15]->isActive = !(lbffIrWithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 17; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[7]->isActive = (lbffIrWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_gmv_input + subGraphLinks[9]->isActive = (lbffIrWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[10]->isActive = (lbffIrWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[11]->isActive = (lbffIrWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffIrWithGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffIrWithGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100031 + */ +StaticGraph100031::StaticGraph100031(GraphConfiguration100031* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100031, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 19; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 11; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode->contextId = 1; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100031::~StaticGraph100031() +{ +} + +StaticGraphStatus imageSubGraphTopology100031::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[9]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[10]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode->setInnerNode(lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[5]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[6]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[7]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[8]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[3]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapInnerOptions & noPdaf); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_NoSap:terminal_connect_pdaf_output -> pdaf_out + subGraphLinks[9]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[10]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 11; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[2]->isActive = (lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapInnerOptions & (no3A|noMp|noDp|noIr)) != (no3A|noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_NoSap:terminal_connect_dpc_pdaf_output -> lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_NoSap:terminal_connect_pdaf_data_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100032 + */ +StaticGraph100032::StaticGraph100032(GraphConfiguration100032* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100032, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 19; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[15]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 16; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100032::~StaticGraph100032() +{ +} + +StaticGraphStatus imageSubGraphTopology100032::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[11]->linkConfiguration->bufferSize == 0 && + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode->setInnerNode(lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[5]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[6]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[7]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[8]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[3]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions & noPdaf); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_NoSap:terminal_connect_pdaf_output -> pdaf_out + subGraphLinks[11]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[13]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[12]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[14]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 16; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[2]->isActive = (lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions & (no3A|noMp|noDp|noIr)) != (no3A|noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_NoSap:terminal_connect_dpc_pdaf_output -> lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_NoSap:terminal_connect_pdaf_data_input + subGraphLinks[9]->isActive = (lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_NoSap:terminal_connect_gmv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100033 + */ +StaticGraph100033::StaticGraph100033(GraphConfiguration100033* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100033, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 19; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 14; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode->contextId = 1; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100033::~StaticGraph100033() +{ +} + +StaticGraphStatus imageSubGraphTopology100033::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode->setInnerNode(lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[5]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[6]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[7]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[8]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[3]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & noPdaf); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_pdaf_output -> pdaf_out + subGraphLinks[12]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[13]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 14; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[2]->isActive = (lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & (no3A|noMp|noDp|noIr)) != (no3A|noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_dpc_pdaf_output -> lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_pdaf_data_input + subGraphLinks[9]->isActive = (lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[10]->isActive = (lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[11]->isActive = (lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100034 + */ +StaticGraph100034::StaticGraph100034(GraphConfiguration100034* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100034, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 19; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[18]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 19; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100034::~StaticGraph100034() +{ +} + +StaticGraphStatus imageSubGraphTopology100034::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode->setInnerNode(lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[5]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[6]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[7]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[8]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[3]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions & noPdaf); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_pdaf_output -> pdaf_out + subGraphLinks[14]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[16]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[15]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[17]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 19; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[2]->isActive = (lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions & (no3A|noMp|noDp|noIr)) != (no3A|noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_dpc_pdaf_output -> lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_pdaf_data_input + subGraphLinks[9]->isActive = (lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_gmv_input + subGraphLinks[11]->isActive = (lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[12]->isActive = (lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[13]->isActive = (lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100141 + */ +StaticGraph100141::StaticGraph100141(GraphConfiguration100141* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100141, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 19; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[24]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[25]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[26]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[27]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[28]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[29]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 30; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + _imageSubGraph.swScalerOuterNode->contextId = 4; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100141::~StaticGraph100141() +{ +} + +StaticGraphStatus imageSubGraphTopology100141::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[23]->linkConfiguration->bufferSize == 0 && + subGraphLinks[25]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[24]->linkConfiguration->bufferSize == 0 && + subGraphLinks[26]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->setInnerNode(lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[14]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[15]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[16]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[17]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[12]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions & noPdaf); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_pdaf_output -> pdaf_out + subGraphLinks[23]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[25]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[24]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[26]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 30; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[11]->isActive = (lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions & (no3A|noMp|noDp|noIr)) != (no3A|noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_dpc_pdaf_output -> lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_pdaf_data_input + subGraphLinks[18]->isActive = (lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_gmv_feature_output -> lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_gmv_input + subGraphLinks[20]->isActive = (lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_blend_output -> lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[21]->isActive = (lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_bc_output -> lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[22]->isActive = (lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmapsNotVanished = lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100141::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[5]->isActive == false) + { + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0xC000000; // Run kernel ids 26 (ifd_segmap_bnlm_1_4) and 27 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[6]->isActive == false) + { + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0x300000000; // Run kernel ids 32 (ifd_segmap_xnr_1_4) and 33 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0x6000000000; // Run kernel ids 37 (ifd_segmap_acm_1_4) and 38 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x6000000000000000; // Run kernel ids 61 (ifd_segmap_cas_1_4) and 62 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[9]->isActive == false) + { + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= 0xC000000000000; // Run kernel ids 50 (ifd_segmap_tnr_bc_1_4) and 51 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[10]->isActive == false) + { + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= 0xC0000000000000; // Run kernel ids 54 (ifd_segmap_tnr_blend_1_4) and 55 (smurf_tnr_blend_1_0) + } + + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100100 + */ +StaticGraph100100::StaticGraph100100(GraphConfiguration100100* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100100, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffBayerNoGmvNoTnrWithSapOuterNode.Init(&_graphConfiguration.lbffBayerNoGmvNoTnrWithSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerNoGmvNoTnrWithSap; + link->destNode = &_lbffBayerNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerNoGmvNoTnrWithSap; + link->destNode = &_lbffBayerNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerNoGmvNoTnrWithSap; + link->destNode = &_lbffBayerNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerNoGmvNoTnrWithSap; + link->destNode = &_lbffBayerNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerNoGmvNoTnrWithSap; + link->destNode = &_lbffBayerNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerNoGmvNoTnrWithSap; + link->destNode = &_lbffBayerNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 16; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerNoGmvNoTnrWithSapOuterNode = &_lbffBayerNoGmvNoTnrWithSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerNoGmvNoTnrWithSapOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100100::~StaticGraph100100() +{ +} + +StaticGraphStatus imageSubGraphTopology100100::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerNoGmvNoTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerNoGmvNoTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerNoGmvNoTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerNoGmvNoTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerNoGmvNoTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerNoGmvNoTnrWithSapOuterNode->setInnerNode(lbffBayerNoGmvNoTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[10]->isActive = !(lbffBayerNoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_NoGmv_NoTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[11]->isActive = !(lbffBayerNoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_NoGmv_NoTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[12]->isActive = !(lbffBayerNoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_NoGmv_NoTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[13]->isActive = !(lbffBayerNoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_NoGmv_NoTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[14]->isActive = !(lbffBayerNoGmvNoTnrWithSapInnerOptions & noMp); // lbff_Bayer_NoGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[15]->isActive = !(lbffBayerNoGmvNoTnrWithSapInnerOptions & noDp); // lbff_Bayer_NoGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 16; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerNoGmvNoTnrWithSapOuterNode->bitmapsNotVanished = lbffBayerNoGmvNoTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100100::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[5]->isActive == false) + { + lbffBayerNoGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerNoGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerNoGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x60000; // Run kernel ids 17 (ifd_segmap_bnlm_1_4) and 18 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[6]->isActive == false) + { + lbffBayerNoGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0x1800000; // Run kernel ids 23 (ifd_segmap_xnr_1_4) and 24 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffBayerNoGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0x30000000; // Run kernel ids 28 (ifd_segmap_acm_1_4) and 29 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffBayerNoGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerNoGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerNoGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x3000000000; // Run kernel ids 36 (ifd_segmap_cas_1_4) and 37 (smurf_cas_1_0) + } + + lbffBayerNoGmvNoTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100101 + */ +StaticGraph100101::StaticGraph100101(GraphConfiguration100101* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100101, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffBayerWithGmvNoTnrWithSapOuterNode.Init(&_graphConfiguration.lbffBayerWithGmvNoTnrWithSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerWithGmvNoTnrWithSap; + link->destNode = &_lbffBayerWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerWithGmvNoTnrWithSap; + link->destNode = &_lbffBayerWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerWithGmvNoTnrWithSap; + link->destNode = &_lbffBayerWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerWithGmvNoTnrWithSap; + link->destNode = &_lbffBayerWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerWithGmvNoTnrWithSap; + link->destNode = &_lbffBayerWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerWithGmvNoTnrWithSap; + link->destNode = &_lbffBayerWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerWithGmvNoTnrWithSap; + link->destNode = &_lbffBayerWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[20]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 21; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerWithGmvNoTnrWithSapOuterNode = &_lbffBayerWithGmvNoTnrWithSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerWithGmvNoTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100101::~StaticGraph100101() +{ +} + +StaticGraphStatus imageSubGraphTopology100101::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerWithGmvNoTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerWithGmvNoTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerWithGmvNoTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + subGraphLinks[18]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerWithGmvNoTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && + subGraphLinks[19]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerWithGmvNoTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerWithGmvNoTnrWithSapOuterNode->setInnerNode(lbffBayerWithGmvNoTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[10]->isActive = !(lbffBayerWithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_WithGmv_NoTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[11]->isActive = !(lbffBayerWithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_WithGmv_NoTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[12]->isActive = !(lbffBayerWithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_WithGmv_NoTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[13]->isActive = !(lbffBayerWithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_WithGmv_NoTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[16]->isActive = !(lbffBayerWithGmvNoTnrWithSapInnerOptions & noMp); // lbff_Bayer_WithGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[18]->isActive = !(lbffBayerWithGmvNoTnrWithSapInnerOptions & noMp); // lbff_Bayer_WithGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[17]->isActive = !(lbffBayerWithGmvNoTnrWithSapInnerOptions & noDp); // lbff_Bayer_WithGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[19]->isActive = !(lbffBayerWithGmvNoTnrWithSapInnerOptions & noDp); // lbff_Bayer_WithGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 21; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[14]->isActive = (lbffBayerWithGmvNoTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_WithGmv_NoTnr_WithSap:terminal_connect_gmv_feature_output -> lbff_Bayer_WithGmv_NoTnr_WithSap:terminal_connect_gmv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerWithGmvNoTnrWithSapOuterNode->bitmapsNotVanished = lbffBayerWithGmvNoTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100101::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[5]->isActive == false) + { + lbffBayerWithGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerWithGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerWithGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0xC0000; // Run kernel ids 18 (ifd_segmap_bnlm_1_4) and 19 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[6]->isActive == false) + { + lbffBayerWithGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0x3000000; // Run kernel ids 24 (ifd_segmap_xnr_1_4) and 25 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffBayerWithGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0x60000000; // Run kernel ids 29 (ifd_segmap_acm_1_4) and 30 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffBayerWithGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerWithGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerWithGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x30000000000; // Run kernel ids 40 (ifd_segmap_cas_1_4) and 41 (smurf_cas_1_0) + } + + lbffBayerWithGmvNoTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100102 + */ +StaticGraph100102::StaticGraph100102(GraphConfiguration100102* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100102, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffBayerNoGmvWithTnrWithSapOuterNode.Init(&_graphConfiguration.lbffBayerNoGmvWithTnrWithSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 21; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerNoGmvWithTnrWithSapOuterNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerNoGmvWithTnrWithSapOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100102::~StaticGraph100102() +{ +} + +StaticGraphStatus imageSubGraphTopology100102::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerNoGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerNoGmvWithTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerNoGmvWithTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[19]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerNoGmvWithTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[20]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerNoGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerNoGmvWithTnrWithSapOuterNode->setInnerNode(lbffBayerNoGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[12]->isActive = !(lbffBayerNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[13]->isActive = !(lbffBayerNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[14]->isActive = !(lbffBayerNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[15]->isActive = !(lbffBayerNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[19]->isActive = !(lbffBayerNoGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[20]->isActive = !(lbffBayerNoGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 21; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[16]->isActive = (lbffBayerNoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_blend_output -> lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[17]->isActive = (lbffBayerNoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_bc_output -> lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[18]->isActive = (lbffBayerNoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmapsNotVanished = lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100102::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[5]->isActive == false) + { + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x300000; // Run kernel ids 20 (ifd_segmap_bnlm_1_4) and 21 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[6]->isActive == false) + { + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0xC000000; // Run kernel ids 26 (ifd_segmap_xnr_1_4) and 27 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0x180000000; // Run kernel ids 31 (ifd_segmap_acm_1_4) and 32 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x30000000000000; // Run kernel ids 52 (ifd_segmap_cas_1_4) and 53 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[9]->isActive == false) + { + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= 0x60000000000; // Run kernel ids 41 (ifd_segmap_tnr_bc_1_4) and 42 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[10]->isActive == false) + { + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= 0x600000000000; // Run kernel ids 45 (ifd_segmap_tnr_blend_1_4) and 46 (smurf_tnr_blend_1_0) + } + + lbffBayerNoGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100157 + */ +StaticGraph100157::StaticGraph100157(GraphConfiguration100157* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100157, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffBayerNoGmvWithTnrWithOpacityOuterNode.Init(&_graphConfiguration.lbffBayerNoGmvWithTnrWithOpacityOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithOpacity; + link->destNode = &_lbffBayerNoGmvWithTnrWithOpacityOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithOpacity; + link->destNode = &_lbffBayerNoGmvWithTnrWithOpacityOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithOpacity; + link->destNode = &_lbffBayerNoGmvWithTnrWithOpacityOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithOpacity; + link->destNode = &_lbffBayerNoGmvWithTnrWithOpacityOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithOpacity; + link->srcNode = &_lbffBayerNoGmvWithTnrWithOpacityOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithOpacity; + link->srcNode = &_lbffBayerNoGmvWithTnrWithOpacityOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithOpacity; + link->srcNode = &_lbffBayerNoGmvWithTnrWithOpacityOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithOpacity; + link->srcNode = &_lbffBayerNoGmvWithTnrWithOpacityOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithOpacity; + link->srcNode = &_lbffBayerNoGmvWithTnrWithOpacityOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithOpacity; + link->destNode = &_lbffBayerNoGmvWithTnrWithOpacityOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithOpacity; + link->srcNode = &_lbffBayerNoGmvWithTnrWithOpacityOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithOpacity; + link->destNode = &_lbffBayerNoGmvWithTnrWithOpacityOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithOpacity; + link->srcNode = &_lbffBayerNoGmvWithTnrWithOpacityOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithOpacity; + link->destNode = &_lbffBayerNoGmvWithTnrWithOpacityOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithOpacity; + link->srcNode = &_lbffBayerNoGmvWithTnrWithOpacityOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithOpacity; + link->srcNode = &_lbffBayerNoGmvWithTnrWithOpacityOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 17; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerNoGmvWithTnrWithOpacityOuterNode = &_lbffBayerNoGmvWithTnrWithOpacityOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerNoGmvWithTnrWithOpacityOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100157::~StaticGraph100157() +{ +} + +StaticGraphStatus imageSubGraphTopology100157::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerNoGmvWithTnrWithOpacity initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerNoGmvWithTnrWithOpacityInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerNoGmvWithTnrWithOpacityInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerNoGmvWithTnrWithOpacityInnerOptions |= noMp; + } + if ( + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerNoGmvWithTnrWithOpacityInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerNoGmvWithTnrWithOpacityOuterNode->setInnerNode(lbffBayerNoGmvWithTnrWithOpacityInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[8]->isActive = !(lbffBayerNoGmvWithTnrWithOpacityInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_WithOpacity:terminal_connect_ae_output -> ae_out + subGraphLinks[9]->isActive = !(lbffBayerNoGmvWithTnrWithOpacityInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_WithOpacity:terminal_connect_af_std_output -> af_std_out + subGraphLinks[10]->isActive = !(lbffBayerNoGmvWithTnrWithOpacityInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_WithOpacity:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[11]->isActive = !(lbffBayerNoGmvWithTnrWithOpacityInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_WithOpacity:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[15]->isActive = !(lbffBayerNoGmvWithTnrWithOpacityInnerOptions & noMp); // lbff_Bayer_NoGmv_WithTnr_WithOpacity:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[16]->isActive = !(lbffBayerNoGmvWithTnrWithOpacityInnerOptions & noDp); // lbff_Bayer_NoGmv_WithTnr_WithOpacity:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 17; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[12]->isActive = (lbffBayerNoGmvWithTnrWithOpacityInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_NoGmv_WithTnr_WithOpacity:terminal_connect_blend_output -> lbff_Bayer_NoGmv_WithTnr_WithOpacity:terminal_connect_blend_yuv_input + subGraphLinks[13]->isActive = (lbffBayerNoGmvWithTnrWithOpacityInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_NoGmv_WithTnr_WithOpacity:terminal_connect_bc_output -> lbff_Bayer_NoGmv_WithTnr_WithOpacity:terminal_connect_bc_rs_input + subGraphLinks[14]->isActive = (lbffBayerNoGmvWithTnrWithOpacityInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_NoGmv_WithTnr_WithOpacity:terminal_connect_tnr_scaler_output -> lbff_Bayer_NoGmv_WithTnr_WithOpacity:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerNoGmvWithTnrWithOpacityOuterNode->bitmapsNotVanished = lbffBayerNoGmvWithTnrWithOpacityOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100157::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[5]->isActive == false) + { + lbffBayerNoGmvWithTnrWithOpacityOuterNode->bitmaps.teb[1] &= ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffBayerNoGmvWithTnrWithOpacityOuterNode->bitmaps.deb[1] &= ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffBayerNoGmvWithTnrWithOpacityOuterNode->bitmaps.deb[1] &= ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= 0x1800000000; // Run kernel ids 35 (ifd_segmap_tnr_bc_1_4) and 36 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[6]->isActive == false) + { + lbffBayerNoGmvWithTnrWithOpacityOuterNode->bitmaps.teb[1] &= ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffBayerNoGmvWithTnrWithOpacityOuterNode->bitmaps.deb[1] &= ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffBayerNoGmvWithTnrWithOpacityOuterNode->bitmaps.deb[2] &= ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= 0x18000000000; // Run kernel ids 39 (ifd_segmap_tnr_blend_1_4) and 40 (smurf_tnr_blend_1_0) + } + + lbffBayerNoGmvWithTnrWithOpacityOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100103 + */ +StaticGraph100103::StaticGraph100103(GraphConfiguration100103* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100103, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffBayerWithGmvWithTnrWithSapOuterNode.Init(&_graphConfiguration.lbffBayerWithGmvWithTnrWithSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->destNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->destNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->destNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->destNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->destNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->destNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->destNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->destNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->destNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->destNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->destNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->destNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[24]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[25]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 26; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerWithGmvWithTnrWithSapOuterNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerWithGmvWithTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100103::~StaticGraph100103() +{ +} + +StaticGraphStatus imageSubGraphTopology100103::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerWithGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerWithGmvWithTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerWithGmvWithTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[21]->linkConfiguration->bufferSize == 0 && + subGraphLinks[23]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerWithGmvWithTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[22]->linkConfiguration->bufferSize == 0 && + subGraphLinks[24]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerWithGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerWithGmvWithTnrWithSapOuterNode->setInnerNode(lbffBayerWithGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[12]->isActive = !(lbffBayerWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[13]->isActive = !(lbffBayerWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[14]->isActive = !(lbffBayerWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[15]->isActive = !(lbffBayerWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[21]->isActive = !(lbffBayerWithGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[23]->isActive = !(lbffBayerWithGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[22]->isActive = !(lbffBayerWithGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[24]->isActive = !(lbffBayerWithGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 26; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[16]->isActive = (lbffBayerWithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_gmv_feature_output -> lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_gmv_input + subGraphLinks[18]->isActive = (lbffBayerWithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_blend_output -> lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[19]->isActive = (lbffBayerWithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_bc_output -> lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[20]->isActive = (lbffBayerWithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmapsNotVanished = lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100103::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[5]->isActive == false) + { + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x600000; // Run kernel ids 21 (ifd_segmap_bnlm_1_4) and 22 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[6]->isActive == false) + { + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0x18000000; // Run kernel ids 27 (ifd_segmap_xnr_1_4) and 28 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0x300000000; // Run kernel ids 32 (ifd_segmap_acm_1_4) and 33 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x300000000000000; // Run kernel ids 56 (ifd_segmap_cas_1_4) and 57 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[9]->isActive == false) + { + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= 0x600000000000; // Run kernel ids 45 (ifd_segmap_tnr_bc_1_4) and 46 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[10]->isActive == false) + { + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= 0x6000000000000; // Run kernel ids 49 (ifd_segmap_tnr_blend_1_4) and 50 (smurf_tnr_blend_1_0) + } + + lbffBayerWithGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100135 + */ +StaticGraph100135::StaticGraph100135(GraphConfiguration100135* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100135, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffBayerNoGmvWithTnrWithSapOuterNode.Init(&_graphConfiguration.lbffBayerNoGmvWithTnrWithSapOuterNodeConfiguration); + _swNntmOuterNode.Init(&_graphConfiguration.swNntmOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[23]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[24]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[25]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 26; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerNoGmvWithTnrWithSapOuterNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + _imageSubGraph.swNntmOuterNode = &_swNntmOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerNoGmvWithTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swNntmOuterNode->contextId = 3; + _imageSubGraph.swScalerOuterNode->contextId = 4; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100135::~StaticGraph100135() +{ +} + +StaticGraphStatus imageSubGraphTopology100135::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerNoGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerNoGmvWithTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerNoGmvWithTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[19]->linkConfiguration->bufferSize == 0 && + subGraphLinks[21]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerNoGmvWithTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[20]->linkConfiguration->bufferSize == 0 && + subGraphLinks[22]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerNoGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerNoGmvWithTnrWithSapOuterNode->setInnerNode(lbffBayerNoGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[12]->isActive = !(lbffBayerNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[13]->isActive = !(lbffBayerNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[14]->isActive = !(lbffBayerNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[15]->isActive = !(lbffBayerNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[19]->isActive = !(lbffBayerNoGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[21]->isActive = !(lbffBayerNoGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> sw_nntm:terminal_connect_input + subGraphLinks[20]->isActive = !(lbffBayerNoGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[22]->isActive = !(lbffBayerNoGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> sw_nntm:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 26; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[16]->isActive = (lbffBayerNoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_blend_output -> lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[17]->isActive = (lbffBayerNoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_bc_output -> lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[18]->isActive = (lbffBayerNoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmapsNotVanished = lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100135::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[5]->isActive == false) + { + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x300000; // Run kernel ids 20 (ifd_segmap_bnlm_1_4) and 21 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[6]->isActive == false) + { + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0xC000000; // Run kernel ids 26 (ifd_segmap_xnr_1_4) and 27 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0x180000000; // Run kernel ids 31 (ifd_segmap_acm_1_4) and 32 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x30000000000000; // Run kernel ids 52 (ifd_segmap_cas_1_4) and 53 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[9]->isActive == false) + { + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= 0x60000000000; // Run kernel ids 41 (ifd_segmap_tnr_bc_1_4) and 42 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[10]->isActive == false) + { + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= 0x600000000000; // Run kernel ids 45 (ifd_segmap_tnr_blend_1_4) and 46 (smurf_tnr_blend_1_0) + } + + lbffBayerNoGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100104 + */ +StaticGraph100104::StaticGraph100104(GraphConfiguration100104* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100104, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysPdaf2WithCvOuterNode.Init(&_graphConfiguration.isysPdaf2WithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf2NoGmvNoTnrWithSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::PdafBuffer; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 7; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 19; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysPdaf2WithCvOuterNode = &_isysPdaf2WithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode = &_lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysPdaf2WithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100104::~StaticGraph100104() +{ +} + +StaticGraphStatus imageSubGraphTopology100104::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf2NoGmvNoTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf2NoGmvNoTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf2NoGmvNoTnrWithSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2NoGmvNoTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[18]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2NoGmvNoTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode->setInnerNode(lbffBayerPdaf2NoGmvNoTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[13]->isActive = !(lbffBayerPdaf2NoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_NoTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[14]->isActive = !(lbffBayerPdaf2NoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_NoTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[15]->isActive = !(lbffBayerPdaf2NoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_NoTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[16]->isActive = !(lbffBayerPdaf2NoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_NoTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[17]->isActive = !(lbffBayerPdaf2NoGmvNoTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf2_NoGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[18]->isActive = !(lbffBayerPdaf2NoGmvNoTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf2_NoGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 19; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode->bitmapsNotVanished = lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100104::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x600000; // Run kernel ids 21 (ifd_segmap_bnlm_1_4) and 22 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0x18000000; // Run kernel ids 27 (ifd_segmap_xnr_1_4) and 28 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[9]->isActive == false) + { + lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0x300000000; // Run kernel ids 32 (ifd_segmap_acm_1_4) and 33 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[10]->isActive == false) + { + lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x30000000000; // Run kernel ids 40 (ifd_segmap_cas_1_4) and 41 (smurf_cas_1_0) + } + + lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100105 + */ +StaticGraph100105::StaticGraph100105(GraphConfiguration100105* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100105, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysPdaf2WithCvOuterNode.Init(&_graphConfiguration.isysPdaf2WithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf2WithGmvNoTnrWithSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::PdafBuffer; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 7; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[23]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 24; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysPdaf2WithCvOuterNode = &_isysPdaf2WithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode = &_lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysPdaf2WithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100105::~StaticGraph100105() +{ +} + +StaticGraphStatus imageSubGraphTopology100105::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf2WithGmvNoTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf2WithGmvNoTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf2WithGmvNoTnrWithSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[19]->linkConfiguration->bufferSize == 0 && + subGraphLinks[21]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2WithGmvNoTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[20]->linkConfiguration->bufferSize == 0 && + subGraphLinks[22]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2WithGmvNoTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode->setInnerNode(lbffBayerPdaf2WithGmvNoTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[13]->isActive = !(lbffBayerPdaf2WithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[14]->isActive = !(lbffBayerPdaf2WithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[15]->isActive = !(lbffBayerPdaf2WithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[16]->isActive = !(lbffBayerPdaf2WithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[19]->isActive = !(lbffBayerPdaf2WithGmvNoTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[21]->isActive = !(lbffBayerPdaf2WithGmvNoTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[20]->isActive = !(lbffBayerPdaf2WithGmvNoTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[22]->isActive = !(lbffBayerPdaf2WithGmvNoTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 24; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[17]->isActive = (lbffBayerPdaf2WithGmvNoTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_WithSap:terminal_connect_gmv_feature_output -> lbff_Bayer_Pdaf2_WithGmv_NoTnr_WithSap:terminal_connect_gmv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode->bitmapsNotVanished = lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100105::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0xC00000; // Run kernel ids 22 (ifd_segmap_bnlm_1_4) and 23 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0x30000000; // Run kernel ids 28 (ifd_segmap_xnr_1_4) and 29 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[9]->isActive == false) + { + lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0x600000000; // Run kernel ids 33 (ifd_segmap_acm_1_4) and 34 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[10]->isActive == false) + { + lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x300000000000; // Run kernel ids 44 (ifd_segmap_cas_1_4) and 45 (smurf_cas_1_0) + } + + lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100106 + */ +StaticGraph100106::StaticGraph100106(GraphConfiguration100106* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100106, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysPdaf2WithCvOuterNode.Init(&_graphConfiguration.isysPdaf2WithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf2NoGmvWithTnrWithSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::PdafBuffer; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 7; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 24; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysPdaf2WithCvOuterNode = &_isysPdaf2WithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysPdaf2WithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100106::~StaticGraph100106() +{ +} + +StaticGraphStatus imageSubGraphTopology100106::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf2NoGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[22]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[23]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->setInnerNode(lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[15]->isActive = !(lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[16]->isActive = !(lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[17]->isActive = !(lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[18]->isActive = !(lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[22]->isActive = !(lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[23]->isActive = !(lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 24; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[19]->isActive = (lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_blend_output -> lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[20]->isActive = (lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_bc_output -> lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[21]->isActive = (lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmapsNotVanished = lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100106::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x3000000; // Run kernel ids 24 (ifd_segmap_bnlm_1_4) and 25 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0xC0000000; // Run kernel ids 30 (ifd_segmap_xnr_1_4) and 31 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[9]->isActive == false) + { + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0x1800000000; // Run kernel ids 35 (ifd_segmap_acm_1_4) and 36 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[10]->isActive == false) + { + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x300000000000000; // Run kernel ids 56 (ifd_segmap_cas_1_4) and 57 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[11]->isActive == false) + { + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= 0x600000000000; // Run kernel ids 45 (ifd_segmap_tnr_bc_1_4) and 46 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[12]->isActive == false) + { + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= 0x6000000000000; // Run kernel ids 49 (ifd_segmap_tnr_blend_1_4) and 50 (smurf_tnr_blend_1_0) + } + + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100166 + */ +StaticGraph100166::StaticGraph100166(GraphConfiguration100166* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100166, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysPdaf2WithCvOuterNode.Init(&_graphConfiguration.isysPdaf2WithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf2NoGmvWithTnrWithSapOuterNodeConfiguration); + _swNntmOuterNode.Init(&_graphConfiguration.swNntmOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::PdafBuffer; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 7; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[24]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[25]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[26]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[27]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[28]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 29; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysPdaf2WithCvOuterNode = &_isysPdaf2WithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + _imageSubGraph.swNntmOuterNode = &_swNntmOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysPdaf2WithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swNntmOuterNode->contextId = 3; + _imageSubGraph.swScalerOuterNode->contextId = 4; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100166::~StaticGraph100166() +{ +} + +StaticGraphStatus imageSubGraphTopology100166::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf2NoGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[22]->linkConfiguration->bufferSize == 0 && + subGraphLinks[24]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[23]->linkConfiguration->bufferSize == 0 && + subGraphLinks[25]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->setInnerNode(lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[15]->isActive = !(lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[16]->isActive = !(lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[17]->isActive = !(lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[18]->isActive = !(lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[22]->isActive = !(lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[24]->isActive = !(lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> sw_nntm:terminal_connect_input + subGraphLinks[23]->isActive = !(lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[25]->isActive = !(lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> sw_nntm:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 29; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[19]->isActive = (lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_blend_output -> lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[20]->isActive = (lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_bc_output -> lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[21]->isActive = (lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmapsNotVanished = lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100166::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x3000000; // Run kernel ids 24 (ifd_segmap_bnlm_1_4) and 25 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0xC0000000; // Run kernel ids 30 (ifd_segmap_xnr_1_4) and 31 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[9]->isActive == false) + { + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0x1800000000; // Run kernel ids 35 (ifd_segmap_acm_1_4) and 36 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[10]->isActive == false) + { + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x300000000000000; // Run kernel ids 56 (ifd_segmap_cas_1_4) and 57 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[11]->isActive == false) + { + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= 0x600000000000; // Run kernel ids 45 (ifd_segmap_tnr_bc_1_4) and 46 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[12]->isActive == false) + { + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= 0x6000000000000; // Run kernel ids 49 (ifd_segmap_tnr_blend_1_4) and 50 (smurf_tnr_blend_1_0) + } + + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100107 + */ +StaticGraph100107::StaticGraph100107(GraphConfiguration100107* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100107, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysPdaf2WithCvOuterNode.Init(&_graphConfiguration.isysPdaf2WithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf2WithGmvWithTnrWithSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::PdafBuffer; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 7; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[24]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[25]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[26]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[27]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[28]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 29; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysPdaf2WithCvOuterNode = &_isysPdaf2WithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysPdaf2WithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100107::~StaticGraph100107() +{ +} + +StaticGraphStatus imageSubGraphTopology100107::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf2WithGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[24]->linkConfiguration->bufferSize == 0 && + subGraphLinks[26]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[25]->linkConfiguration->bufferSize == 0 && + subGraphLinks[27]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->setInnerNode(lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[15]->isActive = !(lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[16]->isActive = !(lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[17]->isActive = !(lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[18]->isActive = !(lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[24]->isActive = !(lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[26]->isActive = !(lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[25]->isActive = !(lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[27]->isActive = !(lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 29; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[19]->isActive = (lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_gmv_feature_output -> lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_gmv_input + subGraphLinks[21]->isActive = (lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_blend_output -> lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[22]->isActive = (lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_bc_output -> lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[23]->isActive = (lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmapsNotVanished = lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100107::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x6000000; // Run kernel ids 25 (ifd_segmap_bnlm_1_4) and 26 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0x180000000; // Run kernel ids 31 (ifd_segmap_xnr_1_4) and 32 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[9]->isActive == false) + { + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0x3000000000; // Run kernel ids 36 (ifd_segmap_acm_1_4) and 37 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[10]->isActive == false) + { + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x3000000000000000; // Run kernel ids 60 (ifd_segmap_cas_1_4) and 61 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[11]->isActive == false) + { + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= 0x6000000000000; // Run kernel ids 49 (ifd_segmap_tnr_bc_1_4) and 50 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[12]->isActive == false) + { + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= 0x60000000000000; // Run kernel ids 53 (ifd_segmap_tnr_blend_1_4) and 54 (smurf_tnr_blend_1_0) + } + + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100145 + */ +StaticGraph100145::StaticGraph100145(GraphConfiguration100145* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100145, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysPdaf2WithCvOuterNode.Init(&_graphConfiguration.isysPdaf2WithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf2WithGmvWithTnrWithSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + _swNntmOuterNode.Init(&_graphConfiguration.swNntmOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::PdafBuffer; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 7; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[24]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[25]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[26]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[27]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[28]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[29]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[30]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[31]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 32; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysPdaf2WithCvOuterNode = &_isysPdaf2WithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + _imageSubGraph.swNntmOuterNode = &_swNntmOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysPdaf2WithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + _imageSubGraph.swNntmOuterNode->contextId = 4; + _imageSubGraph.swScalerOuterNode->contextId = 5; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100145::~StaticGraph100145() +{ +} + +StaticGraphStatus imageSubGraphTopology100145::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf2WithGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[24]->linkConfiguration->bufferSize == 0 && + subGraphLinks[26]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[25]->linkConfiguration->bufferSize == 0 && + subGraphLinks[27]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->setInnerNode(lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[15]->isActive = !(lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[16]->isActive = !(lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[17]->isActive = !(lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[18]->isActive = !(lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[24]->isActive = !(lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[26]->isActive = !(lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[25]->isActive = !(lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[27]->isActive = !(lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 32; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[19]->isActive = (lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_gmv_feature_output -> lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_gmv_input + subGraphLinks[21]->isActive = (lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_blend_output -> lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[22]->isActive = (lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_bc_output -> lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[23]->isActive = (lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmapsNotVanished = lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100145::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x6000000; // Run kernel ids 25 (ifd_segmap_bnlm_1_4) and 26 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0x180000000; // Run kernel ids 31 (ifd_segmap_xnr_1_4) and 32 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[9]->isActive == false) + { + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0x3000000000; // Run kernel ids 36 (ifd_segmap_acm_1_4) and 37 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[10]->isActive == false) + { + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x3000000000000000; // Run kernel ids 60 (ifd_segmap_cas_1_4) and 61 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[11]->isActive == false) + { + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= 0x6000000000000; // Run kernel ids 49 (ifd_segmap_tnr_bc_1_4) and 50 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[12]->isActive == false) + { + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= 0x60000000000000; // Run kernel ids 53 (ifd_segmap_tnr_blend_1_4) and 54 (smurf_tnr_blend_1_0) + } + + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100108 + */ +StaticGraph100108::StaticGraph100108(GraphConfiguration100108* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100108, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf3NoGmvNoTnrWithSapOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 17; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode = &_lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100108::~StaticGraph100108() +{ +} + +StaticGraphStatus imageSubGraphTopology100108::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3NoGmvNoTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3NoGmvNoTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3NoGmvNoTnrWithSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3NoGmvNoTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3NoGmvNoTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode->setInnerNode(lbffBayerPdaf3NoGmvNoTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[11]->isActive = !(lbffBayerPdaf3NoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_NoTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[12]->isActive = !(lbffBayerPdaf3NoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_NoTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[13]->isActive = !(lbffBayerPdaf3NoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_NoTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[14]->isActive = !(lbffBayerPdaf3NoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_NoTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[15]->isActive = !(lbffBayerPdaf3NoGmvNoTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf3_NoGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[16]->isActive = !(lbffBayerPdaf3NoGmvNoTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf3_NoGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 17; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode->bitmapsNotVanished = lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100108::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[6]->isActive == false) + { + lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x300000; // Run kernel ids 20 (ifd_segmap_bnlm_1_4) and 21 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0xC000000; // Run kernel ids 26 (ifd_segmap_xnr_1_4) and 27 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0x180000000; // Run kernel ids 31 (ifd_segmap_acm_1_4) and 32 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[9]->isActive == false) + { + lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x18000000000; // Run kernel ids 39 (ifd_segmap_cas_1_4) and 40 (smurf_cas_1_0) + } + + lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100109 + */ +StaticGraph100109::StaticGraph100109(GraphConfiguration100109* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100109, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf3WithGmvNoTnrWithSapOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[21]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 22; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode = &_lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100109::~StaticGraph100109() +{ +} + +StaticGraphStatus imageSubGraphTopology100109::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3WithGmvNoTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3WithGmvNoTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3WithGmvNoTnrWithSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && + subGraphLinks[19]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3WithGmvNoTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[18]->linkConfiguration->bufferSize == 0 && + subGraphLinks[20]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3WithGmvNoTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode->setInnerNode(lbffBayerPdaf3WithGmvNoTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[11]->isActive = !(lbffBayerPdaf3WithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[12]->isActive = !(lbffBayerPdaf3WithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[13]->isActive = !(lbffBayerPdaf3WithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[14]->isActive = !(lbffBayerPdaf3WithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[17]->isActive = !(lbffBayerPdaf3WithGmvNoTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[19]->isActive = !(lbffBayerPdaf3WithGmvNoTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[18]->isActive = !(lbffBayerPdaf3WithGmvNoTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[20]->isActive = !(lbffBayerPdaf3WithGmvNoTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 22; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[15]->isActive = (lbffBayerPdaf3WithGmvNoTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_WithSap:terminal_connect_gmv_feature_output -> lbff_Bayer_Pdaf3_WithGmv_NoTnr_WithSap:terminal_connect_gmv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode->bitmapsNotVanished = lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100109::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[6]->isActive == false) + { + lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x600000; // Run kernel ids 21 (ifd_segmap_bnlm_1_4) and 22 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0x18000000; // Run kernel ids 27 (ifd_segmap_xnr_1_4) and 28 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0x300000000; // Run kernel ids 32 (ifd_segmap_acm_1_4) and 33 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[9]->isActive == false) + { + lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x180000000000; // Run kernel ids 43 (ifd_segmap_cas_1_4) and 44 (smurf_cas_1_0) + } + + lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100110 + */ +StaticGraph100110::StaticGraph100110(GraphConfiguration100110* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100110, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf3NoGmvWithTnrWithSapOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 22; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100110::~StaticGraph100110() +{ +} + +StaticGraphStatus imageSubGraphTopology100110::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3NoGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[20]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[21]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->setInnerNode(lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[13]->isActive = !(lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[14]->isActive = !(lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[15]->isActive = !(lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[16]->isActive = !(lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[20]->isActive = !(lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[21]->isActive = !(lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 22; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[17]->isActive = (lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_blend_output -> lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[18]->isActive = (lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_bc_output -> lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[19]->isActive = (lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmapsNotVanished = lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100110::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[6]->isActive == false) + { + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x1800000; // Run kernel ids 23 (ifd_segmap_bnlm_1_4) and 24 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0x60000000; // Run kernel ids 29 (ifd_segmap_xnr_1_4) and 30 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0xC00000000; // Run kernel ids 34 (ifd_segmap_acm_1_4) and 35 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[9]->isActive == false) + { + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x180000000000000; // Run kernel ids 55 (ifd_segmap_cas_1_4) and 56 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[10]->isActive == false) + { + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= 0x300000000000; // Run kernel ids 44 (ifd_segmap_tnr_bc_1_4) and 45 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[11]->isActive == false) + { + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= 0x3000000000000; // Run kernel ids 48 (ifd_segmap_tnr_blend_1_4) and 49 (smurf_tnr_blend_1_0) + } + + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100111 + */ +StaticGraph100111::StaticGraph100111(GraphConfiguration100111* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100111, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf3WithGmvWithTnrWithSapOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[24]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[25]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[26]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 27; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100111::~StaticGraph100111() +{ +} + +StaticGraphStatus imageSubGraphTopology100111::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3WithGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[22]->linkConfiguration->bufferSize == 0 && + subGraphLinks[24]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[23]->linkConfiguration->bufferSize == 0 && + subGraphLinks[25]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->setInnerNode(lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[13]->isActive = !(lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[14]->isActive = !(lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[15]->isActive = !(lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[16]->isActive = !(lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[22]->isActive = !(lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[24]->isActive = !(lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[23]->isActive = !(lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[25]->isActive = !(lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 27; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[17]->isActive = (lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_gmv_feature_output -> lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_gmv_input + subGraphLinks[19]->isActive = (lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_blend_output -> lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[20]->isActive = (lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_bc_output -> lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[21]->isActive = (lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmapsNotVanished = lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100111::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[6]->isActive == false) + { + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x3000000; // Run kernel ids 24 (ifd_segmap_bnlm_1_4) and 25 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0xC0000000; // Run kernel ids 30 (ifd_segmap_xnr_1_4) and 31 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0x1800000000; // Run kernel ids 35 (ifd_segmap_acm_1_4) and 36 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[9]->isActive == false) + { + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x1800000000000000; // Run kernel ids 59 (ifd_segmap_cas_1_4) and 60 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[10]->isActive == false) + { + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= 0x3000000000000; // Run kernel ids 48 (ifd_segmap_tnr_bc_1_4) and 49 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[11]->isActive == false) + { + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= 0x30000000000000; // Run kernel ids 52 (ifd_segmap_tnr_blend_1_4) and 53 (smurf_tnr_blend_1_0) + } + + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100136 + */ +StaticGraph100136::StaticGraph100136(GraphConfiguration100136* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100136, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf3NoGmvWithTnrWithSapOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _swNntmOuterNode.Init(&_graphConfiguration.swNntmOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[24]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[25]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[26]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 27; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + _imageSubGraph.swNntmOuterNode = &_swNntmOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swNntmOuterNode->contextId = 3; + _imageSubGraph.swScalerOuterNode->contextId = 4; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100136::~StaticGraph100136() +{ +} + +StaticGraphStatus imageSubGraphTopology100136::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3NoGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[20]->linkConfiguration->bufferSize == 0 && + subGraphLinks[22]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[21]->linkConfiguration->bufferSize == 0 && + subGraphLinks[23]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->setInnerNode(lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[13]->isActive = !(lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[14]->isActive = !(lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[15]->isActive = !(lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[16]->isActive = !(lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[20]->isActive = !(lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[22]->isActive = !(lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> sw_nntm:terminal_connect_input + subGraphLinks[21]->isActive = !(lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[23]->isActive = !(lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> sw_nntm:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 27; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[17]->isActive = (lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_blend_output -> lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[18]->isActive = (lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_bc_output -> lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[19]->isActive = (lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmapsNotVanished = lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100136::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[6]->isActive == false) + { + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x1800000; // Run kernel ids 23 (ifd_segmap_bnlm_1_4) and 24 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0x60000000; // Run kernel ids 29 (ifd_segmap_xnr_1_4) and 30 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0xC00000000; // Run kernel ids 34 (ifd_segmap_acm_1_4) and 35 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[9]->isActive == false) + { + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x180000000000000; // Run kernel ids 55 (ifd_segmap_cas_1_4) and 56 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[10]->isActive == false) + { + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= 0x300000000000; // Run kernel ids 44 (ifd_segmap_tnr_bc_1_4) and 45 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[11]->isActive == false) + { + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= 0x3000000000000; // Run kernel ids 48 (ifd_segmap_tnr_blend_1_4) and 49 (smurf_tnr_blend_1_0) + } + + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100200 + */ +StaticGraph100200::StaticGraph100200(GraphConfiguration100200* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100200, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNodeConfiguration); + _swNntmOuterNode.Init(&_graphConfiguration.swNntmOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 19; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[24]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[25]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[26]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[27]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 28; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + _imageSubGraph.swNntmOuterNode = &_swNntmOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swNntmOuterNode->contextId = 3; + _imageSubGraph.swScalerOuterNode->contextId = 4; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100200::~StaticGraph100200() +{ +} + +StaticGraphStatus imageSubGraphTopology100200::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[21]->linkConfiguration->bufferSize == 0 && + subGraphLinks[23]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[22]->linkConfiguration->bufferSize == 0 && + subGraphLinks[24]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->setInnerNode(lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[14]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[15]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[16]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[17]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[12]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & noPdaf); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_pdaf_output -> pdaf_out + subGraphLinks[21]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[23]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> sw_nntm:terminal_connect_input + subGraphLinks[22]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[24]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> sw_nntm:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 28; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[11]->isActive = (lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & (no3A|noMp|noDp|noIr)) != (no3A|noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_dpc_pdaf_output -> lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_pdaf_data_input + subGraphLinks[18]->isActive = (lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_blend_output -> lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[19]->isActive = (lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_bc_output -> lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[20]->isActive = (lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmapsNotVanished = lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100200::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[5]->isActive == false) + { + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x6000000; // Run kernel ids 25 (ifd_segmap_bnlm_1_4) and 26 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[6]->isActive == false) + { + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0x180000000; // Run kernel ids 31 (ifd_segmap_xnr_1_4) and 32 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0x3000000000; // Run kernel ids 36 (ifd_segmap_acm_1_4) and 37 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x600000000000000; // Run kernel ids 57 (ifd_segmap_cas_1_4) and 58 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[9]->isActive == false) + { + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= 0xC00000000000; // Run kernel ids 46 (ifd_segmap_tnr_bc_1_4) and 47 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[10]->isActive == false) + { + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= 0xC000000000000; // Run kernel ids 50 (ifd_segmap_tnr_blend_1_4) and 51 (smurf_tnr_blend_1_0) + } + + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100201 + */ +StaticGraph100201::StaticGraph100201(GraphConfiguration100201* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100201, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNodeConfiguration); + _swNntmOuterNode.Init(&_graphConfiguration.swNntmOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 19; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[18]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[20]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 21; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + _imageSubGraph.swNntmOuterNode = &_swNntmOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swNntmOuterNode->contextId = 2; + _imageSubGraph.swScalerOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100201::~StaticGraph100201() +{ +} + +StaticGraphStatus imageSubGraphTopology100201::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode->setInnerNode(lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[7]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[8]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[9]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[10]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[5]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & noPdaf); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_pdaf_output -> pdaf_out + subGraphLinks[14]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[16]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> sw_nntm:terminal_connect_input + subGraphLinks[15]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[17]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> sw_nntm:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 21; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[4]->isActive = (lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & (no3A|noMp|noDp|noIr)) != (no3A|noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_dpc_pdaf_output -> lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_pdaf_data_input + subGraphLinks[11]->isActive = (lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[12]->isActive = (lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[13]->isActive = (lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100112 + */ +StaticGraph100112::StaticGraph100112(GraphConfiguration100112* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100112, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysDolWithCvOuterNode.Init(&_graphConfiguration.isysDolWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffDol2InputsNoGmvNoTnrWithSapOuterNode.Init(&_graphConfiguration.lbffDol2InputsNoGmvNoTnrWithSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDol2InputsNoGmvNoTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::LbffDol2InputsNoGmvNoTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsNoGmvNoTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsNoGmvNoTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsNoGmvNoTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsNoGmvNoTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffDol2InputsNoGmvNoTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffDol2InputsNoGmvNoTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffDol2InputsNoGmvNoTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffDol2InputsNoGmvNoTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffDol2InputsNoGmvNoTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffDol2InputsNoGmvNoTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffDol2InputsNoGmvNoTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffDol2InputsNoGmvNoTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 20; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysDolWithCvOuterNode = &_isysDolWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffDol2InputsNoGmvNoTnrWithSapOuterNode = &_lbffDol2InputsNoGmvNoTnrWithSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysDolWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffDol2InputsNoGmvNoTnrWithSapOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100112::~StaticGraph100112() +{ +} + +StaticGraphStatus imageSubGraphTopology100112::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffDol2InputsNoGmvNoTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffDol2InputsNoGmvNoTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffDol2InputsNoGmvNoTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[18]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol2InputsNoGmvNoTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[19]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol2InputsNoGmvNoTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffDol2InputsNoGmvNoTnrWithSapOuterNode->setInnerNode(lbffDol2InputsNoGmvNoTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[13]->isActive = !(lbffDol2InputsNoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_NoTnr_WithSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[14]->isActive = !(lbffDol2InputsNoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_NoTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[15]->isActive = !(lbffDol2InputsNoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_NoTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[16]->isActive = !(lbffDol2InputsNoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_NoTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[17]->isActive = !(lbffDol2InputsNoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_NoTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[18]->isActive = !(lbffDol2InputsNoGmvNoTnrWithSapInnerOptions & noMp); // lbff_Dol2Inputs_NoGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[19]->isActive = !(lbffDol2InputsNoGmvNoTnrWithSapInnerOptions & noDp); // lbff_Dol2Inputs_NoGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 20; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffDol2InputsNoGmvNoTnrWithSapOuterNode->bitmapsNotVanished = lbffDol2InputsNoGmvNoTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100112::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffDol2InputsNoGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffDol2InputsNoGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffDol2InputsNoGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x300000; // Run kernel ids 20 (ifd_segmap_bnlm_1_4) and 21 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[9]->isActive == false) + { + lbffDol2InputsNoGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffDol2InputsNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffDol2InputsNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0xC000000; // Run kernel ids 26 (ifd_segmap_xnr_1_4) and 27 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[10]->isActive == false) + { + lbffDol2InputsNoGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffDol2InputsNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffDol2InputsNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0x180000000; // Run kernel ids 31 (ifd_segmap_acm_1_4) and 32 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[11]->isActive == false) + { + lbffDol2InputsNoGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffDol2InputsNoGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffDol2InputsNoGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x18000000000; // Run kernel ids 39 (ifd_segmap_cas_1_4) and 40 (smurf_cas_1_0) + } + + lbffDol2InputsNoGmvNoTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100113 + */ +StaticGraph100113::StaticGraph100113(GraphConfiguration100113* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100113, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysDolWithCvOuterNode.Init(&_graphConfiguration.isysDolWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffDol2InputsWithGmvNoTnrWithSapOuterNode.Init(&_graphConfiguration.lbffDol2InputsWithGmvNoTnrWithSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDol2InputsWithGmvNoTnrWithSap; + link->destNode = &_lbffDol2InputsWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::LbffDol2InputsWithGmvNoTnrWithSap; + link->destNode = &_lbffDol2InputsWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsWithGmvNoTnrWithSap; + link->destNode = &_lbffDol2InputsWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsWithGmvNoTnrWithSap; + link->destNode = &_lbffDol2InputsWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsWithGmvNoTnrWithSap; + link->destNode = &_lbffDol2InputsWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsWithGmvNoTnrWithSap; + link->destNode = &_lbffDol2InputsWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffDol2InputsWithGmvNoTnrWithSap; + link->destNode = &_lbffDol2InputsWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffDol2InputsWithGmvNoTnrWithSap; + link->destNode = &_lbffDol2InputsWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[24]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 25; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysDolWithCvOuterNode = &_isysDolWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffDol2InputsWithGmvNoTnrWithSapOuterNode = &_lbffDol2InputsWithGmvNoTnrWithSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysDolWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffDol2InputsWithGmvNoTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100113::~StaticGraph100113() +{ +} + +StaticGraphStatus imageSubGraphTopology100113::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffDol2InputsWithGmvNoTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffDol2InputsWithGmvNoTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffDol2InputsWithGmvNoTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[20]->linkConfiguration->bufferSize == 0 && + subGraphLinks[22]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol2InputsWithGmvNoTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[21]->linkConfiguration->bufferSize == 0 && + subGraphLinks[23]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol2InputsWithGmvNoTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffDol2InputsWithGmvNoTnrWithSapOuterNode->setInnerNode(lbffDol2InputsWithGmvNoTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[13]->isActive = !(lbffDol2InputsWithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_NoTnr_WithSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[14]->isActive = !(lbffDol2InputsWithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_NoTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[15]->isActive = !(lbffDol2InputsWithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_NoTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[16]->isActive = !(lbffDol2InputsWithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_NoTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[17]->isActive = !(lbffDol2InputsWithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_NoTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[20]->isActive = !(lbffDol2InputsWithGmvNoTnrWithSapInnerOptions & noMp); // lbff_Dol2Inputs_WithGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[22]->isActive = !(lbffDol2InputsWithGmvNoTnrWithSapInnerOptions & noMp); // lbff_Dol2Inputs_WithGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[21]->isActive = !(lbffDol2InputsWithGmvNoTnrWithSapInnerOptions & noDp); // lbff_Dol2Inputs_WithGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[23]->isActive = !(lbffDol2InputsWithGmvNoTnrWithSapInnerOptions & noDp); // lbff_Dol2Inputs_WithGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 25; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[18]->isActive = (lbffDol2InputsWithGmvNoTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol2Inputs_WithGmv_NoTnr_WithSap:terminal_connect_gmv_feature_output -> lbff_Dol2Inputs_WithGmv_NoTnr_WithSap:terminal_connect_gmv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffDol2InputsWithGmvNoTnrWithSapOuterNode->bitmapsNotVanished = lbffDol2InputsWithGmvNoTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100113::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffDol2InputsWithGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffDol2InputsWithGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffDol2InputsWithGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x600000; // Run kernel ids 21 (ifd_segmap_bnlm_1_4) and 22 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[9]->isActive == false) + { + lbffDol2InputsWithGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffDol2InputsWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffDol2InputsWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0x18000000; // Run kernel ids 27 (ifd_segmap_xnr_1_4) and 28 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[10]->isActive == false) + { + lbffDol2InputsWithGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffDol2InputsWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffDol2InputsWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0x300000000; // Run kernel ids 32 (ifd_segmap_acm_1_4) and 33 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[11]->isActive == false) + { + lbffDol2InputsWithGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffDol2InputsWithGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffDol2InputsWithGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x180000000000; // Run kernel ids 43 (ifd_segmap_cas_1_4) and 44 (smurf_cas_1_0) + } + + lbffDol2InputsWithGmvNoTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100114 + */ +StaticGraph100114::StaticGraph100114(GraphConfiguration100114* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100114, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysDolWithCvOuterNode.Init(&_graphConfiguration.isysDolWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffDol2InputsNoGmvWithTnrWithSapOuterNode.Init(&_graphConfiguration.lbffDol2InputsNoGmvWithTnrWithSapOuterNodeConfiguration); + _swNntmOuterNode.Init(&_graphConfiguration.swNntmOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[24]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[25]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[26]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[27]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[28]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[29]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 30; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysDolWithCvOuterNode = &_isysDolWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffDol2InputsNoGmvWithTnrWithSapOuterNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + _imageSubGraph.swNntmOuterNode = &_swNntmOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysDolWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffDol2InputsNoGmvWithTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swNntmOuterNode->contextId = 3; + _imageSubGraph.swScalerOuterNode->contextId = 4; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100114::~StaticGraph100114() +{ +} + +StaticGraphStatus imageSubGraphTopology100114::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffDol2InputsNoGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffDol2InputsNoGmvWithTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffDol2InputsNoGmvWithTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[23]->linkConfiguration->bufferSize == 0 && + subGraphLinks[25]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol2InputsNoGmvWithTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[24]->linkConfiguration->bufferSize == 0 && + subGraphLinks[26]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol2InputsNoGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->setInnerNode(lbffDol2InputsNoGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[15]->isActive = !(lbffDol2InputsNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[16]->isActive = !(lbffDol2InputsNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[17]->isActive = !(lbffDol2InputsNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[18]->isActive = !(lbffDol2InputsNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[19]->isActive = !(lbffDol2InputsNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[23]->isActive = !(lbffDol2InputsNoGmvWithTnrWithSapInnerOptions & noMp); // lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[25]->isActive = !(lbffDol2InputsNoGmvWithTnrWithSapInnerOptions & noMp); // lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> sw_nntm:terminal_connect_input + subGraphLinks[24]->isActive = !(lbffDol2InputsNoGmvWithTnrWithSapInnerOptions & noDp); // lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[26]->isActive = !(lbffDol2InputsNoGmvWithTnrWithSapInnerOptions & noDp); // lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> sw_nntm:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 30; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[20]->isActive = (lbffDol2InputsNoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_blend_output -> lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[21]->isActive = (lbffDol2InputsNoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_bc_output -> lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[22]->isActive = (lbffDol2InputsNoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmapsNotVanished = lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100114::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x1800000; // Run kernel ids 23 (ifd_segmap_bnlm_1_4) and 24 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[9]->isActive == false) + { + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0x60000000; // Run kernel ids 29 (ifd_segmap_xnr_1_4) and 30 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[10]->isActive == false) + { + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0xC00000000; // Run kernel ids 34 (ifd_segmap_acm_1_4) and 35 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[11]->isActive == false) + { + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x180000000000000; // Run kernel ids 55 (ifd_segmap_cas_1_4) and 56 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[12]->isActive == false) + { + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= 0x300000000000; // Run kernel ids 44 (ifd_segmap_tnr_bc_1_4) and 45 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[13]->isActive == false) + { + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= 0x3000000000000; // Run kernel ids 48 (ifd_segmap_tnr_blend_1_4) and 49 (smurf_tnr_blend_1_0) + } + + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100146 + */ +StaticGraph100146::StaticGraph100146(GraphConfiguration100146* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100146, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysDolWithCvOuterNode.Init(&_graphConfiguration.isysDolWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffDol2InputsNoGmvWithTnrWithSapOuterNode.Init(&_graphConfiguration.lbffDol2InputsNoGmvWithTnrWithSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[24]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[25]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[26]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[27]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[28]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[29]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 30; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysDolWithCvOuterNode = &_isysDolWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffDol2InputsNoGmvWithTnrWithSapOuterNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysDolWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffDol2InputsNoGmvWithTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + _imageSubGraph.swScalerOuterNode->contextId = 4; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100146::~StaticGraph100146() +{ +} + +StaticGraphStatus imageSubGraphTopology100146::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffDol2InputsNoGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffDol2InputsNoGmvWithTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffDol2InputsNoGmvWithTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[23]->linkConfiguration->bufferSize == 0 && + subGraphLinks[25]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol2InputsNoGmvWithTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[24]->linkConfiguration->bufferSize == 0 && + subGraphLinks[26]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol2InputsNoGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->setInnerNode(lbffDol2InputsNoGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[15]->isActive = !(lbffDol2InputsNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[16]->isActive = !(lbffDol2InputsNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[17]->isActive = !(lbffDol2InputsNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[18]->isActive = !(lbffDol2InputsNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[19]->isActive = !(lbffDol2InputsNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[23]->isActive = !(lbffDol2InputsNoGmvWithTnrWithSapInnerOptions & noMp); // lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[25]->isActive = !(lbffDol2InputsNoGmvWithTnrWithSapInnerOptions & noMp); // lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[24]->isActive = !(lbffDol2InputsNoGmvWithTnrWithSapInnerOptions & noDp); // lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[26]->isActive = !(lbffDol2InputsNoGmvWithTnrWithSapInnerOptions & noDp); // lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 30; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[20]->isActive = (lbffDol2InputsNoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_blend_output -> lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[21]->isActive = (lbffDol2InputsNoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_bc_output -> lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[22]->isActive = (lbffDol2InputsNoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmapsNotVanished = lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100146::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x1800000; // Run kernel ids 23 (ifd_segmap_bnlm_1_4) and 24 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[9]->isActive == false) + { + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0x60000000; // Run kernel ids 29 (ifd_segmap_xnr_1_4) and 30 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[10]->isActive == false) + { + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0xC00000000; // Run kernel ids 34 (ifd_segmap_acm_1_4) and 35 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[11]->isActive == false) + { + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x180000000000000; // Run kernel ids 55 (ifd_segmap_cas_1_4) and 56 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[12]->isActive == false) + { + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= 0x300000000000; // Run kernel ids 44 (ifd_segmap_tnr_bc_1_4) and 45 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[13]->isActive == false) + { + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= 0x3000000000000; // Run kernel ids 48 (ifd_segmap_tnr_blend_1_4) and 49 (smurf_tnr_blend_1_0) + } + + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100115 + */ +StaticGraph100115::StaticGraph100115(GraphConfiguration100115* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100115, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysDolWithCvOuterNode.Init(&_graphConfiguration.isysDolWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffDol2InputsWithGmvWithTnrWithSapOuterNode.Init(&_graphConfiguration.lbffDol2InputsWithGmvWithTnrWithSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[24]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[25]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[26]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[27]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[28]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[29]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 30; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysDolWithCvOuterNode = &_isysDolWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffDol2InputsWithGmvWithTnrWithSapOuterNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysDolWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffDol2InputsWithGmvWithTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100115::~StaticGraph100115() +{ +} + +StaticGraphStatus imageSubGraphTopology100115::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffDol2InputsWithGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffDol2InputsWithGmvWithTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffDol2InputsWithGmvWithTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[25]->linkConfiguration->bufferSize == 0 && + subGraphLinks[27]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol2InputsWithGmvWithTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[26]->linkConfiguration->bufferSize == 0 && + subGraphLinks[28]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol2InputsWithGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffDol2InputsWithGmvWithTnrWithSapOuterNode->setInnerNode(lbffDol2InputsWithGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[15]->isActive = !(lbffDol2InputsWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_WithTnr_WithSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[16]->isActive = !(lbffDol2InputsWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[17]->isActive = !(lbffDol2InputsWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[18]->isActive = !(lbffDol2InputsWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[19]->isActive = !(lbffDol2InputsWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[25]->isActive = !(lbffDol2InputsWithGmvWithTnrWithSapInnerOptions & noMp); // lbff_Dol2Inputs_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[27]->isActive = !(lbffDol2InputsWithGmvWithTnrWithSapInnerOptions & noMp); // lbff_Dol2Inputs_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[26]->isActive = !(lbffDol2InputsWithGmvWithTnrWithSapInnerOptions & noDp); // lbff_Dol2Inputs_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[28]->isActive = !(lbffDol2InputsWithGmvWithTnrWithSapInnerOptions & noDp); // lbff_Dol2Inputs_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 30; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[20]->isActive = (lbffDol2InputsWithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol2Inputs_WithGmv_WithTnr_WithSap:terminal_connect_gmv_feature_output -> lbff_Dol2Inputs_WithGmv_WithTnr_WithSap:terminal_connect_gmv_input + subGraphLinks[22]->isActive = (lbffDol2InputsWithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol2Inputs_WithGmv_WithTnr_WithSap:terminal_connect_blend_output -> lbff_Dol2Inputs_WithGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[23]->isActive = (lbffDol2InputsWithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol2Inputs_WithGmv_WithTnr_WithSap:terminal_connect_bc_output -> lbff_Dol2Inputs_WithGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[24]->isActive = (lbffDol2InputsWithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol2Inputs_WithGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> lbff_Dol2Inputs_WithGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffDol2InputsWithGmvWithTnrWithSapOuterNode->bitmapsNotVanished = lbffDol2InputsWithGmvWithTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100115::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffDol2InputsWithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffDol2InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffDol2InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x3000000; // Run kernel ids 24 (ifd_segmap_bnlm_1_4) and 25 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[9]->isActive == false) + { + lbffDol2InputsWithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffDol2InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffDol2InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0xC0000000; // Run kernel ids 30 (ifd_segmap_xnr_1_4) and 31 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[10]->isActive == false) + { + lbffDol2InputsWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffDol2InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffDol2InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0x1800000000; // Run kernel ids 35 (ifd_segmap_acm_1_4) and 36 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[11]->isActive == false) + { + lbffDol2InputsWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffDol2InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffDol2InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x1800000000000000; // Run kernel ids 59 (ifd_segmap_cas_1_4) and 60 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[12]->isActive == false) + { + lbffDol2InputsWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffDol2InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffDol2InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= 0x3000000000000; // Run kernel ids 48 (ifd_segmap_tnr_bc_1_4) and 49 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[13]->isActive == false) + { + lbffDol2InputsWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffDol2InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffDol2InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= 0x30000000000000; // Run kernel ids 52 (ifd_segmap_tnr_blend_1_4) and 53 (smurf_tnr_blend_1_0) + } + + lbffDol2InputsWithGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100116 + */ +StaticGraph100116::StaticGraph100116(GraphConfiguration100116* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100116, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysDolWithCvOuterNode.Init(&_graphConfiguration.isysDolWithCvOuterNodeConfiguration); + _lbffDolSmoothOuterNode.Init(&_graphConfiguration.lbffDolSmoothOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffDol3InputsNoGmvNoTnrWithSapOuterNode.Init(&_graphConfiguration.lbffDol3InputsNoGmvNoTnrWithSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDolSmooth; + link->destNode = &_lbffDolSmoothOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffDolSmooth; + link->srcNode = &_lbffDolSmoothOuterNode; + link->srcTerminalId = 16; + link->dest = GraphElementType::LbffDol3InputsNoGmvNoTnrWithSap; + link->destNode = &_lbffDol3InputsNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDol3InputsNoGmvNoTnrWithSap; + link->destNode = &_lbffDol3InputsNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::LbffDol3InputsNoGmvNoTnrWithSap; + link->destNode = &_lbffDol3InputsNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol3InputsNoGmvNoTnrWithSap; + link->destNode = &_lbffDol3InputsNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol3InputsNoGmvNoTnrWithSap; + link->destNode = &_lbffDol3InputsNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol3InputsNoGmvNoTnrWithSap; + link->destNode = &_lbffDol3InputsNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol3InputsNoGmvNoTnrWithSap; + link->destNode = &_lbffDol3InputsNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffDol3InputsNoGmvNoTnrWithSap; + link->destNode = &_lbffDol3InputsNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffDol3InputsNoGmvNoTnrWithSap; + link->srcNode = &_lbffDol3InputsNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffDol3InputsNoGmvNoTnrWithSap; + link->srcNode = &_lbffDol3InputsNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffDol3InputsNoGmvNoTnrWithSap; + link->srcNode = &_lbffDol3InputsNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffDol3InputsNoGmvNoTnrWithSap; + link->srcNode = &_lbffDol3InputsNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffDol3InputsNoGmvNoTnrWithSap; + link->srcNode = &_lbffDol3InputsNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffDol3InputsNoGmvNoTnrWithSap; + link->srcNode = &_lbffDol3InputsNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffDol3InputsNoGmvNoTnrWithSap; + link->srcNode = &_lbffDol3InputsNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 22; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysDolWithCvOuterNode = &_isysDolWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffDolSmoothOuterNode = &_lbffDolSmoothOuterNode; + _imageSubGraph.lbffDol3InputsNoGmvNoTnrWithSapOuterNode = &_lbffDol3InputsNoGmvNoTnrWithSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysDolWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffDolSmoothOuterNode->contextId = 2; + _imageSubGraph.lbffDol3InputsNoGmvNoTnrWithSapOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100116::~StaticGraph100116() +{ +} + +StaticGraphStatus imageSubGraphTopology100116::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffDol3InputsNoGmvNoTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffDol3InputsNoGmvNoTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffDol3InputsNoGmvNoTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[20]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol3InputsNoGmvNoTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[21]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol3InputsNoGmvNoTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffDol3InputsNoGmvNoTnrWithSapOuterNode->setInnerNode(lbffDol3InputsNoGmvNoTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[15]->isActive = !(lbffDol3InputsNoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Dol3Inputs_NoGmv_NoTnr_WithSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[16]->isActive = !(lbffDol3InputsNoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Dol3Inputs_NoGmv_NoTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[17]->isActive = !(lbffDol3InputsNoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Dol3Inputs_NoGmv_NoTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[18]->isActive = !(lbffDol3InputsNoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Dol3Inputs_NoGmv_NoTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[19]->isActive = !(lbffDol3InputsNoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Dol3Inputs_NoGmv_NoTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[20]->isActive = !(lbffDol3InputsNoGmvNoTnrWithSapInnerOptions & noMp); // lbff_Dol3Inputs_NoGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[21]->isActive = !(lbffDol3InputsNoGmvNoTnrWithSapInnerOptions & noDp); // lbff_Dol3Inputs_NoGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 22; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffDol3InputsNoGmvNoTnrWithSapOuterNode->bitmapsNotVanished = lbffDol3InputsNoGmvNoTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100116::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[10]->isActive == false) + { + lbffDol3InputsNoGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffDol3InputsNoGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffDol3InputsNoGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x600000; // Run kernel ids 21 (ifd_segmap_bnlm_1_4) and 22 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[11]->isActive == false) + { + lbffDol3InputsNoGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffDol3InputsNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffDol3InputsNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0x18000000; // Run kernel ids 27 (ifd_segmap_xnr_1_4) and 28 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[12]->isActive == false) + { + lbffDol3InputsNoGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffDol3InputsNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffDol3InputsNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0x300000000; // Run kernel ids 32 (ifd_segmap_acm_1_4) and 33 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[13]->isActive == false) + { + lbffDol3InputsNoGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffDol3InputsNoGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffDol3InputsNoGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x30000000000; // Run kernel ids 40 (ifd_segmap_cas_1_4) and 41 (smurf_cas_1_0) + } + + lbffDol3InputsNoGmvNoTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100117 + */ +StaticGraph100117::StaticGraph100117(GraphConfiguration100117* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100117, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysDolWithCvOuterNode.Init(&_graphConfiguration.isysDolWithCvOuterNodeConfiguration); + _lbffDolSmoothOuterNode.Init(&_graphConfiguration.lbffDolSmoothOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffDol3InputsWithGmvNoTnrWithSapOuterNode.Init(&_graphConfiguration.lbffDol3InputsWithGmvNoTnrWithSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDolSmooth; + link->destNode = &_lbffDolSmoothOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffDolSmooth; + link->srcNode = &_lbffDolSmoothOuterNode; + link->srcTerminalId = 16; + link->dest = GraphElementType::LbffDol3InputsWithGmvNoTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDol3InputsWithGmvNoTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::LbffDol3InputsWithGmvNoTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol3InputsWithGmvNoTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol3InputsWithGmvNoTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol3InputsWithGmvNoTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol3InputsWithGmvNoTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffDol3InputsWithGmvNoTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffDol3InputsWithGmvNoTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[24]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[25]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[26]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 27; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysDolWithCvOuterNode = &_isysDolWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffDolSmoothOuterNode = &_lbffDolSmoothOuterNode; + _imageSubGraph.lbffDol3InputsWithGmvNoTnrWithSapOuterNode = &_lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysDolWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffDolSmoothOuterNode->contextId = 2; + _imageSubGraph.lbffDol3InputsWithGmvNoTnrWithSapOuterNode->contextId = 3; + _imageSubGraph.swGdcOuterNode->contextId = 4; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100117::~StaticGraph100117() +{ +} + +StaticGraphStatus imageSubGraphTopology100117::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffDol3InputsWithGmvNoTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffDol3InputsWithGmvNoTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffDol3InputsWithGmvNoTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[22]->linkConfiguration->bufferSize == 0 && + subGraphLinks[24]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol3InputsWithGmvNoTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[23]->linkConfiguration->bufferSize == 0 && + subGraphLinks[25]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol3InputsWithGmvNoTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffDol3InputsWithGmvNoTnrWithSapOuterNode->setInnerNode(lbffDol3InputsWithGmvNoTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[15]->isActive = !(lbffDol3InputsWithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_NoTnr_WithSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[16]->isActive = !(lbffDol3InputsWithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_NoTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[17]->isActive = !(lbffDol3InputsWithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_NoTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[18]->isActive = !(lbffDol3InputsWithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_NoTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[19]->isActive = !(lbffDol3InputsWithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_NoTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[22]->isActive = !(lbffDol3InputsWithGmvNoTnrWithSapInnerOptions & noMp); // lbff_Dol3Inputs_WithGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[24]->isActive = !(lbffDol3InputsWithGmvNoTnrWithSapInnerOptions & noMp); // lbff_Dol3Inputs_WithGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[23]->isActive = !(lbffDol3InputsWithGmvNoTnrWithSapInnerOptions & noDp); // lbff_Dol3Inputs_WithGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[25]->isActive = !(lbffDol3InputsWithGmvNoTnrWithSapInnerOptions & noDp); // lbff_Dol3Inputs_WithGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 27; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[20]->isActive = (lbffDol3InputsWithGmvNoTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol3Inputs_WithGmv_NoTnr_WithSap:terminal_connect_gmv_feature_output -> lbff_Dol3Inputs_WithGmv_NoTnr_WithSap:terminal_connect_gmv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffDol3InputsWithGmvNoTnrWithSapOuterNode->bitmapsNotVanished = lbffDol3InputsWithGmvNoTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100117::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[10]->isActive == false) + { + lbffDol3InputsWithGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffDol3InputsWithGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffDol3InputsWithGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0xC00000; // Run kernel ids 22 (ifd_segmap_bnlm_1_4) and 23 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[11]->isActive == false) + { + lbffDol3InputsWithGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffDol3InputsWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffDol3InputsWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0x30000000; // Run kernel ids 28 (ifd_segmap_xnr_1_4) and 29 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[12]->isActive == false) + { + lbffDol3InputsWithGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffDol3InputsWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffDol3InputsWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0x600000000; // Run kernel ids 33 (ifd_segmap_acm_1_4) and 34 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[13]->isActive == false) + { + lbffDol3InputsWithGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffDol3InputsWithGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffDol3InputsWithGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x300000000000; // Run kernel ids 44 (ifd_segmap_cas_1_4) and 45 (smurf_cas_1_0) + } + + lbffDol3InputsWithGmvNoTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100118 + */ +StaticGraph100118::StaticGraph100118(GraphConfiguration100118* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100118, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysDolWithCvOuterNode.Init(&_graphConfiguration.isysDolWithCvOuterNodeConfiguration); + _lbffDolSmoothOuterNode.Init(&_graphConfiguration.lbffDolSmoothOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffDol3InputsNoGmvWithTnrWithSapOuterNode.Init(&_graphConfiguration.lbffDol3InputsNoGmvWithTnrWithSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDolSmooth; + link->destNode = &_lbffDolSmoothOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffDolSmooth; + link->srcNode = &_lbffDolSmoothOuterNode; + link->srcTerminalId = 16; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[15]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[16]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[24]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[25]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[26]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 27; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysDolWithCvOuterNode = &_isysDolWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffDolSmoothOuterNode = &_lbffDolSmoothOuterNode; + _imageSubGraph.lbffDol3InputsNoGmvWithTnrWithSapOuterNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysDolWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffDolSmoothOuterNode->contextId = 2; + _imageSubGraph.lbffDol3InputsNoGmvWithTnrWithSapOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100118::~StaticGraph100118() +{ +} + +StaticGraphStatus imageSubGraphTopology100118::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffDol3InputsNoGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffDol3InputsNoGmvWithTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffDol3InputsNoGmvWithTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[25]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol3InputsNoGmvWithTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[26]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol3InputsNoGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffDol3InputsNoGmvWithTnrWithSapOuterNode->setInnerNode(lbffDol3InputsNoGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[17]->isActive = !(lbffDol3InputsNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Dol3Inputs_NoGmv_WithTnr_WithSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[18]->isActive = !(lbffDol3InputsNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Dol3Inputs_NoGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[19]->isActive = !(lbffDol3InputsNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Dol3Inputs_NoGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[20]->isActive = !(lbffDol3InputsNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Dol3Inputs_NoGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[21]->isActive = !(lbffDol3InputsNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Dol3Inputs_NoGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[25]->isActive = !(lbffDol3InputsNoGmvWithTnrWithSapInnerOptions & noMp); // lbff_Dol3Inputs_NoGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[26]->isActive = !(lbffDol3InputsNoGmvWithTnrWithSapInnerOptions & noDp); // lbff_Dol3Inputs_NoGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 27; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[22]->isActive = (lbffDol3InputsNoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol3Inputs_NoGmv_WithTnr_WithSap:terminal_connect_blend_output -> lbff_Dol3Inputs_NoGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[23]->isActive = (lbffDol3InputsNoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol3Inputs_NoGmv_WithTnr_WithSap:terminal_connect_bc_output -> lbff_Dol3Inputs_NoGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[24]->isActive = (lbffDol3InputsNoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol3Inputs_NoGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> lbff_Dol3Inputs_NoGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffDol3InputsNoGmvWithTnrWithSapOuterNode->bitmapsNotVanished = lbffDol3InputsNoGmvWithTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100118::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[10]->isActive == false) + { + lbffDol3InputsNoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffDol3InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffDol3InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x3000000; // Run kernel ids 24 (ifd_segmap_bnlm_1_4) and 25 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[11]->isActive == false) + { + lbffDol3InputsNoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffDol3InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffDol3InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0xC0000000; // Run kernel ids 30 (ifd_segmap_xnr_1_4) and 31 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[12]->isActive == false) + { + lbffDol3InputsNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffDol3InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffDol3InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0x1800000000; // Run kernel ids 35 (ifd_segmap_acm_1_4) and 36 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[13]->isActive == false) + { + lbffDol3InputsNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffDol3InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffDol3InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x300000000000000; // Run kernel ids 56 (ifd_segmap_cas_1_4) and 57 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[14]->isActive == false) + { + lbffDol3InputsNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffDol3InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffDol3InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= 0x600000000000; // Run kernel ids 45 (ifd_segmap_tnr_bc_1_4) and 46 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[15]->isActive == false) + { + lbffDol3InputsNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffDol3InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffDol3InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= 0x6000000000000; // Run kernel ids 49 (ifd_segmap_tnr_blend_1_4) and 50 (smurf_tnr_blend_1_0) + } + + lbffDol3InputsNoGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100119 + */ +StaticGraph100119::StaticGraph100119(GraphConfiguration100119* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100119, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysDolWithCvOuterNode.Init(&_graphConfiguration.isysDolWithCvOuterNodeConfiguration); + _lbffDolSmoothOuterNode.Init(&_graphConfiguration.lbffDolSmoothOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffDol3InputsWithGmvWithTnrWithSapOuterNode.Init(&_graphConfiguration.lbffDol3InputsWithGmvWithTnrWithSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDolSmooth; + link->destNode = &_lbffDolSmoothOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffDolSmooth; + link->srcNode = &_lbffDolSmoothOuterNode; + link->srcTerminalId = 16; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[15]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[16]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[24]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[25]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[26]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[27]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[28]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[29]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[30]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[31]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 32; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysDolWithCvOuterNode = &_isysDolWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffDolSmoothOuterNode = &_lbffDolSmoothOuterNode; + _imageSubGraph.lbffDol3InputsWithGmvWithTnrWithSapOuterNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysDolWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffDolSmoothOuterNode->contextId = 2; + _imageSubGraph.lbffDol3InputsWithGmvWithTnrWithSapOuterNode->contextId = 3; + _imageSubGraph.swGdcOuterNode->contextId = 4; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100119::~StaticGraph100119() +{ +} + +StaticGraphStatus imageSubGraphTopology100119::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffDol3InputsWithGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffDol3InputsWithGmvWithTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffDol3InputsWithGmvWithTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[27]->linkConfiguration->bufferSize == 0 && + subGraphLinks[29]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol3InputsWithGmvWithTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[28]->linkConfiguration->bufferSize == 0 && + subGraphLinks[30]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol3InputsWithGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffDol3InputsWithGmvWithTnrWithSapOuterNode->setInnerNode(lbffDol3InputsWithGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[17]->isActive = !(lbffDol3InputsWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_WithTnr_WithSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[18]->isActive = !(lbffDol3InputsWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[19]->isActive = !(lbffDol3InputsWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[20]->isActive = !(lbffDol3InputsWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[21]->isActive = !(lbffDol3InputsWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[27]->isActive = !(lbffDol3InputsWithGmvWithTnrWithSapInnerOptions & noMp); // lbff_Dol3Inputs_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[29]->isActive = !(lbffDol3InputsWithGmvWithTnrWithSapInnerOptions & noMp); // lbff_Dol3Inputs_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[28]->isActive = !(lbffDol3InputsWithGmvWithTnrWithSapInnerOptions & noDp); // lbff_Dol3Inputs_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[30]->isActive = !(lbffDol3InputsWithGmvWithTnrWithSapInnerOptions & noDp); // lbff_Dol3Inputs_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 32; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[22]->isActive = (lbffDol3InputsWithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol3Inputs_WithGmv_WithTnr_WithSap:terminal_connect_gmv_feature_output -> lbff_Dol3Inputs_WithGmv_WithTnr_WithSap:terminal_connect_gmv_input + subGraphLinks[24]->isActive = (lbffDol3InputsWithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol3Inputs_WithGmv_WithTnr_WithSap:terminal_connect_blend_output -> lbff_Dol3Inputs_WithGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[25]->isActive = (lbffDol3InputsWithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol3Inputs_WithGmv_WithTnr_WithSap:terminal_connect_bc_output -> lbff_Dol3Inputs_WithGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[26]->isActive = (lbffDol3InputsWithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol3Inputs_WithGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> lbff_Dol3Inputs_WithGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffDol3InputsWithGmvWithTnrWithSapOuterNode->bitmapsNotVanished = lbffDol3InputsWithGmvWithTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100119::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[10]->isActive == false) + { + lbffDol3InputsWithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffDol3InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffDol3InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x6000000; // Run kernel ids 25 (ifd_segmap_bnlm_1_4) and 26 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[11]->isActive == false) + { + lbffDol3InputsWithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffDol3InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffDol3InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0x180000000; // Run kernel ids 31 (ifd_segmap_xnr_1_4) and 32 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[12]->isActive == false) + { + lbffDol3InputsWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffDol3InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffDol3InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0x3000000000; // Run kernel ids 36 (ifd_segmap_acm_1_4) and 37 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[13]->isActive == false) + { + lbffDol3InputsWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffDol3InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffDol3InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x3000000000000000; // Run kernel ids 60 (ifd_segmap_cas_1_4) and 61 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[14]->isActive == false) + { + lbffDol3InputsWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffDol3InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffDol3InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= 0x6000000000000; // Run kernel ids 49 (ifd_segmap_tnr_bc_1_4) and 50 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[15]->isActive == false) + { + lbffDol3InputsWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffDol3InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffDol3InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= 0x60000000000000; // Run kernel ids 53 (ifd_segmap_tnr_blend_1_4) and 54 (smurf_tnr_blend_1_0) + } + + lbffDol3InputsWithGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100120 + */ +StaticGraph100120::StaticGraph100120(GraphConfiguration100120* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100120, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) + ,_irSubGraph(_sinkMappingConfiguration) + ,_image_irSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffRgbIrNoGmvNoTnrWithSapOuterNode.Init(&_graphConfiguration.lbffRgbIrNoGmvNoTnrWithSapOuterNodeConfiguration); + _lbffRgbIrIrNoGmvNoTnrNoSapOuterNode.Init(&_graphConfiguration.lbffRgbIrIrNoGmvNoTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + _imageSubGraph.links[0] = link; + _irSubGraph.links[0] = link; + _image_irSubGraph.links[0] = link; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + _imageSubGraph.links[1] = link; + _irSubGraph.links[1] = link; + _image_irSubGraph.links[1] = link; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[2] = link; + _irSubGraph.links[2] = link; + _image_irSubGraph.links[2] = link; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + _imageSubGraph.links[3] = link; + _irSubGraph.links[3] = link; + _image_irSubGraph.links[3] = link; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffRgbIrNoGmvNoTnrWithSap; + link->destNode = &_lbffRgbIrNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + _imageSubGraph.links[4] = link; + _irSubGraph.links[4] = link; + _image_irSubGraph.links[4] = link; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffRgbIrNoGmvNoTnrWithSap; + link->destNode = &_lbffRgbIrNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + _imageSubGraph.links[5] = link; + _irSubGraph.links[5] = link; + _image_irSubGraph.links[5] = link; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffRgbIrNoGmvNoTnrWithSap; + link->destNode = &_lbffRgbIrNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + _imageSubGraph.links[6] = link; + _irSubGraph.links[6] = link; + _image_irSubGraph.links[6] = link; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffRgbIrNoGmvNoTnrWithSap; + link->destNode = &_lbffRgbIrNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + _imageSubGraph.links[7] = link; + _irSubGraph.links[7] = link; + _image_irSubGraph.links[7] = link; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffRgbIrNoGmvNoTnrWithSap; + link->destNode = &_lbffRgbIrNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + _imageSubGraph.links[8] = link; + _irSubGraph.links[8] = link; + _image_irSubGraph.links[8] = link; + + link = &_graphLinks[9]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffRgbIrNoGmvNoTnrWithSap; + link->destNode = &_lbffRgbIrNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + _imageSubGraph.links[9] = link; + _irSubGraph.links[9] = link; + _image_irSubGraph.links[9] = link; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffRgbIrNoGmvNoTnrWithSap; + link->srcNode = &_lbffRgbIrNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[10] = link; + _irSubGraph.links[10] = link; + _image_irSubGraph.links[10] = link; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffRgbIrNoGmvNoTnrWithSap; + link->srcNode = &_lbffRgbIrNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[11] = link; + _irSubGraph.links[11] = link; + _image_irSubGraph.links[11] = link; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffRgbIrNoGmvNoTnrWithSap; + link->srcNode = &_lbffRgbIrNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[12] = link; + _irSubGraph.links[12] = link; + _image_irSubGraph.links[12] = link; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffRgbIrNoGmvNoTnrWithSap; + link->srcNode = &_lbffRgbIrNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[13] = link; + _irSubGraph.links[13] = link; + _image_irSubGraph.links[13] = link; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffRgbIrNoGmvNoTnrWithSap; + link->srcNode = &_lbffRgbIrNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[14] = link; + _irSubGraph.links[14] = link; + _image_irSubGraph.links[14] = link; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffRgbIrNoGmvNoTnrWithSap; + link->srcNode = &_lbffRgbIrNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[15] = link; + _irSubGraph.links[15] = link; + _image_irSubGraph.links[15] = link; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffRgbIrNoGmvNoTnrWithSap; + link->srcNode = &_lbffRgbIrNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[16] = link; + _irSubGraph.links[16] = link; + _image_irSubGraph.links[16] = link; + + link = &_graphLinks[17]; + link->src = GraphElementType::LscBufferIr; + link->dest = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + _irSubGraph.links[17] = link; + _image_irSubGraph.links[17] = link; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffRgbIrNoGmvNoTnrWithSap; + link->srcNode = &_lbffRgbIrNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 14; + link->dest = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + _irSubGraph.links[18] = link; + _image_irSubGraph.links[18] = link; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::IrAeOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[19] = link; + _image_irSubGraph.links[19] = link; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::IrAfStdOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[20] = link; + _image_irSubGraph.links[20] = link; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::IrAwbStdOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[21] = link; + _image_irSubGraph.links[21] = link; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::IrAwbSatOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[22] = link; + _image_irSubGraph.links[22] = link; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::IrMp; + link->type = LinkType::Node2Sink; + _irSubGraph.links[23] = link; + _image_irSubGraph.links[23] = link; + + for (uint8_t i = 0; i < 24; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffRgbIrNoGmvNoTnrWithSapOuterNode = &_lbffRgbIrNoGmvNoTnrWithSapOuterNode; + _irSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _irSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _irSubGraph.lbffRgbIrNoGmvNoTnrWithSapOuterNode = &_lbffRgbIrNoGmvNoTnrWithSapOuterNode; + _irSubGraph.lbffRgbIrIrNoGmvNoTnrNoSapOuterNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + _image_irSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _image_irSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _image_irSubGraph.lbffRgbIrNoGmvNoTnrWithSapOuterNode = &_lbffRgbIrNoGmvNoTnrWithSapOuterNode; + _image_irSubGraph.lbffRgbIrIrNoGmvNoTnrNoSapOuterNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + + // choose the selected sub graph + if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.video != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.stills != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.thumbnail != static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.previewIr == static_cast(HwSink::Disconnected))) + { + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffRgbIrNoGmvNoTnrWithSapOuterNode->contextId = 2; + } + else if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.video == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.stills == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.thumbnail == static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.previewIr != static_cast(HwSink::Disconnected))) + { + _selectedGraphTopology = &_irSubGraph; + + // logical node IDs + _irSubGraph.isysWithCvOuterNode->contextId = 0; + _irSubGraph.swSegnetOuterNode->contextId = 1; + _irSubGraph.lbffRgbIrNoGmvNoTnrWithSapOuterNode->contextId = 2; + _irSubGraph.lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->contextId = 3; + } + else if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.video != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.stills != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.thumbnail != static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.previewIr != static_cast(HwSink::Disconnected))) + { + _selectedGraphTopology = &_image_irSubGraph; + + // logical node IDs + _image_irSubGraph.isysWithCvOuterNode->contextId = 0; + _image_irSubGraph.swSegnetOuterNode->contextId = 1; + _image_irSubGraph.lbffRgbIrNoGmvNoTnrWithSapOuterNode->contextId = 2; + _image_irSubGraph.lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->contextId = 3; + } + else + { + STATIC_GRAPH_LOG("Didn't found a matching sub graph for the selected virtual sinks."); + } + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100120::~StaticGraph100120() +{ +} + +StaticGraphStatus imageSubGraphTopology100120::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffRgbIrNoGmvNoTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrNoGmvNoTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrNoGmvNoTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrNoGmvNoTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrNoGmvNoTnrWithSapInnerOptions |= noDp; + } + // always active private inner options + lbffRgbIrNoGmvNoTnrWithSapInnerOptions |= (noIr); + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrNoGmvNoTnrWithSapOuterNode->setInnerNode(lbffRgbIrNoGmvNoTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[10]->isActive = !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[11]->isActive = !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[12]->isActive = !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[13]->isActive = !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[14]->isActive = !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[15]->isActive = !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & noMp); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[16]->isActive = !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & noDp); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 17; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmapsNotVanished = lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100120::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[5]->isActive == false) + { + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x180000; // Run kernel ids 19 (ifd_segmap_bnlm_1_4) and 20 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[6]->isActive == false) + { + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0x6000000; // Run kernel ids 25 (ifd_segmap_xnr_1_4) and 26 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0xC0000000; // Run kernel ids 30 (ifd_segmap_acm_1_4) and 31 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0xC000000000; // Run kernel ids 38 (ifd_segmap_cas_1_4) and 39 (smurf_cas_1_0) + } + + lbffRgbIrNoGmvNoTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus irSubGraphTopology100120::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags irPublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.irInnerOptions); + + /* + * Setting Node lbffRgbIrNoGmvNoTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrNoGmvNoTnrWithSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrNoGmvNoTnrWithSapInnerOptions |= (noPdaf); + // active public options according to sink mapping + if ( + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrNoGmvNoTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrNoGmvNoTnrWithSapInnerOptions |= noDp; + } + + /* + * Setting Node lbffRgbIrIrNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions |= (noPdaf | noDp | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[23]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions |= noMp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrNoGmvNoTnrWithSapOuterNode->setInnerNode(lbffRgbIrNoGmvNoTnrWithSapInnerOptions); + lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[10]->isActive = !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[11]->isActive = !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[12]->isActive = !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[13]->isActive = !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[14]->isActive = !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[15]->isActive = !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & noMp); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[16]->isActive = !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & noDp); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[19]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ir_ae_out + subGraphLinks[20]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> ir_af_std_out + subGraphLinks[21]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> ir_awb_std_out + subGraphLinks[22]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> ir_awb_sat_out + subGraphLinks[23]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & noMp); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> ir_mp + + /* + * Link enablement by private inner options + */ + subGraphLinks[18]->isActive = !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & noIr); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_ir_output -> lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_main_data_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 24; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmapsNotVanished = lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps; + lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus irSubGraphTopology100120::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[5]->isActive == false) + { + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x180000; // Run kernel ids 19 (ifd_segmap_bnlm_1_4) and 20 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[6]->isActive == false) + { + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0x6000000; // Run kernel ids 25 (ifd_segmap_xnr_1_4) and 26 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0xC0000000; // Run kernel ids 30 (ifd_segmap_acm_1_4) and 31 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0xC000000000; // Run kernel ids 38 (ifd_segmap_cas_1_4) and 39 (smurf_cas_1_0) + } + + lbffRgbIrNoGmvNoTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus image_irSubGraphTopology100120::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + InnerNodeOptionsFlags irPublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.irInnerOptions); + + /* + * Setting Node lbffRgbIrNoGmvNoTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrNoGmvNoTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // active public inner options according to sink mapping + if ( + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrNoGmvNoTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrNoGmvNoTnrWithSapInnerOptions |= noDp; + } + + /* + * Setting Node lbffRgbIrIrNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions |= (noPdaf | noDp | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[23]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions |= noMp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrNoGmvNoTnrWithSapOuterNode->setInnerNode(lbffRgbIrNoGmvNoTnrWithSapInnerOptions); + lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[10]->isActive = !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[11]->isActive = !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[12]->isActive = !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[13]->isActive = !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[14]->isActive = !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[15]->isActive = !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & noMp); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[16]->isActive = !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & noDp); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[19]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ir_ae_out + subGraphLinks[20]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> ir_af_std_out + subGraphLinks[21]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> ir_awb_std_out + subGraphLinks[22]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> ir_awb_sat_out + subGraphLinks[23]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & noMp); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> ir_mp + + /* + * Link enablement by private inner options + */ + subGraphLinks[18]->isActive = !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & noIr); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_ir_output -> lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_main_data_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 24; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmapsNotVanished = lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps; + lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus image_irSubGraphTopology100120::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[5]->isActive == false) + { + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x180000; // Run kernel ids 19 (ifd_segmap_bnlm_1_4) and 20 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[6]->isActive == false) + { + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0x6000000; // Run kernel ids 25 (ifd_segmap_xnr_1_4) and 26 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0xC0000000; // Run kernel ids 30 (ifd_segmap_acm_1_4) and 31 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0xC000000000; // Run kernel ids 38 (ifd_segmap_cas_1_4) and 39 (smurf_cas_1_0) + } + + lbffRgbIrNoGmvNoTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100121 + */ +StaticGraph100121::StaticGraph100121(GraphConfiguration100121* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100121, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) + ,_irSubGraph(_sinkMappingConfiguration) + ,_image_irSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffRgbIrWithGmvNoTnrWithSapOuterNode.Init(&_graphConfiguration.lbffRgbIrWithGmvNoTnrWithSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + _lbffRgbIrIrNoGmvNoTnrNoSapOuterNode.Init(&_graphConfiguration.lbffRgbIrIrNoGmvNoTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + _imageSubGraph.links[0] = link; + _irSubGraph.links[0] = link; + _image_irSubGraph.links[0] = link; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + _imageSubGraph.links[1] = link; + _irSubGraph.links[1] = link; + _image_irSubGraph.links[1] = link; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[2] = link; + _irSubGraph.links[2] = link; + _image_irSubGraph.links[2] = link; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + _imageSubGraph.links[3] = link; + _irSubGraph.links[3] = link; + _image_irSubGraph.links[3] = link; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffRgbIrWithGmvNoTnrWithSap; + link->destNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + _imageSubGraph.links[4] = link; + _irSubGraph.links[4] = link; + _image_irSubGraph.links[4] = link; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffRgbIrWithGmvNoTnrWithSap; + link->destNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + _imageSubGraph.links[5] = link; + _irSubGraph.links[5] = link; + _image_irSubGraph.links[5] = link; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffRgbIrWithGmvNoTnrWithSap; + link->destNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + _imageSubGraph.links[6] = link; + _irSubGraph.links[6] = link; + _image_irSubGraph.links[6] = link; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffRgbIrWithGmvNoTnrWithSap; + link->destNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + _imageSubGraph.links[7] = link; + _irSubGraph.links[7] = link; + _image_irSubGraph.links[7] = link; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffRgbIrWithGmvNoTnrWithSap; + link->destNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + _imageSubGraph.links[8] = link; + _irSubGraph.links[8] = link; + _image_irSubGraph.links[8] = link; + + link = &_graphLinks[9]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffRgbIrWithGmvNoTnrWithSap; + link->destNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + _imageSubGraph.links[9] = link; + _irSubGraph.links[9] = link; + _image_irSubGraph.links[9] = link; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[10] = link; + _irSubGraph.links[10] = link; + _image_irSubGraph.links[10] = link; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[11] = link; + _irSubGraph.links[11] = link; + _image_irSubGraph.links[11] = link; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[12] = link; + _irSubGraph.links[12] = link; + _image_irSubGraph.links[12] = link; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[13] = link; + _irSubGraph.links[13] = link; + _image_irSubGraph.links[13] = link; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[14] = link; + _irSubGraph.links[14] = link; + _image_irSubGraph.links[14] = link; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffRgbIrWithGmvNoTnrWithSap; + link->destNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _imageSubGraph.links[15] = link; + _irSubGraph.links[15] = link; + _image_irSubGraph.links[15] = link; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[16] = link; + _irSubGraph.links[16] = link; + _image_irSubGraph.links[16] = link; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[17] = link; + _irSubGraph.links[17] = link; + _image_irSubGraph.links[17] = link; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[18] = link; + _irSubGraph.links[18] = link; + _image_irSubGraph.links[18] = link; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + _imageSubGraph.links[19] = link; + _image_irSubGraph.links[19] = link; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + _imageSubGraph.links[20] = link; + _image_irSubGraph.links[20] = link; + + link = &_graphLinks[21]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[21] = link; + _image_irSubGraph.links[21] = link; + + link = &_graphLinks[22]; + link->src = GraphElementType::LscBufferIr; + link->dest = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + _irSubGraph.links[19] = link; + _image_irSubGraph.links[22] = link; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 14; + link->dest = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + _irSubGraph.links[20] = link; + _image_irSubGraph.links[23] = link; + + link = &_graphLinks[24]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::IrAeOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[21] = link; + _image_irSubGraph.links[24] = link; + + link = &_graphLinks[25]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::IrAfStdOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[22] = link; + _image_irSubGraph.links[25] = link; + + link = &_graphLinks[26]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::IrAwbStdOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[23] = link; + _image_irSubGraph.links[26] = link; + + link = &_graphLinks[27]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::IrAwbSatOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[24] = link; + _image_irSubGraph.links[27] = link; + + link = &_graphLinks[28]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::IrMp; + link->type = LinkType::Node2Sink; + _irSubGraph.links[25] = link; + _image_irSubGraph.links[28] = link; + + for (uint8_t i = 0; i < 29; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffRgbIrWithGmvNoTnrWithSapOuterNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + _irSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _irSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _irSubGraph.lbffRgbIrWithGmvNoTnrWithSapOuterNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + _irSubGraph.lbffRgbIrIrNoGmvNoTnrNoSapOuterNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + _image_irSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _image_irSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _image_irSubGraph.lbffRgbIrWithGmvNoTnrWithSapOuterNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + _image_irSubGraph.swGdcOuterNode = &_swGdcOuterNode; + _image_irSubGraph.lbffRgbIrIrNoGmvNoTnrNoSapOuterNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + + // choose the selected sub graph + if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.video != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.stills != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.thumbnail != static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.previewIr == static_cast(HwSink::Disconnected))) + { + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffRgbIrWithGmvNoTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + } + else if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.video == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.stills == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.thumbnail == static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.previewIr != static_cast(HwSink::Disconnected))) + { + _selectedGraphTopology = &_irSubGraph; + + // logical node IDs + _irSubGraph.isysWithCvOuterNode->contextId = 0; + _irSubGraph.swSegnetOuterNode->contextId = 1; + _irSubGraph.lbffRgbIrWithGmvNoTnrWithSapOuterNode->contextId = 2; + _irSubGraph.lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->contextId = 3; + } + else if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.video != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.stills != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.thumbnail != static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.previewIr != static_cast(HwSink::Disconnected))) + { + _selectedGraphTopology = &_image_irSubGraph; + + // logical node IDs + _image_irSubGraph.isysWithCvOuterNode->contextId = 0; + _image_irSubGraph.swSegnetOuterNode->contextId = 1; + _image_irSubGraph.lbffRgbIrWithGmvNoTnrWithSapOuterNode->contextId = 2; + _image_irSubGraph.swGdcOuterNode->contextId = 3; + _image_irSubGraph.lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->contextId = 4; + } + else + { + STATIC_GRAPH_LOG("Didn't found a matching sub graph for the selected virtual sinks."); + } + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100121::~StaticGraph100121() +{ +} + +StaticGraphStatus imageSubGraphTopology100121::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffRgbIrWithGmvNoTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrWithGmvNoTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrWithGmvNoTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && + subGraphLinks[19]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrWithGmvNoTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[18]->linkConfiguration->bufferSize == 0 && + subGraphLinks[20]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrWithGmvNoTnrWithSapInnerOptions |= noDp; + } + // always active private inner options + lbffRgbIrWithGmvNoTnrWithSapInnerOptions |= (noIr); + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrWithGmvNoTnrWithSapOuterNode->setInnerNode(lbffRgbIrWithGmvNoTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[10]->isActive = !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[11]->isActive = !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[12]->isActive = !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[13]->isActive = !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[14]->isActive = !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[17]->isActive = !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & noMp); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[19]->isActive = !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & noMp); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[18]->isActive = !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & noDp); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[20]->isActive = !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & noDp); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 22; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[15]->isActive = (lbffRgbIrWithGmvNoTnrWithSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_gmv_feature_output -> lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_gmv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmapsNotVanished = lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100121::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[5]->isActive == false) + { + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x300000; // Run kernel ids 20 (ifd_segmap_bnlm_1_4) and 21 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[6]->isActive == false) + { + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0xC000000; // Run kernel ids 26 (ifd_segmap_xnr_1_4) and 27 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0x180000000; // Run kernel ids 31 (ifd_segmap_acm_1_4) and 32 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0xC0000000000; // Run kernel ids 42 (ifd_segmap_cas_1_4) and 43 (smurf_cas_1_0) + } + + lbffRgbIrWithGmvNoTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus irSubGraphTopology100121::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags irPublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.irInnerOptions); + + /* + * Setting Node lbffRgbIrWithGmvNoTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrWithGmvNoTnrWithSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrWithGmvNoTnrWithSapInnerOptions |= (noPdaf); + // active public options according to sink mapping + if ( + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrWithGmvNoTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[18]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrWithGmvNoTnrWithSapInnerOptions |= noDp; + } + + /* + * Setting Node lbffRgbIrIrNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions |= (noPdaf | noDp | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[25]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions |= noMp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrWithGmvNoTnrWithSapOuterNode->setInnerNode(lbffRgbIrWithGmvNoTnrWithSapInnerOptions); + lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[10]->isActive = !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[11]->isActive = !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[12]->isActive = !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[13]->isActive = !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[14]->isActive = !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[17]->isActive = !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & noMp); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[18]->isActive = !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & noDp); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[21]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ir_ae_out + subGraphLinks[22]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> ir_af_std_out + subGraphLinks[23]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> ir_awb_std_out + subGraphLinks[24]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> ir_awb_sat_out + subGraphLinks[25]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & noMp); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> ir_mp + + /* + * Link enablement by private inner options + */ + subGraphLinks[20]->isActive = !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & noIr); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_ir_output -> lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_main_data_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 26; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[15]->isActive = (lbffRgbIrWithGmvNoTnrWithSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_gmv_feature_output -> lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_gmv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmapsNotVanished = lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps; + lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus irSubGraphTopology100121::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[5]->isActive == false) + { + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x300000; // Run kernel ids 20 (ifd_segmap_bnlm_1_4) and 21 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[6]->isActive == false) + { + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0xC000000; // Run kernel ids 26 (ifd_segmap_xnr_1_4) and 27 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0x180000000; // Run kernel ids 31 (ifd_segmap_acm_1_4) and 32 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0xC0000000000; // Run kernel ids 42 (ifd_segmap_cas_1_4) and 43 (smurf_cas_1_0) + } + + lbffRgbIrWithGmvNoTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus image_irSubGraphTopology100121::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + InnerNodeOptionsFlags irPublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.irInnerOptions); + + /* + * Setting Node lbffRgbIrWithGmvNoTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrWithGmvNoTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // active public inner options according to sink mapping + if ( + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && + subGraphLinks[19]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrWithGmvNoTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[18]->linkConfiguration->bufferSize == 0 && + subGraphLinks[20]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrWithGmvNoTnrWithSapInnerOptions |= noDp; + } + + /* + * Setting Node lbffRgbIrIrNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions |= (noPdaf | noDp | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[28]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions |= noMp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrWithGmvNoTnrWithSapOuterNode->setInnerNode(lbffRgbIrWithGmvNoTnrWithSapInnerOptions); + lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[10]->isActive = !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[11]->isActive = !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[12]->isActive = !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[13]->isActive = !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[14]->isActive = !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[17]->isActive = !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & noMp); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[19]->isActive = !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & noMp); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[18]->isActive = !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & noDp); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[20]->isActive = !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & noDp); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + subGraphLinks[24]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ir_ae_out + subGraphLinks[25]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> ir_af_std_out + subGraphLinks[26]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> ir_awb_std_out + subGraphLinks[27]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> ir_awb_sat_out + subGraphLinks[28]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & noMp); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> ir_mp + + /* + * Link enablement by private inner options + */ + subGraphLinks[23]->isActive = !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & noIr); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_ir_output -> lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_main_data_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 29; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[15]->isActive = (lbffRgbIrWithGmvNoTnrWithSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_gmv_feature_output -> lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_gmv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmapsNotVanished = lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps; + lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus image_irSubGraphTopology100121::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[5]->isActive == false) + { + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x300000; // Run kernel ids 20 (ifd_segmap_bnlm_1_4) and 21 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[6]->isActive == false) + { + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0xC000000; // Run kernel ids 26 (ifd_segmap_xnr_1_4) and 27 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0x180000000; // Run kernel ids 31 (ifd_segmap_acm_1_4) and 32 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0xC0000000000; // Run kernel ids 42 (ifd_segmap_cas_1_4) and 43 (smurf_cas_1_0) + } + + lbffRgbIrWithGmvNoTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100122 + */ +StaticGraph100122::StaticGraph100122(GraphConfiguration100122* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100122, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) + ,_irSubGraph(_sinkMappingConfiguration) + ,_image_irSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffRgbIrNoGmvWithTnrWithSapOuterNode.Init(&_graphConfiguration.lbffRgbIrNoGmvWithTnrWithSapOuterNodeConfiguration); + _lbffRgbIrIrNoGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffRgbIrIrNoGmvWithTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + _imageSubGraph.links[0] = link; + _irSubGraph.links[0] = link; + _image_irSubGraph.links[0] = link; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + _imageSubGraph.links[1] = link; + _irSubGraph.links[1] = link; + _image_irSubGraph.links[1] = link; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[2] = link; + _irSubGraph.links[2] = link; + _image_irSubGraph.links[2] = link; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + _imageSubGraph.links[3] = link; + _irSubGraph.links[3] = link; + _image_irSubGraph.links[3] = link; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + _imageSubGraph.links[4] = link; + _irSubGraph.links[4] = link; + _image_irSubGraph.links[4] = link; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + _imageSubGraph.links[5] = link; + _irSubGraph.links[5] = link; + _image_irSubGraph.links[5] = link; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + _imageSubGraph.links[6] = link; + _irSubGraph.links[6] = link; + _image_irSubGraph.links[6] = link; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + _imageSubGraph.links[7] = link; + _irSubGraph.links[7] = link; + _image_irSubGraph.links[7] = link; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + _imageSubGraph.links[8] = link; + _irSubGraph.links[8] = link; + _image_irSubGraph.links[8] = link; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + _imageSubGraph.links[9] = link; + _irSubGraph.links[9] = link; + _image_irSubGraph.links[9] = link; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + _imageSubGraph.links[10] = link; + _irSubGraph.links[10] = link; + _image_irSubGraph.links[10] = link; + + link = &_graphLinks[11]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + _imageSubGraph.links[11] = link; + _irSubGraph.links[11] = link; + _image_irSubGraph.links[11] = link; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[12] = link; + _irSubGraph.links[12] = link; + _image_irSubGraph.links[12] = link; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[13] = link; + _irSubGraph.links[13] = link; + _image_irSubGraph.links[13] = link; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[14] = link; + _irSubGraph.links[14] = link; + _image_irSubGraph.links[14] = link; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[15] = link; + _irSubGraph.links[15] = link; + _image_irSubGraph.links[15] = link; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[16] = link; + _irSubGraph.links[16] = link; + _image_irSubGraph.links[16] = link; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _imageSubGraph.links[17] = link; + _irSubGraph.links[17] = link; + _image_irSubGraph.links[17] = link; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _imageSubGraph.links[18] = link; + _irSubGraph.links[18] = link; + _image_irSubGraph.links[18] = link; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _imageSubGraph.links[19] = link; + _irSubGraph.links[19] = link; + _image_irSubGraph.links[19] = link; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[20] = link; + _irSubGraph.links[20] = link; + _image_irSubGraph.links[20] = link; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[21] = link; + _irSubGraph.links[21] = link; + _image_irSubGraph.links[21] = link; + + link = &_graphLinks[22]; + link->src = GraphElementType::LscBufferIr; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + _irSubGraph.links[22] = link; + _image_irSubGraph.links[22] = link; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 14; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + _irSubGraph.links[23] = link; + _image_irSubGraph.links[23] = link; + + link = &_graphLinks[24]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::IrAeOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[24] = link; + _image_irSubGraph.links[24] = link; + + link = &_graphLinks[25]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::IrAfStdOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[25] = link; + _image_irSubGraph.links[25] = link; + + link = &_graphLinks[26]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::IrAwbStdOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[26] = link; + _image_irSubGraph.links[26] = link; + + link = &_graphLinks[27]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::IrAwbSatOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[27] = link; + _image_irSubGraph.links[27] = link; + + link = &_graphLinks[28]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _irSubGraph.links[28] = link; + _image_irSubGraph.links[28] = link; + + link = &_graphLinks[29]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _irSubGraph.links[29] = link; + _image_irSubGraph.links[29] = link; + + link = &_graphLinks[30]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _irSubGraph.links[30] = link; + _image_irSubGraph.links[30] = link; + + link = &_graphLinks[31]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::IrMp; + link->type = LinkType::Node2Sink; + _irSubGraph.links[31] = link; + _image_irSubGraph.links[31] = link; + + for (uint8_t i = 0; i < 32; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffRgbIrNoGmvWithTnrWithSapOuterNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + _irSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _irSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _irSubGraph.lbffRgbIrNoGmvWithTnrWithSapOuterNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + _irSubGraph.lbffRgbIrIrNoGmvWithTnrNoSapOuterNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + _image_irSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _image_irSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _image_irSubGraph.lbffRgbIrNoGmvWithTnrWithSapOuterNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + _image_irSubGraph.lbffRgbIrIrNoGmvWithTnrNoSapOuterNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + + // choose the selected sub graph + if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.video != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.stills != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.thumbnail != static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.previewIr == static_cast(HwSink::Disconnected))) + { + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffRgbIrNoGmvWithTnrWithSapOuterNode->contextId = 2; + } + else if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.video == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.stills == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.thumbnail == static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.previewIr != static_cast(HwSink::Disconnected))) + { + _selectedGraphTopology = &_irSubGraph; + + // logical node IDs + _irSubGraph.isysWithCvOuterNode->contextId = 0; + _irSubGraph.swSegnetOuterNode->contextId = 1; + _irSubGraph.lbffRgbIrNoGmvWithTnrWithSapOuterNode->contextId = 2; + _irSubGraph.lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->contextId = 3; + } + else if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.video != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.stills != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.thumbnail != static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.previewIr != static_cast(HwSink::Disconnected))) + { + _selectedGraphTopology = &_image_irSubGraph; + + // logical node IDs + _image_irSubGraph.isysWithCvOuterNode->contextId = 0; + _image_irSubGraph.swSegnetOuterNode->contextId = 1; + _image_irSubGraph.lbffRgbIrNoGmvWithTnrWithSapOuterNode->contextId = 2; + _image_irSubGraph.lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->contextId = 3; + } + else + { + STATIC_GRAPH_LOG("Didn't found a matching sub graph for the selected virtual sinks."); + } + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100122::~StaticGraph100122() +{ +} + +StaticGraphStatus imageSubGraphTopology100122::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffRgbIrNoGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrNoGmvWithTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrNoGmvWithTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[20]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrNoGmvWithTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[21]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrNoGmvWithTnrWithSapInnerOptions |= noDp; + } + // always active private inner options + lbffRgbIrNoGmvWithTnrWithSapInnerOptions |= (noIr); + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrNoGmvWithTnrWithSapOuterNode->setInnerNode(lbffRgbIrNoGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[12]->isActive = !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[13]->isActive = !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[14]->isActive = !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[15]->isActive = !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[16]->isActive = !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[20]->isActive = !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & noMp); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[21]->isActive = !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & noDp); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 22; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[17]->isActive = (lbffRgbIrNoGmvWithTnrWithSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_blend_output -> lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[18]->isActive = (lbffRgbIrNoGmvWithTnrWithSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_bc_output -> lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[19]->isActive = (lbffRgbIrNoGmvWithTnrWithSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmapsNotVanished = lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100122::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[5]->isActive == false) + { + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0xC00000; // Run kernel ids 22 (ifd_segmap_bnlm_1_4) and 23 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[6]->isActive == false) + { + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0x30000000; // Run kernel ids 28 (ifd_segmap_xnr_1_4) and 29 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0x600000000; // Run kernel ids 33 (ifd_segmap_acm_1_4) and 34 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0xC0000000000000; // Run kernel ids 54 (ifd_segmap_cas_1_4) and 55 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[9]->isActive == false) + { + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= 0x180000000000; // Run kernel ids 43 (ifd_segmap_tnr_bc_1_4) and 44 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[10]->isActive == false) + { + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= 0x1800000000000; // Run kernel ids 47 (ifd_segmap_tnr_blend_1_4) and 48 (smurf_tnr_blend_1_0) + } + + lbffRgbIrNoGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus irSubGraphTopology100122::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags irPublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.irInnerOptions); + + /* + * Setting Node lbffRgbIrNoGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrNoGmvWithTnrWithSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrNoGmvWithTnrWithSapInnerOptions |= (noPdaf); + // active public options according to sink mapping + if ( + subGraphLinks[20]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrNoGmvWithTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[21]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrNoGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Setting Node lbffRgbIrIrNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noDp | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[31]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions |= noMp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrNoGmvWithTnrWithSapOuterNode->setInnerNode(lbffRgbIrNoGmvWithTnrWithSapInnerOptions); + lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[12]->isActive = !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[13]->isActive = !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[14]->isActive = !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[15]->isActive = !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[16]->isActive = !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[20]->isActive = !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & noMp); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[21]->isActive = !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & noDp); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[24]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ir_ae_out + subGraphLinks[25]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> ir_af_std_out + subGraphLinks[26]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> ir_awb_std_out + subGraphLinks[27]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> ir_awb_sat_out + subGraphLinks[31]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> ir_mp + + /* + * Link enablement by private inner options + */ + subGraphLinks[23]->isActive = !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & noIr); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_ir_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_main_data_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 32; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[17]->isActive = (lbffRgbIrNoGmvWithTnrWithSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_blend_output -> lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[18]->isActive = (lbffRgbIrNoGmvWithTnrWithSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_bc_output -> lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[19]->isActive = (lbffRgbIrNoGmvWithTnrWithSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + subGraphLinks[28]->isActive = (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[29]->isActive = (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[30]->isActive = (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmapsNotVanished = lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps; + lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus irSubGraphTopology100122::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[5]->isActive == false) + { + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0xC00000; // Run kernel ids 22 (ifd_segmap_bnlm_1_4) and 23 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[6]->isActive == false) + { + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0x30000000; // Run kernel ids 28 (ifd_segmap_xnr_1_4) and 29 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0x600000000; // Run kernel ids 33 (ifd_segmap_acm_1_4) and 34 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0xC0000000000000; // Run kernel ids 54 (ifd_segmap_cas_1_4) and 55 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[9]->isActive == false) + { + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= 0x180000000000; // Run kernel ids 43 (ifd_segmap_tnr_bc_1_4) and 44 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[10]->isActive == false) + { + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= 0x1800000000000; // Run kernel ids 47 (ifd_segmap_tnr_blend_1_4) and 48 (smurf_tnr_blend_1_0) + } + + lbffRgbIrNoGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus image_irSubGraphTopology100122::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + InnerNodeOptionsFlags irPublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.irInnerOptions); + + /* + * Setting Node lbffRgbIrNoGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrNoGmvWithTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // active public inner options according to sink mapping + if ( + subGraphLinks[20]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrNoGmvWithTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[21]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrNoGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Setting Node lbffRgbIrIrNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noDp | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[31]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions |= noMp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrNoGmvWithTnrWithSapOuterNode->setInnerNode(lbffRgbIrNoGmvWithTnrWithSapInnerOptions); + lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[12]->isActive = !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[13]->isActive = !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[14]->isActive = !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[15]->isActive = !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[16]->isActive = !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[20]->isActive = !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & noMp); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[21]->isActive = !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & noDp); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[24]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ir_ae_out + subGraphLinks[25]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> ir_af_std_out + subGraphLinks[26]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> ir_awb_std_out + subGraphLinks[27]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> ir_awb_sat_out + subGraphLinks[31]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> ir_mp + + /* + * Link enablement by private inner options + */ + subGraphLinks[23]->isActive = !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & noIr); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_ir_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_main_data_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 32; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[17]->isActive = (lbffRgbIrNoGmvWithTnrWithSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_blend_output -> lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[18]->isActive = (lbffRgbIrNoGmvWithTnrWithSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_bc_output -> lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[19]->isActive = (lbffRgbIrNoGmvWithTnrWithSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + subGraphLinks[28]->isActive = (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[29]->isActive = (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[30]->isActive = (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmapsNotVanished = lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps; + lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus image_irSubGraphTopology100122::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[5]->isActive == false) + { + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0xC00000; // Run kernel ids 22 (ifd_segmap_bnlm_1_4) and 23 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[6]->isActive == false) + { + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0x30000000; // Run kernel ids 28 (ifd_segmap_xnr_1_4) and 29 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0x600000000; // Run kernel ids 33 (ifd_segmap_acm_1_4) and 34 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0xC0000000000000; // Run kernel ids 54 (ifd_segmap_cas_1_4) and 55 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[9]->isActive == false) + { + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= 0x180000000000; // Run kernel ids 43 (ifd_segmap_tnr_bc_1_4) and 44 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[10]->isActive == false) + { + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= 0x1800000000000; // Run kernel ids 47 (ifd_segmap_tnr_blend_1_4) and 48 (smurf_tnr_blend_1_0) + } + + lbffRgbIrNoGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100123 + */ +StaticGraph100123::StaticGraph100123(GraphConfiguration100123* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100123, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) + ,_irSubGraph(_sinkMappingConfiguration) + ,_image_irSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffRgbIrWithGmvWithTnrWithSapOuterNode.Init(&_graphConfiguration.lbffRgbIrWithGmvWithTnrWithSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + _lbffRgbIrIrNoGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffRgbIrIrNoGmvWithTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + _imageSubGraph.links[0] = link; + _irSubGraph.links[0] = link; + _image_irSubGraph.links[0] = link; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + _imageSubGraph.links[1] = link; + _irSubGraph.links[1] = link; + _image_irSubGraph.links[1] = link; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[2] = link; + _irSubGraph.links[2] = link; + _image_irSubGraph.links[2] = link; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + _imageSubGraph.links[3] = link; + _irSubGraph.links[3] = link; + _image_irSubGraph.links[3] = link; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + _imageSubGraph.links[4] = link; + _irSubGraph.links[4] = link; + _image_irSubGraph.links[4] = link; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + _imageSubGraph.links[5] = link; + _irSubGraph.links[5] = link; + _image_irSubGraph.links[5] = link; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + _imageSubGraph.links[6] = link; + _irSubGraph.links[6] = link; + _image_irSubGraph.links[6] = link; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + _imageSubGraph.links[7] = link; + _irSubGraph.links[7] = link; + _image_irSubGraph.links[7] = link; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + _imageSubGraph.links[8] = link; + _irSubGraph.links[8] = link; + _image_irSubGraph.links[8] = link; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + _imageSubGraph.links[9] = link; + _irSubGraph.links[9] = link; + _image_irSubGraph.links[9] = link; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + _imageSubGraph.links[10] = link; + _irSubGraph.links[10] = link; + _image_irSubGraph.links[10] = link; + + link = &_graphLinks[11]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + _imageSubGraph.links[11] = link; + _irSubGraph.links[11] = link; + _image_irSubGraph.links[11] = link; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[12] = link; + _irSubGraph.links[12] = link; + _image_irSubGraph.links[12] = link; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[13] = link; + _irSubGraph.links[13] = link; + _image_irSubGraph.links[13] = link; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[14] = link; + _irSubGraph.links[14] = link; + _image_irSubGraph.links[14] = link; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[15] = link; + _irSubGraph.links[15] = link; + _image_irSubGraph.links[15] = link; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[16] = link; + _irSubGraph.links[16] = link; + _image_irSubGraph.links[16] = link; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _imageSubGraph.links[17] = link; + _irSubGraph.links[17] = link; + _image_irSubGraph.links[17] = link; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[18] = link; + _irSubGraph.links[18] = link; + _image_irSubGraph.links[18] = link; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _imageSubGraph.links[19] = link; + _irSubGraph.links[19] = link; + _image_irSubGraph.links[19] = link; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _imageSubGraph.links[20] = link; + _irSubGraph.links[20] = link; + _image_irSubGraph.links[20] = link; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _imageSubGraph.links[21] = link; + _irSubGraph.links[21] = link; + _image_irSubGraph.links[21] = link; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[22] = link; + _irSubGraph.links[22] = link; + _image_irSubGraph.links[22] = link; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[23] = link; + _irSubGraph.links[23] = link; + _image_irSubGraph.links[23] = link; + + link = &_graphLinks[24]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + _imageSubGraph.links[24] = link; + _image_irSubGraph.links[24] = link; + + link = &_graphLinks[25]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + _imageSubGraph.links[25] = link; + _image_irSubGraph.links[25] = link; + + link = &_graphLinks[26]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[26] = link; + _image_irSubGraph.links[26] = link; + + link = &_graphLinks[27]; + link->src = GraphElementType::LscBufferIr; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + _irSubGraph.links[24] = link; + _image_irSubGraph.links[27] = link; + + link = &_graphLinks[28]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 14; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + _irSubGraph.links[25] = link; + _image_irSubGraph.links[28] = link; + + link = &_graphLinks[29]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::IrAeOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[26] = link; + _image_irSubGraph.links[29] = link; + + link = &_graphLinks[30]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::IrAfStdOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[27] = link; + _image_irSubGraph.links[30] = link; + + link = &_graphLinks[31]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::IrAwbStdOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[28] = link; + _image_irSubGraph.links[31] = link; + + link = &_graphLinks[32]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::IrAwbSatOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[29] = link; + _image_irSubGraph.links[32] = link; + + link = &_graphLinks[33]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _irSubGraph.links[30] = link; + _image_irSubGraph.links[33] = link; + + link = &_graphLinks[34]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _irSubGraph.links[31] = link; + _image_irSubGraph.links[34] = link; + + link = &_graphLinks[35]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _irSubGraph.links[32] = link; + _image_irSubGraph.links[35] = link; + + link = &_graphLinks[36]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::IrMp; + link->type = LinkType::Node2Sink; + _irSubGraph.links[33] = link; + _image_irSubGraph.links[36] = link; + + for (uint8_t i = 0; i < 37; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffRgbIrWithGmvWithTnrWithSapOuterNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + _irSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _irSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _irSubGraph.lbffRgbIrWithGmvWithTnrWithSapOuterNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + _irSubGraph.lbffRgbIrIrNoGmvWithTnrNoSapOuterNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + _image_irSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _image_irSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _image_irSubGraph.lbffRgbIrWithGmvWithTnrWithSapOuterNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + _image_irSubGraph.swGdcOuterNode = &_swGdcOuterNode; + _image_irSubGraph.lbffRgbIrIrNoGmvWithTnrNoSapOuterNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + + // choose the selected sub graph + if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.video != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.stills != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.thumbnail != static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.previewIr == static_cast(HwSink::Disconnected))) + { + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffRgbIrWithGmvWithTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + } + else if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.video == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.stills == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.thumbnail == static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.previewIr != static_cast(HwSink::Disconnected))) + { + _selectedGraphTopology = &_irSubGraph; + + // logical node IDs + _irSubGraph.isysWithCvOuterNode->contextId = 0; + _irSubGraph.swSegnetOuterNode->contextId = 1; + _irSubGraph.lbffRgbIrWithGmvWithTnrWithSapOuterNode->contextId = 2; + _irSubGraph.lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->contextId = 3; + } + else if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.video != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.stills != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.thumbnail != static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.previewIr != static_cast(HwSink::Disconnected))) + { + _selectedGraphTopology = &_image_irSubGraph; + + // logical node IDs + _image_irSubGraph.isysWithCvOuterNode->contextId = 0; + _image_irSubGraph.swSegnetOuterNode->contextId = 1; + _image_irSubGraph.lbffRgbIrWithGmvWithTnrWithSapOuterNode->contextId = 2; + _image_irSubGraph.swGdcOuterNode->contextId = 3; + _image_irSubGraph.lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->contextId = 4; + } + else + { + STATIC_GRAPH_LOG("Didn't found a matching sub graph for the selected virtual sinks."); + } + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100123::~StaticGraph100123() +{ +} + +StaticGraphStatus imageSubGraphTopology100123::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffRgbIrWithGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrWithGmvWithTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrWithGmvWithTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[22]->linkConfiguration->bufferSize == 0 && + subGraphLinks[24]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrWithGmvWithTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[23]->linkConfiguration->bufferSize == 0 && + subGraphLinks[25]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrWithGmvWithTnrWithSapInnerOptions |= noDp; + } + // always active private inner options + lbffRgbIrWithGmvWithTnrWithSapInnerOptions |= (noIr); + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrWithGmvWithTnrWithSapOuterNode->setInnerNode(lbffRgbIrWithGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[12]->isActive = !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[13]->isActive = !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[14]->isActive = !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[15]->isActive = !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[16]->isActive = !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[22]->isActive = !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & noMp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[24]->isActive = !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & noMp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[23]->isActive = !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & noDp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[25]->isActive = !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & noDp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 27; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[17]->isActive = (lbffRgbIrWithGmvWithTnrWithSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_gmv_feature_output -> lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_gmv_input + subGraphLinks[19]->isActive = (lbffRgbIrWithGmvWithTnrWithSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_blend_output -> lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[20]->isActive = (lbffRgbIrWithGmvWithTnrWithSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_bc_output -> lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[21]->isActive = (lbffRgbIrWithGmvWithTnrWithSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmapsNotVanished = lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100123::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[5]->isActive == false) + { + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x1800000; // Run kernel ids 23 (ifd_segmap_bnlm_1_4) and 24 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[6]->isActive == false) + { + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0x60000000; // Run kernel ids 29 (ifd_segmap_xnr_1_4) and 30 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0xC00000000; // Run kernel ids 34 (ifd_segmap_acm_1_4) and 35 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0xC00000000000000; // Run kernel ids 58 (ifd_segmap_cas_1_4) and 59 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[9]->isActive == false) + { + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= 0x1800000000000; // Run kernel ids 47 (ifd_segmap_tnr_bc_1_4) and 48 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[10]->isActive == false) + { + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= 0x18000000000000; // Run kernel ids 51 (ifd_segmap_tnr_blend_1_4) and 52 (smurf_tnr_blend_1_0) + } + + lbffRgbIrWithGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus irSubGraphTopology100123::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags irPublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.irInnerOptions); + + /* + * Setting Node lbffRgbIrWithGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrWithGmvWithTnrWithSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrWithGmvWithTnrWithSapInnerOptions |= (noPdaf); + // active public options according to sink mapping + if ( + subGraphLinks[22]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrWithGmvWithTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[23]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrWithGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Setting Node lbffRgbIrIrNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noDp | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[33]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions |= noMp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrWithGmvWithTnrWithSapOuterNode->setInnerNode(lbffRgbIrWithGmvWithTnrWithSapInnerOptions); + lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[12]->isActive = !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[13]->isActive = !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[14]->isActive = !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[15]->isActive = !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[16]->isActive = !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[22]->isActive = !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & noMp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[23]->isActive = !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & noDp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[26]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ir_ae_out + subGraphLinks[27]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> ir_af_std_out + subGraphLinks[28]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> ir_awb_std_out + subGraphLinks[29]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> ir_awb_sat_out + subGraphLinks[33]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> ir_mp + + /* + * Link enablement by private inner options + */ + subGraphLinks[25]->isActive = !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & noIr); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_ir_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_main_data_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 34; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[17]->isActive = (lbffRgbIrWithGmvWithTnrWithSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_gmv_feature_output -> lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_gmv_input + subGraphLinks[19]->isActive = (lbffRgbIrWithGmvWithTnrWithSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_blend_output -> lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[20]->isActive = (lbffRgbIrWithGmvWithTnrWithSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_bc_output -> lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[21]->isActive = (lbffRgbIrWithGmvWithTnrWithSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + subGraphLinks[30]->isActive = (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[31]->isActive = (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[32]->isActive = (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmapsNotVanished = lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps; + lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus irSubGraphTopology100123::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[5]->isActive == false) + { + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x1800000; // Run kernel ids 23 (ifd_segmap_bnlm_1_4) and 24 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[6]->isActive == false) + { + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0x60000000; // Run kernel ids 29 (ifd_segmap_xnr_1_4) and 30 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0xC00000000; // Run kernel ids 34 (ifd_segmap_acm_1_4) and 35 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0xC00000000000000; // Run kernel ids 58 (ifd_segmap_cas_1_4) and 59 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[9]->isActive == false) + { + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= 0x1800000000000; // Run kernel ids 47 (ifd_segmap_tnr_bc_1_4) and 48 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[10]->isActive == false) + { + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= 0x18000000000000; // Run kernel ids 51 (ifd_segmap_tnr_blend_1_4) and 52 (smurf_tnr_blend_1_0) + } + + lbffRgbIrWithGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus image_irSubGraphTopology100123::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + InnerNodeOptionsFlags irPublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.irInnerOptions); + + /* + * Setting Node lbffRgbIrWithGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrWithGmvWithTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // active public inner options according to sink mapping + if ( + subGraphLinks[22]->linkConfiguration->bufferSize == 0 && + subGraphLinks[24]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrWithGmvWithTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[23]->linkConfiguration->bufferSize == 0 && + subGraphLinks[25]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrWithGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Setting Node lbffRgbIrIrNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noDp | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[36]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions |= noMp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrWithGmvWithTnrWithSapOuterNode->setInnerNode(lbffRgbIrWithGmvWithTnrWithSapInnerOptions); + lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[12]->isActive = !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[13]->isActive = !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[14]->isActive = !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[15]->isActive = !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[16]->isActive = !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[22]->isActive = !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & noMp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[24]->isActive = !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & noMp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[23]->isActive = !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & noDp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[25]->isActive = !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & noDp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + subGraphLinks[29]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ir_ae_out + subGraphLinks[30]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> ir_af_std_out + subGraphLinks[31]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> ir_awb_std_out + subGraphLinks[32]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> ir_awb_sat_out + subGraphLinks[36]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> ir_mp + + /* + * Link enablement by private inner options + */ + subGraphLinks[28]->isActive = !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & noIr); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_ir_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_main_data_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 37; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[17]->isActive = (lbffRgbIrWithGmvWithTnrWithSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_gmv_feature_output -> lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_gmv_input + subGraphLinks[19]->isActive = (lbffRgbIrWithGmvWithTnrWithSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_blend_output -> lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[20]->isActive = (lbffRgbIrWithGmvWithTnrWithSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_bc_output -> lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[21]->isActive = (lbffRgbIrWithGmvWithTnrWithSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + subGraphLinks[33]->isActive = (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[34]->isActive = (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[35]->isActive = (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmapsNotVanished = lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps; + lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus image_irSubGraphTopology100123::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[5]->isActive == false) + { + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x1800000; // Run kernel ids 23 (ifd_segmap_bnlm_1_4) and 24 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[6]->isActive == false) + { + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0x60000000; // Run kernel ids 29 (ifd_segmap_xnr_1_4) and 30 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0xC00000000; // Run kernel ids 34 (ifd_segmap_acm_1_4) and 35 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0xC00000000000000; // Run kernel ids 58 (ifd_segmap_cas_1_4) and 59 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[9]->isActive == false) + { + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= 0x1800000000000; // Run kernel ids 47 (ifd_segmap_tnr_bc_1_4) and 48 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[10]->isActive == false) + { + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= 0x18000000000000; // Run kernel ids 51 (ifd_segmap_tnr_blend_1_4) and 52 (smurf_tnr_blend_1_0) + } + + lbffRgbIrWithGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100127 + */ +StaticGraph100127::StaticGraph100127(GraphConfiguration100127* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100127, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffIrNoGmvNoTnrWithSapOuterNode.Init(&_graphConfiguration.lbffIrNoGmvNoTnrWithSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffIrNoGmvNoTnrWithSap; + link->destNode = &_lbffIrNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffIrNoGmvNoTnrWithSap; + link->destNode = &_lbffIrNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffIrNoGmvNoTnrWithSap; + link->destNode = &_lbffIrNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffIrNoGmvNoTnrWithSap; + link->destNode = &_lbffIrNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffIrNoGmvNoTnrWithSap; + link->destNode = &_lbffIrNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffIrNoGmvNoTnrWithSap; + link->srcNode = &_lbffIrNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffIrNoGmvNoTnrWithSap; + link->srcNode = &_lbffIrNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffIrNoGmvNoTnrWithSap; + link->srcNode = &_lbffIrNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffIrNoGmvNoTnrWithSap; + link->srcNode = &_lbffIrNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffIrNoGmvNoTnrWithSap; + link->srcNode = &_lbffIrNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffIrNoGmvNoTnrWithSap; + link->srcNode = &_lbffIrNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 15; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffIrNoGmvNoTnrWithSapOuterNode = &_lbffIrNoGmvNoTnrWithSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffIrNoGmvNoTnrWithSapOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100127::~StaticGraph100127() +{ +} + +StaticGraphStatus imageSubGraphTopology100127::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffIrNoGmvNoTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffIrNoGmvNoTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffIrNoGmvNoTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + true) + { + lbffIrNoGmvNoTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + true) + { + lbffIrNoGmvNoTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffIrNoGmvNoTnrWithSapOuterNode->setInnerNode(lbffIrNoGmvNoTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[9]->isActive = !(lbffIrNoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Ir_NoGmv_NoTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[10]->isActive = !(lbffIrNoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Ir_NoGmv_NoTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[11]->isActive = !(lbffIrNoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Ir_NoGmv_NoTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[12]->isActive = !(lbffIrNoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Ir_NoGmv_NoTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[13]->isActive = !(lbffIrNoGmvNoTnrWithSapInnerOptions & noMp); // lbff_Ir_NoGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[14]->isActive = !(lbffIrNoGmvNoTnrWithSapInnerOptions & noDp); // lbff_Ir_NoGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 15; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffIrNoGmvNoTnrWithSapOuterNode->bitmapsNotVanished = lbffIrNoGmvNoTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100127::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[5]->isActive == false) + { + lbffIrNoGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x30000; // Run kernel ids 16 (ifd_segmap_bnlm_1_4) and 17 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[6]->isActive == false) + { + lbffIrNoGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0xC00000; // Run kernel ids 22 (ifd_segmap_xnr_1_4) and 23 (smurf_xnr_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffIrNoGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x600000000; // Run kernel ids 33 (ifd_segmap_cas_1_4) and 34 (smurf_cas_1_0) + } + + lbffIrNoGmvNoTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100128 + */ +StaticGraph100128::StaticGraph100128(GraphConfiguration100128* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100128, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffIrWithGmvNoTnrWithSapOuterNode.Init(&_graphConfiguration.lbffIrWithGmvNoTnrWithSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffIrWithGmvNoTnrWithSap; + link->destNode = &_lbffIrWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffIrWithGmvNoTnrWithSap; + link->destNode = &_lbffIrWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffIrWithGmvNoTnrWithSap; + link->destNode = &_lbffIrWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffIrWithGmvNoTnrWithSap; + link->destNode = &_lbffIrWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffIrWithGmvNoTnrWithSap; + link->destNode = &_lbffIrWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffIrWithGmvNoTnrWithSap; + link->destNode = &_lbffIrWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[19]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 20; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffIrWithGmvNoTnrWithSapOuterNode = &_lbffIrWithGmvNoTnrWithSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffIrWithGmvNoTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100128::~StaticGraph100128() +{ +} + +StaticGraphStatus imageSubGraphTopology100128::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffIrWithGmvNoTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffIrWithGmvNoTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffIrWithGmvNoTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && + true) + { + lbffIrWithGmvNoTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + subGraphLinks[18]->linkConfiguration->bufferSize == 0 && + true) + { + lbffIrWithGmvNoTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffIrWithGmvNoTnrWithSapOuterNode->setInnerNode(lbffIrWithGmvNoTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[9]->isActive = !(lbffIrWithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Ir_WithGmv_NoTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[10]->isActive = !(lbffIrWithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Ir_WithGmv_NoTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[11]->isActive = !(lbffIrWithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Ir_WithGmv_NoTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[12]->isActive = !(lbffIrWithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Ir_WithGmv_NoTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[15]->isActive = !(lbffIrWithGmvNoTnrWithSapInnerOptions & noMp); // lbff_Ir_WithGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[17]->isActive = !(lbffIrWithGmvNoTnrWithSapInnerOptions & noMp); // lbff_Ir_WithGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[16]->isActive = !(lbffIrWithGmvNoTnrWithSapInnerOptions & noDp); // lbff_Ir_WithGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[18]->isActive = !(lbffIrWithGmvNoTnrWithSapInnerOptions & noDp); // lbff_Ir_WithGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 20; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[13]->isActive = (lbffIrWithGmvNoTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Ir_WithGmv_NoTnr_WithSap:terminal_connect_gmv_feature_output -> lbff_Ir_WithGmv_NoTnr_WithSap:terminal_connect_gmv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffIrWithGmvNoTnrWithSapOuterNode->bitmapsNotVanished = lbffIrWithGmvNoTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100128::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[5]->isActive == false) + { + lbffIrWithGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x60000; // Run kernel ids 17 (ifd_segmap_bnlm_1_4) and 18 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[6]->isActive == false) + { + lbffIrWithGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0x1800000; // Run kernel ids 23 (ifd_segmap_xnr_1_4) and 24 (smurf_xnr_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffIrWithGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x6000000000; // Run kernel ids 37 (ifd_segmap_cas_1_4) and 38 (smurf_cas_1_0) + } + + lbffIrWithGmvNoTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100129 + */ +StaticGraph100129::StaticGraph100129(GraphConfiguration100129* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100129, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffIrNoGmvWithTnrWithSapOuterNode.Init(&_graphConfiguration.lbffIrNoGmvWithTnrWithSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffIrNoGmvWithTnrWithSap; + link->destNode = &_lbffIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffIrNoGmvWithTnrWithSap; + link->destNode = &_lbffIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffIrNoGmvWithTnrWithSap; + link->destNode = &_lbffIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffIrNoGmvWithTnrWithSap; + link->destNode = &_lbffIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffIrNoGmvWithTnrWithSap; + link->destNode = &_lbffIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffIrNoGmvWithTnrWithSap; + link->destNode = &_lbffIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffIrNoGmvWithTnrWithSap; + link->destNode = &_lbffIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffIrNoGmvWithTnrWithSap; + link->srcNode = &_lbffIrNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffIrNoGmvWithTnrWithSap; + link->srcNode = &_lbffIrNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffIrNoGmvWithTnrWithSap; + link->srcNode = &_lbffIrNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffIrNoGmvWithTnrWithSap; + link->srcNode = &_lbffIrNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffIrNoGmvWithTnrWithSap; + link->srcNode = &_lbffIrNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffIrNoGmvWithTnrWithSap; + link->destNode = &_lbffIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffIrNoGmvWithTnrWithSap; + link->srcNode = &_lbffIrNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffIrNoGmvWithTnrWithSap; + link->destNode = &_lbffIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffIrNoGmvWithTnrWithSap; + link->srcNode = &_lbffIrNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffIrNoGmvWithTnrWithSap; + link->destNode = &_lbffIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffIrNoGmvWithTnrWithSap; + link->srcNode = &_lbffIrNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffIrNoGmvWithTnrWithSap; + link->srcNode = &_lbffIrNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 20; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffIrNoGmvWithTnrWithSapOuterNode = &_lbffIrNoGmvWithTnrWithSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffIrNoGmvWithTnrWithSapOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100129::~StaticGraph100129() +{ +} + +StaticGraphStatus imageSubGraphTopology100129::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffIrNoGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffIrNoGmvWithTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffIrNoGmvWithTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[18]->linkConfiguration->bufferSize == 0 && + true) + { + lbffIrNoGmvWithTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[19]->linkConfiguration->bufferSize == 0 && + true) + { + lbffIrNoGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffIrNoGmvWithTnrWithSapOuterNode->setInnerNode(lbffIrNoGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[11]->isActive = !(lbffIrNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Ir_NoGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[12]->isActive = !(lbffIrNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Ir_NoGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[13]->isActive = !(lbffIrNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Ir_NoGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[14]->isActive = !(lbffIrNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Ir_NoGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[18]->isActive = !(lbffIrNoGmvWithTnrWithSapInnerOptions & noMp); // lbff_Ir_NoGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[19]->isActive = !(lbffIrNoGmvWithTnrWithSapInnerOptions & noDp); // lbff_Ir_NoGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 20; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[15]->isActive = (lbffIrNoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Ir_NoGmv_WithTnr_WithSap:terminal_connect_blend_output -> lbff_Ir_NoGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[16]->isActive = (lbffIrNoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Ir_NoGmv_WithTnr_WithSap:terminal_connect_bc_output -> lbff_Ir_NoGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[17]->isActive = (lbffIrNoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Ir_NoGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> lbff_Ir_NoGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffIrNoGmvWithTnrWithSapOuterNode->bitmapsNotVanished = lbffIrNoGmvWithTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100129::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[5]->isActive == false) + { + lbffIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x180000; // Run kernel ids 19 (ifd_segmap_bnlm_1_4) and 20 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[6]->isActive == false) + { + lbffIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0x6000000; // Run kernel ids 25 (ifd_segmap_xnr_1_4) and 26 (smurf_xnr_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x6000000000000; // Run kernel ids 49 (ifd_segmap_cas_1_4) and 50 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= 0xC000000000; // Run kernel ids 38 (ifd_segmap_tnr_bc_1_4) and 39 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[9]->isActive == false) + { + lbffIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= 0xC0000000000; // Run kernel ids 42 (ifd_segmap_tnr_blend_1_4) and 43 (smurf_tnr_blend_1_0) + } + + lbffIrNoGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100130 + */ +StaticGraph100130::StaticGraph100130(GraphConfiguration100130* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100130, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffIrWithGmvWithTnrWithSapOuterNode.Init(&_graphConfiguration.lbffIrWithGmvWithTnrWithSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->destNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->destNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->destNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->destNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->destNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->destNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->destNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->destNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->destNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->destNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->destNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[24]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 25; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffIrWithGmvWithTnrWithSapOuterNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffIrWithGmvWithTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100130::~StaticGraph100130() +{ +} + +StaticGraphStatus imageSubGraphTopology100130::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffIrWithGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffIrWithGmvWithTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffIrWithGmvWithTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[20]->linkConfiguration->bufferSize == 0 && + subGraphLinks[22]->linkConfiguration->bufferSize == 0 && + true) + { + lbffIrWithGmvWithTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[21]->linkConfiguration->bufferSize == 0 && + subGraphLinks[23]->linkConfiguration->bufferSize == 0 && + true) + { + lbffIrWithGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffIrWithGmvWithTnrWithSapOuterNode->setInnerNode(lbffIrWithGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[11]->isActive = !(lbffIrWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Ir_WithGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[12]->isActive = !(lbffIrWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Ir_WithGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[13]->isActive = !(lbffIrWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Ir_WithGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[14]->isActive = !(lbffIrWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Ir_WithGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[20]->isActive = !(lbffIrWithGmvWithTnrWithSapInnerOptions & noMp); // lbff_Ir_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[22]->isActive = !(lbffIrWithGmvWithTnrWithSapInnerOptions & noMp); // lbff_Ir_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[21]->isActive = !(lbffIrWithGmvWithTnrWithSapInnerOptions & noDp); // lbff_Ir_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[23]->isActive = !(lbffIrWithGmvWithTnrWithSapInnerOptions & noDp); // lbff_Ir_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 25; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[15]->isActive = (lbffIrWithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Ir_WithGmv_WithTnr_WithSap:terminal_connect_gmv_feature_output -> lbff_Ir_WithGmv_WithTnr_WithSap:terminal_connect_gmv_input + subGraphLinks[17]->isActive = (lbffIrWithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Ir_WithGmv_WithTnr_WithSap:terminal_connect_blend_output -> lbff_Ir_WithGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[18]->isActive = (lbffIrWithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Ir_WithGmv_WithTnr_WithSap:terminal_connect_bc_output -> lbff_Ir_WithGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[19]->isActive = (lbffIrWithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Ir_WithGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> lbff_Ir_WithGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffIrWithGmvWithTnrWithSapOuterNode->bitmapsNotVanished = lbffIrWithGmvWithTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100130::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[5]->isActive == false) + { + lbffIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x300000; // Run kernel ids 20 (ifd_segmap_bnlm_1_4) and 21 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[6]->isActive == false) + { + lbffIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0xC000000; // Run kernel ids 26 (ifd_segmap_xnr_1_4) and 27 (smurf_xnr_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x60000000000000; // Run kernel ids 53 (ifd_segmap_cas_1_4) and 54 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= 0xC0000000000; // Run kernel ids 42 (ifd_segmap_tnr_bc_1_4) and 43 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[9]->isActive == false) + { + lbffIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= 0xC00000000000; // Run kernel ids 46 (ifd_segmap_tnr_blend_1_4) and 47 (smurf_tnr_blend_1_0) + } + + lbffIrWithGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100131 + */ +StaticGraph100131::StaticGraph100131(GraphConfiguration100131* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100131, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 19; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 18; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100131::~StaticGraph100131() +{ +} + +StaticGraphStatus imageSubGraphTopology100131::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode->setInnerNode(lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[12]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[13]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[14]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[15]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[10]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapInnerOptions & noPdaf); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_WithSap:terminal_connect_pdaf_output -> pdaf_out + subGraphLinks[16]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[17]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 18; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[9]->isActive = (lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapInnerOptions & (no3A|noMp|noDp|noIr)) != (no3A|noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_WithSap:terminal_connect_dpc_pdaf_output -> lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_WithSap:terminal_connect_pdaf_data_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode->bitmapsNotVanished = lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100131::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[5]->isActive == false) + { + lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0xC00000; // Run kernel ids 22 (ifd_segmap_bnlm_1_4) and 23 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[6]->isActive == false) + { + lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0x30000000; // Run kernel ids 28 (ifd_segmap_xnr_1_4) and 29 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0x600000000; // Run kernel ids 33 (ifd_segmap_acm_1_4) and 34 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x60000000000; // Run kernel ids 41 (ifd_segmap_cas_1_4) and 42 (smurf_cas_1_0) + } + + lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100132 + */ +StaticGraph100132::StaticGraph100132(GraphConfiguration100132* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100132, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 19; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[22]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 23; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100132::~StaticGraph100132() +{ +} + +StaticGraphStatus imageSubGraphTopology100132::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[18]->linkConfiguration->bufferSize == 0 && + subGraphLinks[20]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[19]->linkConfiguration->bufferSize == 0 && + subGraphLinks[21]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode->setInnerNode(lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[12]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[13]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[14]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[15]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[10]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapInnerOptions & noPdaf); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_WithSap:terminal_connect_pdaf_output -> pdaf_out + subGraphLinks[18]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[20]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[19]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[21]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 23; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[9]->isActive = (lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapInnerOptions & (no3A|noMp|noDp|noIr)) != (no3A|noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_WithSap:terminal_connect_dpc_pdaf_output -> lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_WithSap:terminal_connect_pdaf_data_input + subGraphLinks[16]->isActive = (lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_WithSap:terminal_connect_gmv_feature_output -> lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_WithSap:terminal_connect_gmv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode->bitmapsNotVanished = lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100132::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[5]->isActive == false) + { + lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x1800000; // Run kernel ids 23 (ifd_segmap_bnlm_1_4) and 24 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[6]->isActive == false) + { + lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0x60000000; // Run kernel ids 29 (ifd_segmap_xnr_1_4) and 30 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0xC00000000; // Run kernel ids 34 (ifd_segmap_acm_1_4) and 35 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x600000000000; // Run kernel ids 45 (ifd_segmap_cas_1_4) and 46 (smurf_cas_1_0) + } + + lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100133 + */ +StaticGraph100133::StaticGraph100133(GraphConfiguration100133* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100133, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 19; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 23; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100133::~StaticGraph100133() +{ +} + +StaticGraphStatus imageSubGraphTopology100133::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[21]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[22]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->setInnerNode(lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[14]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[15]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[16]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[17]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[12]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & noPdaf); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_pdaf_output -> pdaf_out + subGraphLinks[21]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[22]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 23; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[11]->isActive = (lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & (no3A|noMp|noDp|noIr)) != (no3A|noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_dpc_pdaf_output -> lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_pdaf_data_input + subGraphLinks[18]->isActive = (lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_blend_output -> lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[19]->isActive = (lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_bc_output -> lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[20]->isActive = (lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmapsNotVanished = lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100133::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[5]->isActive == false) + { + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0x6000000; // Run kernel ids 25 (ifd_segmap_bnlm_1_4) and 26 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[6]->isActive == false) + { + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0x180000000; // Run kernel ids 31 (ifd_segmap_xnr_1_4) and 32 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0x3000000000; // Run kernel ids 36 (ifd_segmap_acm_1_4) and 37 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x600000000000000; // Run kernel ids 57 (ifd_segmap_cas_1_4) and 58 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[9]->isActive == false) + { + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= 0xC00000000000; // Run kernel ids 46 (ifd_segmap_tnr_bc_1_4) and 47 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[10]->isActive == false) + { + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= 0xC000000000000; // Run kernel ids 50 (ifd_segmap_tnr_blend_1_4) and 51 (smurf_tnr_blend_1_0) + } + + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100134 + */ +StaticGraph100134::StaticGraph100134(GraphConfiguration100134* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100134, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 19; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[24]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[25]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[26]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[27]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 28; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100134::~StaticGraph100134() +{ +} + +StaticGraphStatus imageSubGraphTopology100134::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[23]->linkConfiguration->bufferSize == 0 && + subGraphLinks[25]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions |= noMp; + } + if ( + subGraphLinks[24]->linkConfiguration->bufferSize == 0 && + subGraphLinks[26]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->setInnerNode(lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[14]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[15]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[16]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[17]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[12]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions & noPdaf); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_pdaf_output -> pdaf_out + subGraphLinks[23]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[25]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[24]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[26]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 28; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[11]->isActive = (lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions & (no3A|noMp|noDp|noIr)) != (no3A|noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_dpc_pdaf_output -> lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_pdaf_data_input + subGraphLinks[18]->isActive = (lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_gmv_feature_output -> lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_gmv_input + subGraphLinks[20]->isActive = (lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_blend_output -> lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[21]->isActive = (lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_bc_output -> lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[22]->isActive = (lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmapsNotVanished = lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100134::updateSegmentAwareKernels() +{ + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[5]->isActive == false) + { + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= 0xC000000; // Run kernel ids 26 (ifd_segmap_bnlm_1_4) and 27 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[6]->isActive == false) + { + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= 0x300000000; // Run kernel ids 32 (ifd_segmap_xnr_1_4) and 33 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[7]->isActive == false) + { + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= 0x6000000000; // Run kernel ids 37 (ifd_segmap_acm_1_4) and 38 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[8]->isActive == false) + { + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= 0x6000000000000000; // Run kernel ids 61 (ifd_segmap_cas_1_4) and 62 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[9]->isActive == false) + { + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= 0xC000000000000; // Run kernel ids 50 (ifd_segmap_tnr_bc_1_4) and 51 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[10]->isActive == false) + { + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= 0xC0000000000000; // Run kernel ids 54 (ifd_segmap_tnr_blend_1_4) and 55 (smurf_tnr_blend_1_0) + } + + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} +/* + * Graph 100235 + */ +StaticGraph100235::StaticGraph100235(GraphConfiguration100235* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100235, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _lbffBayerNoGmvNoTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerNoGmvNoTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->destNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->destNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 11; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.lbffBayerNoGmvNoTnrNoSapOuterNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.lbffBayerNoGmvNoTnrNoSapOuterNode->contextId = 1; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100235::~StaticGraph100235() +{ +} + +StaticGraphStatus imageSubGraphTopology100235::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerNoGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerNoGmvNoTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[9]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerNoGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[10]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerNoGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffBayerNoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[5]->isActive = !(lbffBayerNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[6]->isActive = !(lbffBayerNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[7]->isActive = !(lbffBayerNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[8]->isActive = !(lbffBayerNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[9]->isActive = !(lbffBayerNoGmvNoTnrNoSapInnerOptions & noMp); // lbff_Bayer_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[10]->isActive = !(lbffBayerNoGmvNoTnrNoSapInnerOptions & noDp); // lbff_Bayer_NoGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 11; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerNoGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerNoGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100236 + */ +StaticGraph100236::StaticGraph100236(GraphConfiguration100236* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100236, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _lbffBayerWithGmvNoTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerWithGmvNoTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->destNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->destNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->destNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[15]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 16; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.lbffBayerWithGmvNoTnrNoSapOuterNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.lbffBayerWithGmvNoTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100236::~StaticGraph100236() +{ +} + +StaticGraphStatus imageSubGraphTopology100236::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerWithGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerWithGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerWithGmvNoTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[11]->linkConfiguration->bufferSize == 0 && + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerWithGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerWithGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerWithGmvNoTnrNoSapOuterNode->setInnerNode(lbffBayerWithGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[5]->isActive = !(lbffBayerWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[6]->isActive = !(lbffBayerWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[7]->isActive = !(lbffBayerWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[8]->isActive = !(lbffBayerWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[11]->isActive = !(lbffBayerWithGmvNoTnrNoSapInnerOptions & noMp); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[13]->isActive = !(lbffBayerWithGmvNoTnrNoSapInnerOptions & noMp); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[12]->isActive = !(lbffBayerWithGmvNoTnrNoSapInnerOptions & noDp); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[14]->isActive = !(lbffBayerWithGmvNoTnrNoSapInnerOptions & noDp); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 16; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[9]->isActive = (lbffBayerWithGmvNoTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_gmv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerWithGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerWithGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100202 + */ +StaticGraph100202::StaticGraph100202(GraphConfiguration100202* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100202, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _lbffBayerNoGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerNoGmvWithTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 14; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.lbffBayerNoGmvWithTnrNoSapOuterNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.lbffBayerNoGmvWithTnrNoSapOuterNode->contextId = 1; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100202::~StaticGraph100202() +{ +} + +StaticGraphStatus imageSubGraphTopology100202::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerNoGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerNoGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerNoGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffBayerNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[5]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[6]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[7]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[8]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[12]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[13]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 14; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[9]->isActive = (lbffBayerNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[10]->isActive = (lbffBayerNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[11]->isActive = (lbffBayerNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerNoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerNoGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100203 + */ +StaticGraph100203::StaticGraph100203(GraphConfiguration100203* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100203, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _lbffBayerWithGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerWithGmvWithTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[18]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 19; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.lbffBayerWithGmvWithTnrNoSapOuterNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.lbffBayerWithGmvWithTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100203::~StaticGraph100203() +{ +} + +StaticGraphStatus imageSubGraphTopology100203::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerWithGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerWithGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerWithGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerWithGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerWithGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerWithGmvWithTnrNoSapOuterNode->setInnerNode(lbffBayerWithGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[5]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[6]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[7]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[8]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[14]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[16]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[15]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[17]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 19; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[9]->isActive = (lbffBayerWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_gmv_input + subGraphLinks[11]->isActive = (lbffBayerWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[12]->isActive = (lbffBayerWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[13]->isActive = (lbffBayerWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerWithGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerWithGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100279 + */ +StaticGraph100279::StaticGraph100279(GraphConfiguration100279* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100279, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _lbffBayerNoGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerNoGmvWithTnrNoSapOuterNodeConfiguration); + _swNntmOuterNode.Init(&_graphConfiguration.swNntmOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[16]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[18]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 19; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.lbffBayerNoGmvWithTnrNoSapOuterNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + _imageSubGraph.swNntmOuterNode = &_swNntmOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.lbffBayerNoGmvWithTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swNntmOuterNode->contextId = 2; + _imageSubGraph.swScalerOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100279::~StaticGraph100279() +{ +} + +StaticGraphStatus imageSubGraphTopology100279::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerNoGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerNoGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerNoGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffBayerNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[5]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[6]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[7]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[8]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[12]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[14]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> sw_nntm:terminal_connect_input + subGraphLinks[13]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[15]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> sw_nntm:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 19; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[9]->isActive = (lbffBayerNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[10]->isActive = (lbffBayerNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[11]->isActive = (lbffBayerNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerNoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerNoGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100280 + */ +StaticGraph100280::StaticGraph100280(GraphConfiguration100280* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100280, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _lbffBayerNoGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerNoGmvWithTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[16]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[18]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 19; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.lbffBayerNoGmvWithTnrNoSapOuterNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.lbffBayerNoGmvWithTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + _imageSubGraph.swScalerOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100280::~StaticGraph100280() +{ +} + +StaticGraphStatus imageSubGraphTopology100280::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerNoGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerNoGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerNoGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffBayerNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[5]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[6]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[7]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[8]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[12]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[14]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[13]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[15]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 19; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[9]->isActive = (lbffBayerNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[10]->isActive = (lbffBayerNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[11]->isActive = (lbffBayerNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerNoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerNoGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100281 + */ +StaticGraph100281::StaticGraph100281(GraphConfiguration100281* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100281, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _lbffBayerWithGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerWithGmvWithTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[18]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[20]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 21; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.lbffBayerWithGmvWithTnrNoSapOuterNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.lbffBayerWithGmvWithTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + _imageSubGraph.swScalerOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100281::~StaticGraph100281() +{ +} + +StaticGraphStatus imageSubGraphTopology100281::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerWithGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerWithGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerWithGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerWithGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerWithGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerWithGmvWithTnrNoSapOuterNode->setInnerNode(lbffBayerWithGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[5]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[6]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[7]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[8]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[14]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[16]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[15]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[17]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 21; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[9]->isActive = (lbffBayerWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_gmv_input + subGraphLinks[11]->isActive = (lbffBayerWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[12]->isActive = (lbffBayerWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[13]->isActive = (lbffBayerWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerWithGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerWithGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100204 + */ +StaticGraph100204::StaticGraph100204(GraphConfiguration100204* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100204, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysPdaf2WithCvOuterNode.Init(&_graphConfiguration.isysPdaf2WithCvOuterNodeConfiguration); + _lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf2NoGmvNoTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::PdafBuffer; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 7; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 14; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysPdaf2WithCvOuterNode = &_isysPdaf2WithCvOuterNode; + _imageSubGraph.lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode = &_lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysPdaf2WithCvOuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode->contextId = 1; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100204::~StaticGraph100204() +{ +} + +StaticGraphStatus imageSubGraphTopology100204::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf2NoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf2NoGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf2NoGmvNoTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2NoGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2NoGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode->setInnerNode(lbffBayerPdaf2NoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[8]->isActive = !(lbffBayerPdaf2NoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[9]->isActive = !(lbffBayerPdaf2NoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[10]->isActive = !(lbffBayerPdaf2NoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[11]->isActive = !(lbffBayerPdaf2NoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[12]->isActive = !(lbffBayerPdaf2NoGmvNoTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf2_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[13]->isActive = !(lbffBayerPdaf2NoGmvNoTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf2_NoGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 14; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100205 + */ +StaticGraph100205::StaticGraph100205(GraphConfiguration100205* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100205, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysPdaf2WithCvOuterNode.Init(&_graphConfiguration.isysPdaf2WithCvOuterNodeConfiguration); + _lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf2WithGmvNoTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::PdafBuffer; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 7; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[18]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 19; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysPdaf2WithCvOuterNode = &_isysPdaf2WithCvOuterNode; + _imageSubGraph.lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysPdaf2WithCvOuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100205::~StaticGraph100205() +{ +} + +StaticGraphStatus imageSubGraphTopology100205::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf2WithGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf2WithGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf2WithGmvNoTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2WithGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2WithGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode->setInnerNode(lbffBayerPdaf2WithGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[8]->isActive = !(lbffBayerPdaf2WithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[9]->isActive = !(lbffBayerPdaf2WithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[10]->isActive = !(lbffBayerPdaf2WithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[11]->isActive = !(lbffBayerPdaf2WithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[14]->isActive = !(lbffBayerPdaf2WithGmvNoTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[16]->isActive = !(lbffBayerPdaf2WithGmvNoTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[15]->isActive = !(lbffBayerPdaf2WithGmvNoTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[17]->isActive = !(lbffBayerPdaf2WithGmvNoTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 19; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[12]->isActive = (lbffBayerPdaf2WithGmvNoTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_Bayer_Pdaf2_WithGmv_NoTnr_NoSap:terminal_connect_gmv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100206 + */ +StaticGraph100206::StaticGraph100206(GraphConfiguration100206* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100206, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysPdaf2WithCvOuterNode.Init(&_graphConfiguration.isysPdaf2WithCvOuterNodeConfiguration); + _lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf2NoGmvWithTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::PdafBuffer; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 7; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 17; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysPdaf2WithCvOuterNode = &_isysPdaf2WithCvOuterNode; + _imageSubGraph.lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysPdaf2WithCvOuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode->contextId = 1; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100206::~StaticGraph100206() +{ +} + +StaticGraphStatus imageSubGraphTopology100206::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf2NoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode->setInnerNode(lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[8]->isActive = !(lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[9]->isActive = !(lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[10]->isActive = !(lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[11]->isActive = !(lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[15]->isActive = !(lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[16]->isActive = !(lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 17; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[12]->isActive = (lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[13]->isActive = (lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[14]->isActive = (lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100266 + */ +StaticGraph100266::StaticGraph100266(GraphConfiguration100266* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100266, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysPdaf2WithCvOuterNode.Init(&_graphConfiguration.isysPdaf2WithCvOuterNodeConfiguration); + _lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf2NoGmvWithTnrNoSapOuterNodeConfiguration); + _swNntmOuterNode.Init(&_graphConfiguration.swNntmOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::PdafBuffer; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 7; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[19]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[20]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[21]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 22; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysPdaf2WithCvOuterNode = &_isysPdaf2WithCvOuterNode; + _imageSubGraph.lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + _imageSubGraph.swNntmOuterNode = &_swNntmOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysPdaf2WithCvOuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swNntmOuterNode->contextId = 2; + _imageSubGraph.swScalerOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100266::~StaticGraph100266() +{ +} + +StaticGraphStatus imageSubGraphTopology100266::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf2NoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + subGraphLinks[18]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode->setInnerNode(lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[8]->isActive = !(lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[9]->isActive = !(lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[10]->isActive = !(lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[11]->isActive = !(lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[15]->isActive = !(lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[17]->isActive = !(lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> sw_nntm:terminal_connect_input + subGraphLinks[16]->isActive = !(lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[18]->isActive = !(lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> sw_nntm:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 22; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[12]->isActive = (lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[13]->isActive = (lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[14]->isActive = (lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100207 + */ +StaticGraph100207::StaticGraph100207(GraphConfiguration100207* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100207, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysPdaf2WithCvOuterNode.Init(&_graphConfiguration.isysPdaf2WithCvOuterNodeConfiguration); + _lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf2WithGmvWithTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::PdafBuffer; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 7; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[21]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 22; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysPdaf2WithCvOuterNode = &_isysPdaf2WithCvOuterNode; + _imageSubGraph.lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysPdaf2WithCvOuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100207::~StaticGraph100207() +{ +} + +StaticGraphStatus imageSubGraphTopology100207::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf2WithGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && + subGraphLinks[19]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[18]->linkConfiguration->bufferSize == 0 && + subGraphLinks[20]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode->setInnerNode(lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[8]->isActive = !(lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[9]->isActive = !(lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[10]->isActive = !(lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[11]->isActive = !(lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[17]->isActive = !(lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[19]->isActive = !(lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[18]->isActive = !(lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[20]->isActive = !(lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 22; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[12]->isActive = (lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_gmv_input + subGraphLinks[14]->isActive = (lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[15]->isActive = (lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[16]->isActive = (lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100267 + */ +StaticGraph100267::StaticGraph100267(GraphConfiguration100267* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100267, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysPdaf2WithCvOuterNode.Init(&_graphConfiguration.isysPdaf2WithCvOuterNodeConfiguration); + _lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf2WithGmvWithTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + _swNntmOuterNode.Init(&_graphConfiguration.swNntmOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::PdafBuffer; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 7; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[21]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[22]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[23]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[24]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 25; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysPdaf2WithCvOuterNode = &_isysPdaf2WithCvOuterNode; + _imageSubGraph.lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + _imageSubGraph.swNntmOuterNode = &_swNntmOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysPdaf2WithCvOuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + _imageSubGraph.swNntmOuterNode->contextId = 3; + _imageSubGraph.swScalerOuterNode->contextId = 4; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100267::~StaticGraph100267() +{ +} + +StaticGraphStatus imageSubGraphTopology100267::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf2WithGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && + subGraphLinks[19]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[18]->linkConfiguration->bufferSize == 0 && + subGraphLinks[20]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode->setInnerNode(lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[8]->isActive = !(lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[9]->isActive = !(lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[10]->isActive = !(lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[11]->isActive = !(lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[17]->isActive = !(lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[19]->isActive = !(lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[18]->isActive = !(lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[20]->isActive = !(lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 25; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[12]->isActive = (lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_gmv_input + subGraphLinks[14]->isActive = (lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[15]->isActive = (lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[16]->isActive = (lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100208 + */ +StaticGraph100208::StaticGraph100208(GraphConfiguration100208* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100208, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf3NoGmvNoTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 12; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode = &_lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode->contextId = 1; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100208::~StaticGraph100208() +{ +} + +StaticGraphStatus imageSubGraphTopology100208::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3NoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3NoGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3NoGmvNoTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[10]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3NoGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[11]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3NoGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode->setInnerNode(lbffBayerPdaf3NoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[6]->isActive = !(lbffBayerPdaf3NoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[7]->isActive = !(lbffBayerPdaf3NoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[8]->isActive = !(lbffBayerPdaf3NoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[9]->isActive = !(lbffBayerPdaf3NoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[10]->isActive = !(lbffBayerPdaf3NoGmvNoTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf3_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[11]->isActive = !(lbffBayerPdaf3NoGmvNoTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf3_NoGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 12; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100209 + */ +StaticGraph100209::StaticGraph100209(GraphConfiguration100209* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100209, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf3WithGmvNoTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[16]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 17; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100209::~StaticGraph100209() +{ +} + +StaticGraphStatus imageSubGraphTopology100209::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3WithGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3WithGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3WithGmvNoTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3WithGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3WithGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode->setInnerNode(lbffBayerPdaf3WithGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[6]->isActive = !(lbffBayerPdaf3WithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[7]->isActive = !(lbffBayerPdaf3WithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[8]->isActive = !(lbffBayerPdaf3WithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[9]->isActive = !(lbffBayerPdaf3WithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[12]->isActive = !(lbffBayerPdaf3WithGmvNoTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[14]->isActive = !(lbffBayerPdaf3WithGmvNoTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[13]->isActive = !(lbffBayerPdaf3WithGmvNoTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[15]->isActive = !(lbffBayerPdaf3WithGmvNoTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 17; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[10]->isActive = (lbffBayerPdaf3WithGmvNoTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_Bayer_Pdaf3_WithGmv_NoTnr_NoSap:terminal_connect_gmv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100210 + */ +StaticGraph100210::StaticGraph100210(GraphConfiguration100210* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100210, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf3NoGmvWithTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 15; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode->contextId = 1; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100210::~StaticGraph100210() +{ +} + +StaticGraphStatus imageSubGraphTopology100210::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3NoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode->setInnerNode(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[6]->isActive = !(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[7]->isActive = !(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[8]->isActive = !(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[9]->isActive = !(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[13]->isActive = !(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[14]->isActive = !(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 15; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[10]->isActive = (lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[11]->isActive = (lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[12]->isActive = (lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100211 + */ +StaticGraph100211::StaticGraph100211(GraphConfiguration100211* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100211, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf3WithGmvWithTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[19]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 20; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100211::~StaticGraph100211() +{ +} + +StaticGraphStatus imageSubGraphTopology100211::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3WithGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + subGraphLinks[18]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode->setInnerNode(lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[6]->isActive = !(lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[7]->isActive = !(lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[8]->isActive = !(lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[9]->isActive = !(lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[15]->isActive = !(lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[17]->isActive = !(lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[16]->isActive = !(lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[18]->isActive = !(lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 20; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[10]->isActive = (lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_gmv_input + subGraphLinks[12]->isActive = (lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[13]->isActive = (lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[14]->isActive = (lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100245 + */ +StaticGraph100245::StaticGraph100245(GraphConfiguration100245* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100245, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf3NoGmvWithTnrNoSapOuterNodeConfiguration); + _swNntmOuterNode.Init(&_graphConfiguration.swNntmOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[17]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[19]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 20; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + _imageSubGraph.swNntmOuterNode = &_swNntmOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swNntmOuterNode->contextId = 2; + _imageSubGraph.swScalerOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100245::~StaticGraph100245() +{ +} + +StaticGraphStatus imageSubGraphTopology100245::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3NoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode->setInnerNode(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[6]->isActive = !(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[7]->isActive = !(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[8]->isActive = !(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[9]->isActive = !(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[13]->isActive = !(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[15]->isActive = !(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> sw_nntm:terminal_connect_input + subGraphLinks[14]->isActive = !(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[16]->isActive = !(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> sw_nntm:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 20; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[10]->isActive = (lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[11]->isActive = (lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[12]->isActive = (lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100212 + */ +StaticGraph100212::StaticGraph100212(GraphConfiguration100212* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100212, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysDolWithCvOuterNode.Init(&_graphConfiguration.isysDolWithCvOuterNodeConfiguration); + _lbffDol2InputsNoGmvNoTnrNoSapOuterNode.Init(&_graphConfiguration.lbffDol2InputsNoGmvNoTnrNoSapOuterNodeConfiguration); + _swNntmOuterNode.Init(&_graphConfiguration.swNntmOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDol2InputsNoGmvNoTnrNoSap; + link->destNode = &_lbffDol2InputsNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::LbffDol2InputsNoGmvNoTnrNoSap; + link->destNode = &_lbffDol2InputsNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffDol2InputsNoGmvNoTnrNoSap; + link->destNode = &_lbffDol2InputsNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffDol2InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffDol2InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffDol2InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffDol2InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffDol2InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffDol2InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffDol2InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffDol2InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffDol2InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[16]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[18]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 19; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysDolWithCvOuterNode = &_isysDolWithCvOuterNode; + _imageSubGraph.lbffDol2InputsNoGmvNoTnrNoSapOuterNode = &_lbffDol2InputsNoGmvNoTnrNoSapOuterNode; + _imageSubGraph.swNntmOuterNode = &_swNntmOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysDolWithCvOuterNode->contextId = 0; + _imageSubGraph.lbffDol2InputsNoGmvNoTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swNntmOuterNode->contextId = 2; + _imageSubGraph.swScalerOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100212::~StaticGraph100212() +{ +} + +StaticGraphStatus imageSubGraphTopology100212::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffDol2InputsNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffDol2InputsNoGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffDol2InputsNoGmvNoTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol2InputsNoGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol2InputsNoGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffDol2InputsNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffDol2InputsNoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[7]->isActive = !(lbffDol2InputsNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_NoTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[8]->isActive = !(lbffDol2InputsNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[9]->isActive = !(lbffDol2InputsNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[10]->isActive = !(lbffDol2InputsNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[11]->isActive = !(lbffDol2InputsNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[12]->isActive = !(lbffDol2InputsNoGmvNoTnrNoSapInnerOptions & noMp); // lbff_Dol2Inputs_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[14]->isActive = !(lbffDol2InputsNoGmvNoTnrNoSapInnerOptions & noMp); // lbff_Dol2Inputs_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> sw_nntm:terminal_connect_input + subGraphLinks[13]->isActive = !(lbffDol2InputsNoGmvNoTnrNoSapInnerOptions & noDp); // lbff_Dol2Inputs_NoGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[15]->isActive = !(lbffDol2InputsNoGmvNoTnrNoSapInnerOptions & noDp); // lbff_Dol2Inputs_NoGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> sw_nntm:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 19; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Save the not-vanished HW bitmaps + */ + lbffDol2InputsNoGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffDol2InputsNoGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100213 + */ +StaticGraph100213::StaticGraph100213(GraphConfiguration100213* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100213, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysDolWithCvOuterNode.Init(&_graphConfiguration.isysDolWithCvOuterNodeConfiguration); + _lbffDol2InputsWithGmvNoTnrNoSapOuterNode.Init(&_graphConfiguration.lbffDol2InputsWithGmvNoTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->destNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->destNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->destNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->destNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[18]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 19; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysDolWithCvOuterNode = &_isysDolWithCvOuterNode; + _imageSubGraph.lbffDol2InputsWithGmvNoTnrNoSapOuterNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysDolWithCvOuterNode->contextId = 0; + _imageSubGraph.lbffDol2InputsWithGmvNoTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100213::~StaticGraph100213() +{ +} + +StaticGraphStatus imageSubGraphTopology100213::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffDol2InputsWithGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffDol2InputsWithGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffDol2InputsWithGmvNoTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol2InputsWithGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol2InputsWithGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffDol2InputsWithGmvNoTnrNoSapOuterNode->setInnerNode(lbffDol2InputsWithGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[7]->isActive = !(lbffDol2InputsWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_NoTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[8]->isActive = !(lbffDol2InputsWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[9]->isActive = !(lbffDol2InputsWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[10]->isActive = !(lbffDol2InputsWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[11]->isActive = !(lbffDol2InputsWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[14]->isActive = !(lbffDol2InputsWithGmvNoTnrNoSapInnerOptions & noMp); // lbff_Dol2Inputs_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[16]->isActive = !(lbffDol2InputsWithGmvNoTnrNoSapInnerOptions & noMp); // lbff_Dol2Inputs_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[15]->isActive = !(lbffDol2InputsWithGmvNoTnrNoSapInnerOptions & noDp); // lbff_Dol2Inputs_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[17]->isActive = !(lbffDol2InputsWithGmvNoTnrNoSapInnerOptions & noDp); // lbff_Dol2Inputs_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 19; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[12]->isActive = (lbffDol2InputsWithGmvNoTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol2Inputs_WithGmv_NoTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_Dol2Inputs_WithGmv_NoTnr_NoSap:terminal_connect_gmv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffDol2InputsWithGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffDol2InputsWithGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100214 + */ +StaticGraph100214::StaticGraph100214(GraphConfiguration100214* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100214, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysDolWithCvOuterNode.Init(&_graphConfiguration.isysDolWithCvOuterNodeConfiguration); + _lbffDol2InputsNoGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffDol2InputsNoGmvWithTnrNoSapOuterNodeConfiguration); + _swNntmOuterNode.Init(&_graphConfiguration.swNntmOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[19]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[20]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[21]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 22; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysDolWithCvOuterNode = &_isysDolWithCvOuterNode; + _imageSubGraph.lbffDol2InputsNoGmvWithTnrNoSapOuterNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + _imageSubGraph.swNntmOuterNode = &_swNntmOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysDolWithCvOuterNode->contextId = 0; + _imageSubGraph.lbffDol2InputsNoGmvWithTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swNntmOuterNode->contextId = 2; + _imageSubGraph.swScalerOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100214::~StaticGraph100214() +{ +} + +StaticGraphStatus imageSubGraphTopology100214::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffDol2InputsNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffDol2InputsNoGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffDol2InputsNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol2InputsNoGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + subGraphLinks[18]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol2InputsNoGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffDol2InputsNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffDol2InputsNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[7]->isActive = !(lbffDol2InputsNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[8]->isActive = !(lbffDol2InputsNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[9]->isActive = !(lbffDol2InputsNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[10]->isActive = !(lbffDol2InputsNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[11]->isActive = !(lbffDol2InputsNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[15]->isActive = !(lbffDol2InputsNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[17]->isActive = !(lbffDol2InputsNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> sw_nntm:terminal_connect_input + subGraphLinks[16]->isActive = !(lbffDol2InputsNoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[18]->isActive = !(lbffDol2InputsNoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> sw_nntm:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 22; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[12]->isActive = (lbffDol2InputsNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[13]->isActive = (lbffDol2InputsNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[14]->isActive = (lbffDol2InputsNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffDol2InputsNoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffDol2InputsNoGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100215 + */ +StaticGraph100215::StaticGraph100215(GraphConfiguration100215* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100215, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysDolWithCvOuterNode.Init(&_graphConfiguration.isysDolWithCvOuterNodeConfiguration); + _lbffDol2InputsWithGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffDol2InputsWithGmvWithTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[21]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 22; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysDolWithCvOuterNode = &_isysDolWithCvOuterNode; + _imageSubGraph.lbffDol2InputsWithGmvWithTnrNoSapOuterNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysDolWithCvOuterNode->contextId = 0; + _imageSubGraph.lbffDol2InputsWithGmvWithTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100215::~StaticGraph100215() +{ +} + +StaticGraphStatus imageSubGraphTopology100215::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffDol2InputsWithGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffDol2InputsWithGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffDol2InputsWithGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && + subGraphLinks[19]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol2InputsWithGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[18]->linkConfiguration->bufferSize == 0 && + subGraphLinks[20]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol2InputsWithGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffDol2InputsWithGmvWithTnrNoSapOuterNode->setInnerNode(lbffDol2InputsWithGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[7]->isActive = !(lbffDol2InputsWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[8]->isActive = !(lbffDol2InputsWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[9]->isActive = !(lbffDol2InputsWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[10]->isActive = !(lbffDol2InputsWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[11]->isActive = !(lbffDol2InputsWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[17]->isActive = !(lbffDol2InputsWithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[19]->isActive = !(lbffDol2InputsWithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[18]->isActive = !(lbffDol2InputsWithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[20]->isActive = !(lbffDol2InputsWithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 22; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[12]->isActive = (lbffDol2InputsWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_gmv_input + subGraphLinks[14]->isActive = (lbffDol2InputsWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[15]->isActive = (lbffDol2InputsWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[16]->isActive = (lbffDol2InputsWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffDol2InputsWithGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffDol2InputsWithGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100216 + */ +StaticGraph100216::StaticGraph100216(GraphConfiguration100216* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100216, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysDolWithCvOuterNode.Init(&_graphConfiguration.isysDolWithCvOuterNodeConfiguration); + _lbffDolSmoothOuterNode.Init(&_graphConfiguration.lbffDolSmoothOuterNodeConfiguration); + _lbffDol3InputsNoGmvNoTnrNoSapOuterNode.Init(&_graphConfiguration.lbffDol3InputsNoGmvNoTnrNoSapOuterNodeConfiguration); + _swNntmOuterNode.Init(&_graphConfiguration.swNntmOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDolSmooth; + link->destNode = &_lbffDolSmoothOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffDolSmooth; + link->srcNode = &_lbffDolSmoothOuterNode; + link->srcTerminalId = 16; + link->dest = GraphElementType::LbffDol3InputsNoGmvNoTnrNoSap; + link->destNode = &_lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDol3InputsNoGmvNoTnrNoSap; + link->destNode = &_lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::LbffDol3InputsNoGmvNoTnrNoSap; + link->destNode = &_lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffDol3InputsNoGmvNoTnrNoSap; + link->destNode = &_lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffDol3InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffDol3InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffDol3InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffDol3InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffDol3InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffDol3InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffDol3InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffDol3InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffDol3InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[18]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[20]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 21; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysDolWithCvOuterNode = &_isysDolWithCvOuterNode; + _imageSubGraph.lbffDolSmoothOuterNode = &_lbffDolSmoothOuterNode; + _imageSubGraph.lbffDol3InputsNoGmvNoTnrNoSapOuterNode = &_lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + _imageSubGraph.swNntmOuterNode = &_swNntmOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysDolWithCvOuterNode->contextId = 0; + _imageSubGraph.lbffDolSmoothOuterNode->contextId = 1; + _imageSubGraph.lbffDol3InputsNoGmvNoTnrNoSapOuterNode->contextId = 2; + _imageSubGraph.swNntmOuterNode->contextId = 3; + _imageSubGraph.swScalerOuterNode->contextId = 4; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100216::~StaticGraph100216() +{ +} + +StaticGraphStatus imageSubGraphTopology100216::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffDol3InputsNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffDol3InputsNoGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffDol3InputsNoGmvNoTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol3InputsNoGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol3InputsNoGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffDol3InputsNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffDol3InputsNoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[9]->isActive = !(lbffDol3InputsNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_NoGmv_NoTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[10]->isActive = !(lbffDol3InputsNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[11]->isActive = !(lbffDol3InputsNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[12]->isActive = !(lbffDol3InputsNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[13]->isActive = !(lbffDol3InputsNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[14]->isActive = !(lbffDol3InputsNoGmvNoTnrNoSapInnerOptions & noMp); // lbff_Dol3Inputs_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[16]->isActive = !(lbffDol3InputsNoGmvNoTnrNoSapInnerOptions & noMp); // lbff_Dol3Inputs_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> sw_nntm:terminal_connect_input + subGraphLinks[15]->isActive = !(lbffDol3InputsNoGmvNoTnrNoSapInnerOptions & noDp); // lbff_Dol3Inputs_NoGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[17]->isActive = !(lbffDol3InputsNoGmvNoTnrNoSapInnerOptions & noDp); // lbff_Dol3Inputs_NoGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> sw_nntm:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 21; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Save the not-vanished HW bitmaps + */ + lbffDol3InputsNoGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffDol3InputsNoGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100217 + */ +StaticGraph100217::StaticGraph100217(GraphConfiguration100217* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100217, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysDolWithCvOuterNode.Init(&_graphConfiguration.isysDolWithCvOuterNodeConfiguration); + _lbffDolSmoothOuterNode.Init(&_graphConfiguration.lbffDolSmoothOuterNodeConfiguration); + _lbffDol3InputsWithGmvNoTnrNoSapOuterNode.Init(&_graphConfiguration.lbffDol3InputsWithGmvNoTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDolSmooth; + link->destNode = &_lbffDolSmoothOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffDolSmooth; + link->srcNode = &_lbffDolSmoothOuterNode; + link->srcTerminalId = 16; + link->dest = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->destNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->destNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->destNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->destNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->destNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[20]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 21; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysDolWithCvOuterNode = &_isysDolWithCvOuterNode; + _imageSubGraph.lbffDolSmoothOuterNode = &_lbffDolSmoothOuterNode; + _imageSubGraph.lbffDol3InputsWithGmvNoTnrNoSapOuterNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysDolWithCvOuterNode->contextId = 0; + _imageSubGraph.lbffDolSmoothOuterNode->contextId = 1; + _imageSubGraph.lbffDol3InputsWithGmvNoTnrNoSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100217::~StaticGraph100217() +{ +} + +StaticGraphStatus imageSubGraphTopology100217::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffDol3InputsWithGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffDol3InputsWithGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffDol3InputsWithGmvNoTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + subGraphLinks[18]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol3InputsWithGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && + subGraphLinks[19]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol3InputsWithGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffDol3InputsWithGmvNoTnrNoSapOuterNode->setInnerNode(lbffDol3InputsWithGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[9]->isActive = !(lbffDol3InputsWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_NoTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[10]->isActive = !(lbffDol3InputsWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[11]->isActive = !(lbffDol3InputsWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[12]->isActive = !(lbffDol3InputsWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[13]->isActive = !(lbffDol3InputsWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[16]->isActive = !(lbffDol3InputsWithGmvNoTnrNoSapInnerOptions & noMp); // lbff_Dol3Inputs_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[18]->isActive = !(lbffDol3InputsWithGmvNoTnrNoSapInnerOptions & noMp); // lbff_Dol3Inputs_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[17]->isActive = !(lbffDol3InputsWithGmvNoTnrNoSapInnerOptions & noDp); // lbff_Dol3Inputs_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[19]->isActive = !(lbffDol3InputsWithGmvNoTnrNoSapInnerOptions & noDp); // lbff_Dol3Inputs_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 21; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[14]->isActive = (lbffDol3InputsWithGmvNoTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol3Inputs_WithGmv_NoTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_Dol3Inputs_WithGmv_NoTnr_NoSap:terminal_connect_gmv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffDol3InputsWithGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffDol3InputsWithGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100218 + */ +StaticGraph100218::StaticGraph100218(GraphConfiguration100218* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100218, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysDolWithCvOuterNode.Init(&_graphConfiguration.isysDolWithCvOuterNodeConfiguration); + _lbffDolSmoothOuterNode.Init(&_graphConfiguration.lbffDolSmoothOuterNodeConfiguration); + _lbffDol3InputsNoGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffDol3InputsNoGmvWithTnrNoSapOuterNodeConfiguration); + _swNntmOuterNode.Init(&_graphConfiguration.swNntmOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDolSmooth; + link->destNode = &_lbffDolSmoothOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffDolSmooth; + link->srcNode = &_lbffDolSmoothOuterNode; + link->srcTerminalId = 16; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[21]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[22]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[23]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 24; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysDolWithCvOuterNode = &_isysDolWithCvOuterNode; + _imageSubGraph.lbffDolSmoothOuterNode = &_lbffDolSmoothOuterNode; + _imageSubGraph.lbffDol3InputsNoGmvWithTnrNoSapOuterNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + _imageSubGraph.swNntmOuterNode = &_swNntmOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysDolWithCvOuterNode->contextId = 0; + _imageSubGraph.lbffDolSmoothOuterNode->contextId = 1; + _imageSubGraph.lbffDol3InputsNoGmvWithTnrNoSapOuterNode->contextId = 2; + _imageSubGraph.swNntmOuterNode->contextId = 3; + _imageSubGraph.swScalerOuterNode->contextId = 4; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100218::~StaticGraph100218() +{ +} + +StaticGraphStatus imageSubGraphTopology100218::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffDol3InputsNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffDol3InputsNoGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffDol3InputsNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && + subGraphLinks[19]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol3InputsNoGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[18]->linkConfiguration->bufferSize == 0 && + subGraphLinks[20]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol3InputsNoGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffDol3InputsNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffDol3InputsNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[9]->isActive = !(lbffDol3InputsNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[10]->isActive = !(lbffDol3InputsNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[11]->isActive = !(lbffDol3InputsNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[12]->isActive = !(lbffDol3InputsNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[13]->isActive = !(lbffDol3InputsNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[17]->isActive = !(lbffDol3InputsNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[19]->isActive = !(lbffDol3InputsNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> sw_nntm:terminal_connect_input + subGraphLinks[18]->isActive = !(lbffDol3InputsNoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[20]->isActive = !(lbffDol3InputsNoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> sw_nntm:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 24; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[14]->isActive = (lbffDol3InputsNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[15]->isActive = (lbffDol3InputsNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[16]->isActive = (lbffDol3InputsNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffDol3InputsNoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffDol3InputsNoGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100219 + */ +StaticGraph100219::StaticGraph100219(GraphConfiguration100219* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100219, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysDolWithCvOuterNode.Init(&_graphConfiguration.isysDolWithCvOuterNodeConfiguration); + _lbffDolSmoothOuterNode.Init(&_graphConfiguration.lbffDolSmoothOuterNodeConfiguration); + _lbffDol3InputsWithGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffDol3InputsWithGmvWithTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDolSmooth; + link->destNode = &_lbffDolSmoothOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffDolSmooth; + link->srcNode = &_lbffDolSmoothOuterNode; + link->srcTerminalId = 16; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[23]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 24; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysDolWithCvOuterNode = &_isysDolWithCvOuterNode; + _imageSubGraph.lbffDolSmoothOuterNode = &_lbffDolSmoothOuterNode; + _imageSubGraph.lbffDol3InputsWithGmvWithTnrNoSapOuterNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysDolWithCvOuterNode->contextId = 0; + _imageSubGraph.lbffDolSmoothOuterNode->contextId = 1; + _imageSubGraph.lbffDol3InputsWithGmvWithTnrNoSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100219::~StaticGraph100219() +{ +} + +StaticGraphStatus imageSubGraphTopology100219::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffDol3InputsWithGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffDol3InputsWithGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffDol3InputsWithGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[19]->linkConfiguration->bufferSize == 0 && + subGraphLinks[21]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol3InputsWithGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[20]->linkConfiguration->bufferSize == 0 && + subGraphLinks[22]->linkConfiguration->bufferSize == 0 && + true) + { + lbffDol3InputsWithGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffDol3InputsWithGmvWithTnrNoSapOuterNode->setInnerNode(lbffDol3InputsWithGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[9]->isActive = !(lbffDol3InputsWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[10]->isActive = !(lbffDol3InputsWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[11]->isActive = !(lbffDol3InputsWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[12]->isActive = !(lbffDol3InputsWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[13]->isActive = !(lbffDol3InputsWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[19]->isActive = !(lbffDol3InputsWithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[21]->isActive = !(lbffDol3InputsWithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[20]->isActive = !(lbffDol3InputsWithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[22]->isActive = !(lbffDol3InputsWithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 24; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[14]->isActive = (lbffDol3InputsWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_gmv_input + subGraphLinks[16]->isActive = (lbffDol3InputsWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[17]->isActive = (lbffDol3InputsWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[18]->isActive = (lbffDol3InputsWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffDol3InputsWithGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffDol3InputsWithGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100220 + */ +StaticGraph100220::StaticGraph100220(GraphConfiguration100220* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100220, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) + ,_irSubGraph(_sinkMappingConfiguration) + ,_image_irSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _lbffRgbIrNoGmvNoTnrNoSapOuterNode.Init(&_graphConfiguration.lbffRgbIrNoGmvNoTnrNoSapOuterNodeConfiguration); + _lbffRgbIrIrNoGmvNoTnrNoSapOuterNode.Init(&_graphConfiguration.lbffRgbIrIrNoGmvNoTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + _imageSubGraph.links[0] = link; + _irSubGraph.links[0] = link; + _image_irSubGraph.links[0] = link; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + _imageSubGraph.links[1] = link; + _irSubGraph.links[1] = link; + _image_irSubGraph.links[1] = link; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[2] = link; + _irSubGraph.links[2] = link; + _image_irSubGraph.links[2] = link; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffRgbIrNoGmvNoTnrNoSap; + link->destNode = &_lbffRgbIrNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + _imageSubGraph.links[3] = link; + _irSubGraph.links[3] = link; + _image_irSubGraph.links[3] = link; + + link = &_graphLinks[4]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffRgbIrNoGmvNoTnrNoSap; + link->destNode = &_lbffRgbIrNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + _imageSubGraph.links[4] = link; + _irSubGraph.links[4] = link; + _image_irSubGraph.links[4] = link; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffRgbIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[5] = link; + _irSubGraph.links[5] = link; + _image_irSubGraph.links[5] = link; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffRgbIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[6] = link; + _irSubGraph.links[6] = link; + _image_irSubGraph.links[6] = link; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffRgbIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[7] = link; + _irSubGraph.links[7] = link; + _image_irSubGraph.links[7] = link; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffRgbIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[8] = link; + _irSubGraph.links[8] = link; + _image_irSubGraph.links[8] = link; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffRgbIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[9] = link; + _irSubGraph.links[9] = link; + _image_irSubGraph.links[9] = link; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffRgbIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[10] = link; + _irSubGraph.links[10] = link; + _image_irSubGraph.links[10] = link; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffRgbIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[11] = link; + _irSubGraph.links[11] = link; + _image_irSubGraph.links[11] = link; + + link = &_graphLinks[12]; + link->src = GraphElementType::LscBufferIr; + link->dest = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + _irSubGraph.links[12] = link; + _image_irSubGraph.links[12] = link; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffRgbIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 14; + link->dest = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + _irSubGraph.links[13] = link; + _image_irSubGraph.links[13] = link; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::IrAeOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[14] = link; + _image_irSubGraph.links[14] = link; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::IrAfStdOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[15] = link; + _image_irSubGraph.links[15] = link; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::IrAwbStdOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[16] = link; + _image_irSubGraph.links[16] = link; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::IrAwbSatOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[17] = link; + _image_irSubGraph.links[17] = link; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::IrMp; + link->type = LinkType::Node2Sink; + _irSubGraph.links[18] = link; + _image_irSubGraph.links[18] = link; + + for (uint8_t i = 0; i < 19; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.lbffRgbIrNoGmvNoTnrNoSapOuterNode = &_lbffRgbIrNoGmvNoTnrNoSapOuterNode; + _irSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _irSubGraph.lbffRgbIrNoGmvNoTnrNoSapOuterNode = &_lbffRgbIrNoGmvNoTnrNoSapOuterNode; + _irSubGraph.lbffRgbIrIrNoGmvNoTnrNoSapOuterNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + _image_irSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _image_irSubGraph.lbffRgbIrNoGmvNoTnrNoSapOuterNode = &_lbffRgbIrNoGmvNoTnrNoSapOuterNode; + _image_irSubGraph.lbffRgbIrIrNoGmvNoTnrNoSapOuterNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + + // choose the selected sub graph + if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.video != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.stills != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.thumbnail != static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.previewIr == static_cast(HwSink::Disconnected))) + { + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.lbffRgbIrNoGmvNoTnrNoSapOuterNode->contextId = 1; + } + else if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.video == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.stills == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.thumbnail == static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.previewIr != static_cast(HwSink::Disconnected))) + { + _selectedGraphTopology = &_irSubGraph; + + // logical node IDs + _irSubGraph.isysWithCvOuterNode->contextId = 0; + _irSubGraph.lbffRgbIrNoGmvNoTnrNoSapOuterNode->contextId = 1; + _irSubGraph.lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->contextId = 2; + } + else if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.video != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.stills != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.thumbnail != static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.previewIr != static_cast(HwSink::Disconnected))) + { + _selectedGraphTopology = &_image_irSubGraph; + + // logical node IDs + _image_irSubGraph.isysWithCvOuterNode->contextId = 0; + _image_irSubGraph.lbffRgbIrNoGmvNoTnrNoSapOuterNode->contextId = 1; + _image_irSubGraph.lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->contextId = 2; + } + else + { + STATIC_GRAPH_LOG("Didn't found a matching sub graph for the selected virtual sinks."); + } + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100220::~StaticGraph100220() +{ +} + +StaticGraphStatus imageSubGraphTopology100220::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffRgbIrNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrNoGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrNoGmvNoTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[10]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrNoGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[11]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrNoGmvNoTnrNoSapInnerOptions |= noDp; + } + // always active private inner options + lbffRgbIrNoGmvNoTnrNoSapInnerOptions |= (noIr); + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffRgbIrNoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[5]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[6]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[7]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[8]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[9]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[10]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & noMp); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[11]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & noDp); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 12; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Save the not-vanished HW bitmaps + */ + lbffRgbIrNoGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrNoGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus irSubGraphTopology100220::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags irPublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.irInnerOptions); + + /* + * Setting Node lbffRgbIrNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrNoGmvNoTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrNoGmvNoTnrNoSapInnerOptions |= (noPdaf); + // active public options according to sink mapping + if ( + subGraphLinks[10]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrNoGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[11]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrNoGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Setting Node lbffRgbIrIrNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions |= (noPdaf | noDp | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[18]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions |= noMp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffRgbIrNoGmvNoTnrNoSapInnerOptions); + lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[5]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[6]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[7]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[8]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[9]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[10]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & noMp); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[11]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & noDp); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[14]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ir_ae_out + subGraphLinks[15]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> ir_af_std_out + subGraphLinks[16]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> ir_awb_std_out + subGraphLinks[17]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> ir_awb_sat_out + subGraphLinks[18]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & noMp); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> ir_mp + + /* + * Link enablement by private inner options + */ + subGraphLinks[13]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & noIr); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_ir_output -> lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_main_data_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 19; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Save the not-vanished HW bitmaps + */ + lbffRgbIrNoGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrNoGmvNoTnrNoSapOuterNode->bitmaps; + lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus image_irSubGraphTopology100220::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + InnerNodeOptionsFlags irPublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.irInnerOptions); + + /* + * Setting Node lbffRgbIrNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrNoGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // active public inner options according to sink mapping + if ( + subGraphLinks[10]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrNoGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[11]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrNoGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Setting Node lbffRgbIrIrNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions |= (noPdaf | noDp | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[18]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions |= noMp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffRgbIrNoGmvNoTnrNoSapInnerOptions); + lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[5]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[6]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[7]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[8]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[9]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[10]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & noMp); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[11]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & noDp); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[14]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ir_ae_out + subGraphLinks[15]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> ir_af_std_out + subGraphLinks[16]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> ir_awb_std_out + subGraphLinks[17]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> ir_awb_sat_out + subGraphLinks[18]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & noMp); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> ir_mp + + /* + * Link enablement by private inner options + */ + subGraphLinks[13]->isActive = !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & noIr); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_ir_output -> lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_main_data_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 19; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Save the not-vanished HW bitmaps + */ + lbffRgbIrNoGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrNoGmvNoTnrNoSapOuterNode->bitmaps; + lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100221 + */ +StaticGraph100221::StaticGraph100221(GraphConfiguration100221* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100221, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) + ,_irSubGraph(_sinkMappingConfiguration) + ,_image_irSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _lbffRgbIrWithGmvNoTnrNoSapOuterNode.Init(&_graphConfiguration.lbffRgbIrWithGmvNoTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + _lbffRgbIrIrNoGmvNoTnrNoSapOuterNode.Init(&_graphConfiguration.lbffRgbIrIrNoGmvNoTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + _imageSubGraph.links[0] = link; + _irSubGraph.links[0] = link; + _image_irSubGraph.links[0] = link; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + _imageSubGraph.links[1] = link; + _irSubGraph.links[1] = link; + _image_irSubGraph.links[1] = link; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[2] = link; + _irSubGraph.links[2] = link; + _image_irSubGraph.links[2] = link; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->destNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + _imageSubGraph.links[3] = link; + _irSubGraph.links[3] = link; + _image_irSubGraph.links[3] = link; + + link = &_graphLinks[4]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->destNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + _imageSubGraph.links[4] = link; + _irSubGraph.links[4] = link; + _image_irSubGraph.links[4] = link; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[5] = link; + _irSubGraph.links[5] = link; + _image_irSubGraph.links[5] = link; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[6] = link; + _irSubGraph.links[6] = link; + _image_irSubGraph.links[6] = link; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[7] = link; + _irSubGraph.links[7] = link; + _image_irSubGraph.links[7] = link; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[8] = link; + _irSubGraph.links[8] = link; + _image_irSubGraph.links[8] = link; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[9] = link; + _irSubGraph.links[9] = link; + _image_irSubGraph.links[9] = link; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->destNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _imageSubGraph.links[10] = link; + _irSubGraph.links[10] = link; + _image_irSubGraph.links[10] = link; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[11] = link; + _irSubGraph.links[11] = link; + _image_irSubGraph.links[11] = link; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[12] = link; + _irSubGraph.links[12] = link; + _image_irSubGraph.links[12] = link; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[13] = link; + _irSubGraph.links[13] = link; + _image_irSubGraph.links[13] = link; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + _imageSubGraph.links[14] = link; + _image_irSubGraph.links[14] = link; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + _imageSubGraph.links[15] = link; + _image_irSubGraph.links[15] = link; + + link = &_graphLinks[16]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[16] = link; + _image_irSubGraph.links[16] = link; + + link = &_graphLinks[17]; + link->src = GraphElementType::LscBufferIr; + link->dest = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + _irSubGraph.links[14] = link; + _image_irSubGraph.links[17] = link; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 14; + link->dest = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + _irSubGraph.links[15] = link; + _image_irSubGraph.links[18] = link; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::IrAeOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[16] = link; + _image_irSubGraph.links[19] = link; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::IrAfStdOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[17] = link; + _image_irSubGraph.links[20] = link; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::IrAwbStdOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[18] = link; + _image_irSubGraph.links[21] = link; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::IrAwbSatOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[19] = link; + _image_irSubGraph.links[22] = link; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::IrMp; + link->type = LinkType::Node2Sink; + _irSubGraph.links[20] = link; + _image_irSubGraph.links[23] = link; + + for (uint8_t i = 0; i < 24; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.lbffRgbIrWithGmvNoTnrNoSapOuterNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + _irSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _irSubGraph.lbffRgbIrWithGmvNoTnrNoSapOuterNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + _irSubGraph.lbffRgbIrIrNoGmvNoTnrNoSapOuterNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + _image_irSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _image_irSubGraph.lbffRgbIrWithGmvNoTnrNoSapOuterNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + _image_irSubGraph.swGdcOuterNode = &_swGdcOuterNode; + _image_irSubGraph.lbffRgbIrIrNoGmvNoTnrNoSapOuterNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + + // choose the selected sub graph + if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.video != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.stills != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.thumbnail != static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.previewIr == static_cast(HwSink::Disconnected))) + { + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.lbffRgbIrWithGmvNoTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + } + else if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.video == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.stills == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.thumbnail == static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.previewIr != static_cast(HwSink::Disconnected))) + { + _selectedGraphTopology = &_irSubGraph; + + // logical node IDs + _irSubGraph.isysWithCvOuterNode->contextId = 0; + _irSubGraph.lbffRgbIrWithGmvNoTnrNoSapOuterNode->contextId = 1; + _irSubGraph.lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->contextId = 2; + } + else if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.video != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.stills != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.thumbnail != static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.previewIr != static_cast(HwSink::Disconnected))) + { + _selectedGraphTopology = &_image_irSubGraph; + + // logical node IDs + _image_irSubGraph.isysWithCvOuterNode->contextId = 0; + _image_irSubGraph.lbffRgbIrWithGmvNoTnrNoSapOuterNode->contextId = 1; + _image_irSubGraph.swGdcOuterNode->contextId = 2; + _image_irSubGraph.lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->contextId = 3; + } + else + { + STATIC_GRAPH_LOG("Didn't found a matching sub graph for the selected virtual sinks."); + } + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100221::~StaticGraph100221() +{ +} + +StaticGraphStatus imageSubGraphTopology100221::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffRgbIrWithGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrWithGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrWithGmvNoTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrWithGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrWithGmvNoTnrNoSapInnerOptions |= noDp; + } + // always active private inner options + lbffRgbIrWithGmvNoTnrNoSapInnerOptions |= (noIr); + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrWithGmvNoTnrNoSapOuterNode->setInnerNode(lbffRgbIrWithGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[5]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[6]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[7]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[8]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[9]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[12]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & noMp); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[14]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & noMp); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[13]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & noDp); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[15]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & noDp); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 17; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[10]->isActive = (lbffRgbIrWithGmvNoTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_gmv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffRgbIrWithGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrWithGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus irSubGraphTopology100221::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags irPublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.irInnerOptions); + + /* + * Setting Node lbffRgbIrWithGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrWithGmvNoTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrWithGmvNoTnrNoSapInnerOptions |= (noPdaf); + // active public options according to sink mapping + if ( + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrWithGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrWithGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Setting Node lbffRgbIrIrNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions |= (noPdaf | noDp | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[20]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions |= noMp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrWithGmvNoTnrNoSapOuterNode->setInnerNode(lbffRgbIrWithGmvNoTnrNoSapInnerOptions); + lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[5]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[6]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[7]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[8]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[9]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[12]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & noMp); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[13]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & noDp); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[16]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ir_ae_out + subGraphLinks[17]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> ir_af_std_out + subGraphLinks[18]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> ir_awb_std_out + subGraphLinks[19]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> ir_awb_sat_out + subGraphLinks[20]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & noMp); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> ir_mp + + /* + * Link enablement by private inner options + */ + subGraphLinks[15]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & noIr); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ir_output -> lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_main_data_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 21; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[10]->isActive = (lbffRgbIrWithGmvNoTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_gmv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffRgbIrWithGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrWithGmvNoTnrNoSapOuterNode->bitmaps; + lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus image_irSubGraphTopology100221::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + InnerNodeOptionsFlags irPublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.irInnerOptions); + + /* + * Setting Node lbffRgbIrWithGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrWithGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // active public inner options according to sink mapping + if ( + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrWithGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrWithGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Setting Node lbffRgbIrIrNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions |= (noPdaf | noDp | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[23]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions |= noMp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrWithGmvNoTnrNoSapOuterNode->setInnerNode(lbffRgbIrWithGmvNoTnrNoSapInnerOptions); + lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[5]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[6]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[7]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[8]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[9]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[12]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & noMp); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[14]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & noMp); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[13]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & noDp); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[15]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & noDp); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + subGraphLinks[19]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ir_ae_out + subGraphLinks[20]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> ir_af_std_out + subGraphLinks[21]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> ir_awb_std_out + subGraphLinks[22]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> ir_awb_sat_out + subGraphLinks[23]->isActive = !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & noMp); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> ir_mp + + /* + * Link enablement by private inner options + */ + subGraphLinks[18]->isActive = !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & noIr); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ir_output -> lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_main_data_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 24; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[10]->isActive = (lbffRgbIrWithGmvNoTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_gmv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffRgbIrWithGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrWithGmvNoTnrNoSapOuterNode->bitmaps; + lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100222 + */ +StaticGraph100222::StaticGraph100222(GraphConfiguration100222* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100222, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) + ,_irSubGraph(_sinkMappingConfiguration) + ,_image_irSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _lbffRgbIrNoGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffRgbIrNoGmvWithTnrNoSapOuterNodeConfiguration); + _lbffRgbIrIrNoGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffRgbIrIrNoGmvWithTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + _imageSubGraph.links[0] = link; + _irSubGraph.links[0] = link; + _image_irSubGraph.links[0] = link; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + _imageSubGraph.links[1] = link; + _irSubGraph.links[1] = link; + _image_irSubGraph.links[1] = link; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[2] = link; + _irSubGraph.links[2] = link; + _image_irSubGraph.links[2] = link; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + _imageSubGraph.links[3] = link; + _irSubGraph.links[3] = link; + _image_irSubGraph.links[3] = link; + + link = &_graphLinks[4]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + _imageSubGraph.links[4] = link; + _irSubGraph.links[4] = link; + _image_irSubGraph.links[4] = link; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[5] = link; + _irSubGraph.links[5] = link; + _image_irSubGraph.links[5] = link; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[6] = link; + _irSubGraph.links[6] = link; + _image_irSubGraph.links[6] = link; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[7] = link; + _irSubGraph.links[7] = link; + _image_irSubGraph.links[7] = link; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[8] = link; + _irSubGraph.links[8] = link; + _image_irSubGraph.links[8] = link; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[9] = link; + _irSubGraph.links[9] = link; + _image_irSubGraph.links[9] = link; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _imageSubGraph.links[10] = link; + _irSubGraph.links[10] = link; + _image_irSubGraph.links[10] = link; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _imageSubGraph.links[11] = link; + _irSubGraph.links[11] = link; + _image_irSubGraph.links[11] = link; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _imageSubGraph.links[12] = link; + _irSubGraph.links[12] = link; + _image_irSubGraph.links[12] = link; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[13] = link; + _irSubGraph.links[13] = link; + _image_irSubGraph.links[13] = link; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[14] = link; + _irSubGraph.links[14] = link; + _image_irSubGraph.links[14] = link; + + link = &_graphLinks[15]; + link->src = GraphElementType::LscBufferIr; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + _irSubGraph.links[15] = link; + _image_irSubGraph.links[15] = link; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 14; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + _irSubGraph.links[16] = link; + _image_irSubGraph.links[16] = link; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::IrAeOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[17] = link; + _image_irSubGraph.links[17] = link; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::IrAfStdOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[18] = link; + _image_irSubGraph.links[18] = link; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::IrAwbStdOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[19] = link; + _image_irSubGraph.links[19] = link; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::IrAwbSatOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[20] = link; + _image_irSubGraph.links[20] = link; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _irSubGraph.links[21] = link; + _image_irSubGraph.links[21] = link; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _irSubGraph.links[22] = link; + _image_irSubGraph.links[22] = link; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _irSubGraph.links[23] = link; + _image_irSubGraph.links[23] = link; + + link = &_graphLinks[24]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::IrMp; + link->type = LinkType::Node2Sink; + _irSubGraph.links[24] = link; + _image_irSubGraph.links[24] = link; + + for (uint8_t i = 0; i < 25; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.lbffRgbIrNoGmvWithTnrNoSapOuterNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + _irSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _irSubGraph.lbffRgbIrNoGmvWithTnrNoSapOuterNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + _irSubGraph.lbffRgbIrIrNoGmvWithTnrNoSapOuterNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + _image_irSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _image_irSubGraph.lbffRgbIrNoGmvWithTnrNoSapOuterNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + _image_irSubGraph.lbffRgbIrIrNoGmvWithTnrNoSapOuterNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + + // choose the selected sub graph + if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.video != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.stills != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.thumbnail != static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.previewIr == static_cast(HwSink::Disconnected))) + { + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.lbffRgbIrNoGmvWithTnrNoSapOuterNode->contextId = 1; + } + else if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.video == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.stills == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.thumbnail == static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.previewIr != static_cast(HwSink::Disconnected))) + { + _selectedGraphTopology = &_irSubGraph; + + // logical node IDs + _irSubGraph.isysWithCvOuterNode->contextId = 0; + _irSubGraph.lbffRgbIrNoGmvWithTnrNoSapOuterNode->contextId = 1; + _irSubGraph.lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->contextId = 2; + } + else if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.video != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.stills != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.thumbnail != static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.previewIr != static_cast(HwSink::Disconnected))) + { + _selectedGraphTopology = &_image_irSubGraph; + + // logical node IDs + _image_irSubGraph.isysWithCvOuterNode->contextId = 0; + _image_irSubGraph.lbffRgbIrNoGmvWithTnrNoSapOuterNode->contextId = 1; + _image_irSubGraph.lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->contextId = 2; + } + else + { + STATIC_GRAPH_LOG("Didn't found a matching sub graph for the selected virtual sinks."); + } + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100222::~StaticGraph100222() +{ +} + +StaticGraphStatus imageSubGraphTopology100222::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffRgbIrNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrNoGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrNoGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrNoGmvWithTnrNoSapInnerOptions |= noDp; + } + // always active private inner options + lbffRgbIrNoGmvWithTnrNoSapInnerOptions |= (noIr); + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffRgbIrNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[5]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[6]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[7]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[8]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[9]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[13]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[14]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & noDp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 15; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[10]->isActive = (lbffRgbIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[11]->isActive = (lbffRgbIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[12]->isActive = (lbffRgbIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffRgbIrNoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrNoGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus irSubGraphTopology100222::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags irPublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.irInnerOptions); + + /* + * Setting Node lbffRgbIrNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrNoGmvWithTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrNoGmvWithTnrNoSapInnerOptions |= (noPdaf); + // active public options according to sink mapping + if ( + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrNoGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrNoGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Setting Node lbffRgbIrIrNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noDp | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[24]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions |= noMp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffRgbIrNoGmvWithTnrNoSapInnerOptions); + lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[5]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[6]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[7]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[8]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[9]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[13]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[14]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & noDp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[17]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ir_ae_out + subGraphLinks[18]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> ir_af_std_out + subGraphLinks[19]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> ir_awb_std_out + subGraphLinks[20]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> ir_awb_sat_out + subGraphLinks[24]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> ir_mp + + /* + * Link enablement by private inner options + */ + subGraphLinks[16]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & noIr); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_ir_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_main_data_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 25; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[10]->isActive = (lbffRgbIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[11]->isActive = (lbffRgbIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[12]->isActive = (lbffRgbIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + subGraphLinks[21]->isActive = (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[22]->isActive = (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[23]->isActive = (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffRgbIrNoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrNoGmvWithTnrNoSapOuterNode->bitmaps; + lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus image_irSubGraphTopology100222::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + InnerNodeOptionsFlags irPublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.irInnerOptions); + + /* + * Setting Node lbffRgbIrNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrNoGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // active public inner options according to sink mapping + if ( + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrNoGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrNoGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Setting Node lbffRgbIrIrNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noDp | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[24]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions |= noMp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffRgbIrNoGmvWithTnrNoSapInnerOptions); + lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[5]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[6]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[7]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[8]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[9]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[13]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[14]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & noDp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[17]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ir_ae_out + subGraphLinks[18]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> ir_af_std_out + subGraphLinks[19]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> ir_awb_std_out + subGraphLinks[20]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> ir_awb_sat_out + subGraphLinks[24]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> ir_mp + + /* + * Link enablement by private inner options + */ + subGraphLinks[16]->isActive = !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & noIr); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_ir_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_main_data_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 25; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[10]->isActive = (lbffRgbIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[11]->isActive = (lbffRgbIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[12]->isActive = (lbffRgbIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + subGraphLinks[21]->isActive = (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[22]->isActive = (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[23]->isActive = (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffRgbIrNoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrNoGmvWithTnrNoSapOuterNode->bitmaps; + lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100223 + */ +StaticGraph100223::StaticGraph100223(GraphConfiguration100223* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100223, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) + ,_irSubGraph(_sinkMappingConfiguration) + ,_image_irSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _lbffRgbIrWithGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffRgbIrWithGmvWithTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + _lbffRgbIrIrNoGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffRgbIrIrNoGmvWithTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + _imageSubGraph.links[0] = link; + _irSubGraph.links[0] = link; + _image_irSubGraph.links[0] = link; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + _imageSubGraph.links[1] = link; + _irSubGraph.links[1] = link; + _image_irSubGraph.links[1] = link; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[2] = link; + _irSubGraph.links[2] = link; + _image_irSubGraph.links[2] = link; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + _imageSubGraph.links[3] = link; + _irSubGraph.links[3] = link; + _image_irSubGraph.links[3] = link; + + link = &_graphLinks[4]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + _imageSubGraph.links[4] = link; + _irSubGraph.links[4] = link; + _image_irSubGraph.links[4] = link; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[5] = link; + _irSubGraph.links[5] = link; + _image_irSubGraph.links[5] = link; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[6] = link; + _irSubGraph.links[6] = link; + _image_irSubGraph.links[6] = link; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[7] = link; + _irSubGraph.links[7] = link; + _image_irSubGraph.links[7] = link; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[8] = link; + _irSubGraph.links[8] = link; + _image_irSubGraph.links[8] = link; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[9] = link; + _irSubGraph.links[9] = link; + _image_irSubGraph.links[9] = link; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _imageSubGraph.links[10] = link; + _irSubGraph.links[10] = link; + _image_irSubGraph.links[10] = link; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[11] = link; + _irSubGraph.links[11] = link; + _image_irSubGraph.links[11] = link; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _imageSubGraph.links[12] = link; + _irSubGraph.links[12] = link; + _image_irSubGraph.links[12] = link; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _imageSubGraph.links[13] = link; + _irSubGraph.links[13] = link; + _image_irSubGraph.links[13] = link; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _imageSubGraph.links[14] = link; + _irSubGraph.links[14] = link; + _image_irSubGraph.links[14] = link; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[15] = link; + _irSubGraph.links[15] = link; + _image_irSubGraph.links[15] = link; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[16] = link; + _irSubGraph.links[16] = link; + _image_irSubGraph.links[16] = link; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + _imageSubGraph.links[17] = link; + _image_irSubGraph.links[17] = link; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + _imageSubGraph.links[18] = link; + _image_irSubGraph.links[18] = link; + + link = &_graphLinks[19]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[19] = link; + _image_irSubGraph.links[19] = link; + + link = &_graphLinks[20]; + link->src = GraphElementType::LscBufferIr; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + _irSubGraph.links[17] = link; + _image_irSubGraph.links[20] = link; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 14; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + _irSubGraph.links[18] = link; + _image_irSubGraph.links[21] = link; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::IrAeOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[19] = link; + _image_irSubGraph.links[22] = link; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::IrAfStdOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[20] = link; + _image_irSubGraph.links[23] = link; + + link = &_graphLinks[24]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::IrAwbStdOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[21] = link; + _image_irSubGraph.links[24] = link; + + link = &_graphLinks[25]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::IrAwbSatOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[22] = link; + _image_irSubGraph.links[25] = link; + + link = &_graphLinks[26]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _irSubGraph.links[23] = link; + _image_irSubGraph.links[26] = link; + + link = &_graphLinks[27]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _irSubGraph.links[24] = link; + _image_irSubGraph.links[27] = link; + + link = &_graphLinks[28]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _irSubGraph.links[25] = link; + _image_irSubGraph.links[28] = link; + + link = &_graphLinks[29]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::IrMp; + link->type = LinkType::Node2Sink; + _irSubGraph.links[26] = link; + _image_irSubGraph.links[29] = link; + + for (uint8_t i = 0; i < 30; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.lbffRgbIrWithGmvWithTnrNoSapOuterNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + _irSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _irSubGraph.lbffRgbIrWithGmvWithTnrNoSapOuterNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + _irSubGraph.lbffRgbIrIrNoGmvWithTnrNoSapOuterNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + _image_irSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _image_irSubGraph.lbffRgbIrWithGmvWithTnrNoSapOuterNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + _image_irSubGraph.swGdcOuterNode = &_swGdcOuterNode; + _image_irSubGraph.lbffRgbIrIrNoGmvWithTnrNoSapOuterNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + + // choose the selected sub graph + if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.video != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.stills != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.thumbnail != static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.previewIr == static_cast(HwSink::Disconnected))) + { + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.lbffRgbIrWithGmvWithTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + } + else if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.video == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.stills == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.thumbnail == static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.previewIr != static_cast(HwSink::Disconnected))) + { + _selectedGraphTopology = &_irSubGraph; + + // logical node IDs + _irSubGraph.isysWithCvOuterNode->contextId = 0; + _irSubGraph.lbffRgbIrWithGmvWithTnrNoSapOuterNode->contextId = 1; + _irSubGraph.lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->contextId = 2; + } + else if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.video != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.stills != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.thumbnail != static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr != static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.previewIr != static_cast(HwSink::Disconnected))) + { + _selectedGraphTopology = &_image_irSubGraph; + + // logical node IDs + _image_irSubGraph.isysWithCvOuterNode->contextId = 0; + _image_irSubGraph.lbffRgbIrWithGmvWithTnrNoSapOuterNode->contextId = 1; + _image_irSubGraph.swGdcOuterNode->contextId = 2; + _image_irSubGraph.lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->contextId = 3; + } + else + { + STATIC_GRAPH_LOG("Didn't found a matching sub graph for the selected virtual sinks."); + } + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100223::~StaticGraph100223() +{ +} + +StaticGraphStatus imageSubGraphTopology100223::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffRgbIrWithGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrWithGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrWithGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrWithGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + subGraphLinks[18]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrWithGmvWithTnrNoSapInnerOptions |= noDp; + } + // always active private inner options + lbffRgbIrWithGmvWithTnrNoSapInnerOptions |= (noIr); + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrWithGmvWithTnrNoSapOuterNode->setInnerNode(lbffRgbIrWithGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[5]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[6]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[7]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[8]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[9]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[15]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & noMp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[17]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & noMp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[16]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[18]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 20; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[10]->isActive = (lbffRgbIrWithGmvWithTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_gmv_input + subGraphLinks[12]->isActive = (lbffRgbIrWithGmvWithTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[13]->isActive = (lbffRgbIrWithGmvWithTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[14]->isActive = (lbffRgbIrWithGmvWithTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffRgbIrWithGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrWithGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus irSubGraphTopology100223::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags irPublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.irInnerOptions); + + /* + * Setting Node lbffRgbIrWithGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrWithGmvWithTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrWithGmvWithTnrNoSapInnerOptions |= (noPdaf); + // active public options according to sink mapping + if ( + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrWithGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrWithGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Setting Node lbffRgbIrIrNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noDp | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[26]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions |= noMp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrWithGmvWithTnrNoSapOuterNode->setInnerNode(lbffRgbIrWithGmvWithTnrNoSapInnerOptions); + lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[5]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[6]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[7]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[8]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[9]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[15]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & noMp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[16]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[19]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ir_ae_out + subGraphLinks[20]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> ir_af_std_out + subGraphLinks[21]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> ir_awb_std_out + subGraphLinks[22]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> ir_awb_sat_out + subGraphLinks[26]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> ir_mp + + /* + * Link enablement by private inner options + */ + subGraphLinks[18]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & noIr); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ir_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_main_data_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 27; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[10]->isActive = (lbffRgbIrWithGmvWithTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_gmv_input + subGraphLinks[12]->isActive = (lbffRgbIrWithGmvWithTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[13]->isActive = (lbffRgbIrWithGmvWithTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[14]->isActive = (lbffRgbIrWithGmvWithTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + subGraphLinks[23]->isActive = (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[24]->isActive = (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[25]->isActive = (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffRgbIrWithGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrWithGmvWithTnrNoSapOuterNode->bitmaps; + lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus image_irSubGraphTopology100223::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + InnerNodeOptionsFlags irPublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.irInnerOptions); + + /* + * Setting Node lbffRgbIrWithGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrWithGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // active public inner options according to sink mapping + if ( + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrWithGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + subGraphLinks[18]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrWithGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Setting Node lbffRgbIrIrNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noDp | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[29]->linkConfiguration->bufferSize == 0 && + true) + { + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions |= noMp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrWithGmvWithTnrNoSapOuterNode->setInnerNode(lbffRgbIrWithGmvWithTnrNoSapInnerOptions); + lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[5]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[6]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[7]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[8]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[9]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[15]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & noMp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[17]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & noMp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[16]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[18]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + subGraphLinks[22]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ir_ae_out + subGraphLinks[23]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> ir_af_std_out + subGraphLinks[24]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> ir_awb_std_out + subGraphLinks[25]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> ir_awb_sat_out + subGraphLinks[29]->isActive = !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> ir_mp + + /* + * Link enablement by private inner options + */ + subGraphLinks[21]->isActive = !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & noIr); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ir_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_main_data_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 30; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[10]->isActive = (lbffRgbIrWithGmvWithTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_gmv_input + subGraphLinks[12]->isActive = (lbffRgbIrWithGmvWithTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[13]->isActive = (lbffRgbIrWithGmvWithTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[14]->isActive = (lbffRgbIrWithGmvWithTnrNoSapInnerOptions & (noMp|noDp)) != (noMp|noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + subGraphLinks[26]->isActive = (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[27]->isActive = (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[28]->isActive = (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffRgbIrWithGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrWithGmvWithTnrNoSapOuterNode->bitmaps; + lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100224 + */ +StaticGraph100224::StaticGraph100224(GraphConfiguration100224* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100224, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _withCvOuterNode.Init(&_graphConfiguration.withCvOuterNodeConfiguration); + _lbffBayerNoGmvNoTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerNoGmvNoTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::WithCv; + link->destNode = &_withCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::WithCv; + link->srcNode = &_withCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[2]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->destNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->destNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 10; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.lbffBayerNoGmvNoTnrNoSapOuterNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.lbffBayerNoGmvNoTnrNoSapOuterNode->contextId = 0; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100224::~StaticGraph100224() +{ +} + +StaticGraphStatus imageSubGraphTopology100224::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerNoGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerNoGmvNoTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[6]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerNoGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[7]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerNoGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffBayerNoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[2]->isActive = !(lbffBayerNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[3]->isActive = !(lbffBayerNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[4]->isActive = !(lbffBayerNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[5]->isActive = !(lbffBayerNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[6]->isActive = !(lbffBayerNoGmvNoTnrNoSapInnerOptions & noMp); // lbff_Bayer_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[7]->isActive = !(lbffBayerNoGmvNoTnrNoSapInnerOptions & noDp); // lbff_Bayer_NoGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 8; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerNoGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerNoGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100240 + */ +StaticGraph100240::StaticGraph100240(GraphConfiguration100240* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100240, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _withCvOuterNode.Init(&_graphConfiguration.withCvOuterNodeConfiguration); + _lbffBayerWithGmvNoTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerWithGmvNoTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::WithCv; + link->destNode = &_withCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::WithCv; + link->srcNode = &_withCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[2]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->destNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->destNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->destNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 15; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.lbffBayerWithGmvNoTnrNoSapOuterNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.lbffBayerWithGmvNoTnrNoSapOuterNode->contextId = 0; + _imageSubGraph.swGdcOuterNode->contextId = 1; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100240::~StaticGraph100240() +{ +} + +StaticGraphStatus imageSubGraphTopology100240::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerWithGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerWithGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerWithGmvNoTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[8]->linkConfiguration->bufferSize == 0 && + subGraphLinks[10]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerWithGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[9]->linkConfiguration->bufferSize == 0 && + subGraphLinks[11]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerWithGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerWithGmvNoTnrNoSapOuterNode->setInnerNode(lbffBayerWithGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[2]->isActive = !(lbffBayerWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[3]->isActive = !(lbffBayerWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[4]->isActive = !(lbffBayerWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[5]->isActive = !(lbffBayerWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[8]->isActive = !(lbffBayerWithGmvNoTnrNoSapInnerOptions & noMp); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[10]->isActive = !(lbffBayerWithGmvNoTnrNoSapInnerOptions & noMp); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[9]->isActive = !(lbffBayerWithGmvNoTnrNoSapInnerOptions & noDp); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[11]->isActive = !(lbffBayerWithGmvNoTnrNoSapInnerOptions & noDp); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 13; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[6]->isActive = (lbffBayerWithGmvNoTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_gmv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerWithGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerWithGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100241 + */ +StaticGraph100241::StaticGraph100241(GraphConfiguration100241* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100241, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _withCvOuterNode.Init(&_graphConfiguration.withCvOuterNodeConfiguration); + _lbffBayerWithGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerWithGmvWithTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::WithCv; + link->destNode = &_withCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::WithCv; + link->srcNode = &_withCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[2]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[17]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 18; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.lbffBayerWithGmvWithTnrNoSapOuterNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.lbffBayerWithGmvWithTnrNoSapOuterNode->contextId = 0; + _imageSubGraph.swGdcOuterNode->contextId = 1; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100241::~StaticGraph100241() +{ +} + +StaticGraphStatus imageSubGraphTopology100241::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerWithGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerWithGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerWithGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[11]->linkConfiguration->bufferSize == 0 && + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerWithGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerWithGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerWithGmvWithTnrNoSapOuterNode->setInnerNode(lbffBayerWithGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[2]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[3]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[4]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[5]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[11]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[13]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[12]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[14]->isActive = !(lbffBayerWithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 16; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[6]->isActive = (lbffBayerWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_gmv_input + subGraphLinks[8]->isActive = (lbffBayerWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[9]->isActive = (lbffBayerWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[10]->isActive = (lbffBayerWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerWithGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerWithGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100242 + */ +StaticGraph100242::StaticGraph100242(GraphConfiguration100242* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100242, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _withCvOuterNode.Init(&_graphConfiguration.withCvOuterNodeConfiguration); + _lbffBayerNoGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerNoGmvWithTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::WithCv; + link->destNode = &_withCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::WithCv; + link->srcNode = &_withCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[2]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 13; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.lbffBayerNoGmvWithTnrNoSapOuterNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.lbffBayerNoGmvWithTnrNoSapOuterNode->contextId = 0; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100242::~StaticGraph100242() +{ +} + +StaticGraphStatus imageSubGraphTopology100242::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerNoGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[9]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerNoGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[10]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerNoGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffBayerNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[2]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[3]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[4]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[5]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[9]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[10]->isActive = !(lbffBayerNoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 11; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[6]->isActive = (lbffBayerNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[7]->isActive = (lbffBayerNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[8]->isActive = (lbffBayerNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerNoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerNoGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100227 + */ +StaticGraph100227::StaticGraph100227(GraphConfiguration100227* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100227, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _lbffIrNoGmvNoTnrNoSapOuterNode.Init(&_graphConfiguration.lbffIrNoGmvNoTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffIrNoGmvNoTnrNoSap; + link->destNode = &_lbffIrNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffIrNoGmvNoTnrNoSap; + link->destNode = &_lbffIrNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 11; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.lbffIrNoGmvNoTnrNoSapOuterNode = &_lbffIrNoGmvNoTnrNoSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.lbffIrNoGmvNoTnrNoSapOuterNode->contextId = 1; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100227::~StaticGraph100227() +{ +} + +StaticGraphStatus imageSubGraphTopology100227::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffIrNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffIrNoGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffIrNoGmvNoTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[9]->linkConfiguration->bufferSize == 0 && + true) + { + lbffIrNoGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[10]->linkConfiguration->bufferSize == 0 && + true) + { + lbffIrNoGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffIrNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffIrNoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[5]->isActive = !(lbffIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[6]->isActive = !(lbffIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Ir_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[7]->isActive = !(lbffIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[8]->isActive = !(lbffIrNoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[9]->isActive = !(lbffIrNoGmvNoTnrNoSapInnerOptions & noMp); // lbff_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[10]->isActive = !(lbffIrNoGmvNoTnrNoSapInnerOptions & noDp); // lbff_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 11; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Save the not-vanished HW bitmaps + */ + lbffIrNoGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffIrNoGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100228 + */ +StaticGraph100228::StaticGraph100228(GraphConfiguration100228* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100228, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _lbffIrWithGmvNoTnrNoSapOuterNode.Init(&_graphConfiguration.lbffIrWithGmvNoTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffIrWithGmvNoTnrNoSap; + link->destNode = &_lbffIrWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffIrWithGmvNoTnrNoSap; + link->destNode = &_lbffIrWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffIrWithGmvNoTnrNoSap; + link->destNode = &_lbffIrWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[15]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 16; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.lbffIrWithGmvNoTnrNoSapOuterNode = &_lbffIrWithGmvNoTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.lbffIrWithGmvNoTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100228::~StaticGraph100228() +{ +} + +StaticGraphStatus imageSubGraphTopology100228::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffIrWithGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffIrWithGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffIrWithGmvNoTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[11]->linkConfiguration->bufferSize == 0 && + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + true) + { + lbffIrWithGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + true) + { + lbffIrWithGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffIrWithGmvNoTnrNoSapOuterNode->setInnerNode(lbffIrWithGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[5]->isActive = !(lbffIrWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Ir_WithGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[6]->isActive = !(lbffIrWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Ir_WithGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[7]->isActive = !(lbffIrWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Ir_WithGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[8]->isActive = !(lbffIrWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Ir_WithGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[11]->isActive = !(lbffIrWithGmvNoTnrNoSapInnerOptions & noMp); // lbff_Ir_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[13]->isActive = !(lbffIrWithGmvNoTnrNoSapInnerOptions & noMp); // lbff_Ir_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[12]->isActive = !(lbffIrWithGmvNoTnrNoSapInnerOptions & noDp); // lbff_Ir_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[14]->isActive = !(lbffIrWithGmvNoTnrNoSapInnerOptions & noDp); // lbff_Ir_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 16; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[9]->isActive = (lbffIrWithGmvNoTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Ir_WithGmv_NoTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_Ir_WithGmv_NoTnr_NoSap:terminal_connect_gmv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffIrWithGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffIrWithGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100229 + */ +StaticGraph100229::StaticGraph100229(GraphConfiguration100229* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100229, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _lbffIrNoGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffIrNoGmvWithTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffIrNoGmvWithTnrNoSap; + link->destNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffIrNoGmvWithTnrNoSap; + link->destNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffIrNoGmvWithTnrNoSap; + link->destNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffIrNoGmvWithTnrNoSap; + link->destNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffIrNoGmvWithTnrNoSap; + link->destNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 14; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.lbffIrNoGmvWithTnrNoSapOuterNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.lbffIrNoGmvWithTnrNoSapOuterNode->contextId = 1; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100229::~StaticGraph100229() +{ +} + +StaticGraphStatus imageSubGraphTopology100229::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffIrNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffIrNoGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffIrNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + true) + { + lbffIrNoGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + true) + { + lbffIrNoGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffIrNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffIrNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[5]->isActive = !(lbffIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[6]->isActive = !(lbffIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Ir_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[7]->isActive = !(lbffIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[8]->isActive = !(lbffIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[12]->isActive = !(lbffIrNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[13]->isActive = !(lbffIrNoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 14; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[9]->isActive = (lbffIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[10]->isActive = (lbffIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[11]->isActive = (lbffIrNoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Ir_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffIrNoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffIrNoGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100230 + */ +StaticGraph100230::StaticGraph100230(GraphConfiguration100230* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100230, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _lbffIrWithGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffIrWithGmvWithTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->destNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->destNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->destNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->destNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->destNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->destNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[18]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 19; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.lbffIrWithGmvWithTnrNoSapOuterNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.lbffIrWithGmvWithTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100230::~StaticGraph100230() +{ +} + +StaticGraphStatus imageSubGraphTopology100230::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffIrWithGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffIrWithGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffIrWithGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if ( + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + true) + { + lbffIrWithGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && + true) + { + lbffIrWithGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffIrWithGmvWithTnrNoSapOuterNode->setInnerNode(lbffIrWithGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[5]->isActive = !(lbffIrWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[6]->isActive = !(lbffIrWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[7]->isActive = !(lbffIrWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[8]->isActive = !(lbffIrWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[14]->isActive = !(lbffIrWithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[16]->isActive = !(lbffIrWithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[15]->isActive = !(lbffIrWithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[17]->isActive = !(lbffIrWithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 19; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[9]->isActive = (lbffIrWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_gmv_input + subGraphLinks[11]->isActive = (lbffIrWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[12]->isActive = (lbffIrWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[13]->isActive = (lbffIrWithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffIrWithGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffIrWithGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100231 + */ +StaticGraph100231::StaticGraph100231(GraphConfiguration100231* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100231, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 19; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 13; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode->contextId = 1; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100231::~StaticGraph100231() +{ +} + +StaticGraphStatus imageSubGraphTopology100231::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[11]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode->setInnerNode(lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[7]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[8]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[9]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[10]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[5]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapInnerOptions & noPdaf); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_NoSap:terminal_connect_pdaf_output -> pdaf_out + subGraphLinks[11]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[12]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 13; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[4]->isActive = (lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapInnerOptions & (no3A|noMp|noDp|noIr)) != (no3A|noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_NoSap:terminal_connect_dpc_pdaf_output -> lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_NoSap:terminal_connect_pdaf_data_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100232 + */ +StaticGraph100232::StaticGraph100232(GraphConfiguration100232* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100232, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 19; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[17]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 18; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100232::~StaticGraph100232() +{ +} + +StaticGraphStatus imageSubGraphTopology100232::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode->setInnerNode(lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[7]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[8]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[9]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[10]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[5]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions & noPdaf); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_NoSap:terminal_connect_pdaf_output -> pdaf_out + subGraphLinks[13]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[15]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[14]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[16]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 18; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[4]->isActive = (lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions & (no3A|noMp|noDp|noIr)) != (no3A|noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_NoSap:terminal_connect_dpc_pdaf_output -> lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_NoSap:terminal_connect_pdaf_data_input + subGraphLinks[11]->isActive = (lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_NoSap:terminal_connect_gmv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100233 + */ +StaticGraph100233::StaticGraph100233(GraphConfiguration100233* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100233, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 19; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 16; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode->contextId = 1; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100233::~StaticGraph100233() +{ +} + +StaticGraphStatus imageSubGraphTopology100233::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode->setInnerNode(lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[7]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[8]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[9]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[10]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[5]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & noPdaf); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_pdaf_output -> pdaf_out + subGraphLinks[14]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[15]->isActive = !(lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 16; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[4]->isActive = (lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & (no3A|noMp|noDp|noIr)) != (no3A|noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_dpc_pdaf_output -> lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_pdaf_data_input + subGraphLinks[11]->isActive = (lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[12]->isActive = (lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[13]->isActive = (lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100234 + */ +StaticGraph100234::StaticGraph100234(GraphConfiguration100234* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100234, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode.Init(&_graphConfiguration.lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::CvOutput; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 19; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[20]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 21; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if(_selectedGraphTopology != nullptr) + { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100234::~StaticGraph100234() +{ +} + +StaticGraphStatus imageSubGraphTopology100234::configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) +{ + + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if ( + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + subGraphLinks[18]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions |= noMp; + } + if ( + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && + subGraphLinks[19]->linkConfiguration->bufferSize == 0 && + true) + { + lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode->setInnerNode(lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[7]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[8]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[9]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[10]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[5]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions & noPdaf); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_pdaf_output -> pdaf_out + subGraphLinks[16]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[18]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> sw_gdc:terminal_connect_input + subGraphLinks[17]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[19]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 21; i++) + { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) + { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[4]->isActive = (lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions & (no3A|noMp|noDp|noIr)) != (no3A|noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_dpc_pdaf_output -> lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_pdaf_data_input + subGraphLinks[11]->isActive = (lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_gmv_feature_output -> lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_gmv_input + subGraphLinks[13]->isActive = (lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_blend_output -> lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[14]->isActive = (lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_bc_output -> lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[15]->isActive = (lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions & (noMp|noDp|noIr)) != (noMp|noDp|noIr); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Save the not-vanished HW bitmaps + */ + lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode->bitmapsNotVanished = lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode->bitmaps; + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100026 + */ +StaticGraph100026::StaticGraph100026(GraphConfiguration100026* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100026, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _rawSubGraph(_sinkMappingConfiguration) +{ + + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::RawIsys; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 2; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _rawSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _rawSubGraph.isysOuterNode = &_isysOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_rawSubGraph; + + // logical node IDs + _rawSubGraph.isysOuterNode->contextId = 0; +} +StaticGraph100026::~StaticGraph100026() +{ +} +/* + * Graph 100059 + */ +StaticGraph100059::StaticGraph100059(GraphConfiguration100059* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100059, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _rawSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::RawIsys; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::RawIsysCv; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 4; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _rawSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _rawSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_rawSubGraph; + + // logical node IDs + _rawSubGraph.isysWithCvOuterNode->contextId = 0; +} +StaticGraph100059::~StaticGraph100059() +{ +} +/* + * Graph 100035 + */ +StaticGraph100035::StaticGraph100035(GraphConfiguration100035* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100035, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _rawSubGraph(_sinkMappingConfiguration) +{ + + _isysDolOuterNode.Init(&_graphConfiguration.isysDolOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDol; + link->destNode = &_isysDolOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDol; + link->destNode = &_isysDolOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::RawIsys; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::RawIsysDolLong; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 4; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _rawSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _rawSubGraph.isysDolOuterNode = &_isysDolOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_rawSubGraph; + + // logical node IDs + _rawSubGraph.isysDolOuterNode->contextId = 0; +} +StaticGraph100035::~StaticGraph100035() +{ +} +/* + * Graph 100036 + */ +StaticGraph100036::StaticGraph100036(GraphConfiguration100036* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100036, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _rawSubGraph(_sinkMappingConfiguration) +{ + + _isysPdaf2OuterNode.Init(&_graphConfiguration.isysPdaf2OuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2; + link->destNode = &_isysPdaf2OuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::PdafBuffer; + link->dest = GraphElementType::IsysPdaf2; + link->destNode = &_isysPdaf2OuterNode; + link->destTerminalId = 6; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysPdaf2; + link->srcNode = &_isysPdaf2OuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::RawIsys; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysPdaf2; + link->srcNode = &_isysPdaf2OuterNode; + link->srcTerminalId = 7; + link->dest = GraphElementType::RawIsysPdaf; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 4; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _rawSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _rawSubGraph.isysPdaf2OuterNode = &_isysPdaf2OuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_rawSubGraph; + + // logical node IDs + _rawSubGraph.isysPdaf2OuterNode->contextId = 0; +} +StaticGraph100036::~StaticGraph100036() +{ +} +/* + * Graph 100037 + */ +StaticGraph100037::StaticGraph100037(GraphConfiguration100037* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100037, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _rawSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::RawIsys; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::RawIsysCv; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 4; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _rawSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _rawSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_rawSubGraph; + + // logical node IDs + _rawSubGraph.isysWithCvOuterNode->contextId = 0; +} +StaticGraph100037::~StaticGraph100037() +{ +} +/* + * Graph 100058 + */ +StaticGraph100058::StaticGraph100058(GraphConfiguration100058* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100058, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _rawSubGraph(_sinkMappingConfiguration) +{ + + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::RawIsys; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::RawIsysCv; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 4; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _rawSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _rawSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_rawSubGraph; + + // logical node IDs + _rawSubGraph.isysWithCvOuterNode->contextId = 0; +} +StaticGraph100058::~StaticGraph100058() +{ +} +/* + * Graph 100038 + */ +StaticGraph100038::StaticGraph100038(GraphConfiguration100038* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100038, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _rawSubGraph(_sinkMappingConfiguration) +{ + + _isysDolWithCvOuterNode.Init(&_graphConfiguration.isysDolWithCvOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::RawIsys; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::RawIsysDolLong; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::RawIsysCv; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 6; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _rawSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _rawSubGraph.isysDolWithCvOuterNode = &_isysDolWithCvOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_rawSubGraph; + + // logical node IDs + _rawSubGraph.isysDolWithCvOuterNode->contextId = 0; +} +StaticGraph100038::~StaticGraph100038() +{ +} +/* + * Graph 100039 + */ +StaticGraph100039::StaticGraph100039(GraphConfiguration100039* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId) : + IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100039, selectedSettingsId), _graphConfiguration(*selectedGraphConfiguration), + + _rawSubGraph(_sinkMappingConfiguration) +{ + + _isysPdaf2WithCvOuterNode.Init(&_graphConfiguration.isysPdaf2WithCvOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::PdafBuffer; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::RawIsys; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 7; + link->dest = GraphElementType::RawIsysPdaf; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::RawIsysCv; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 6; ++i) + { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _rawSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _rawSubGraph.isysPdaf2WithCvOuterNode = &_isysPdaf2WithCvOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_rawSubGraph; + + // logical node IDs + _rawSubGraph.isysPdaf2WithCvOuterNode->contextId = 0; +} +StaticGraph100039::~StaticGraph100039() +{ +} diff --git a/modules/ipu_desc/ipu8/Ipu8StaticGraphAutogen.h b/modules/ipu_desc/ipu8/Ipu8StaticGraphAutogen.h new file mode 100644 index 0000000..0e0e0a7 --- /dev/null +++ b/modules/ipu_desc/ipu8/Ipu8StaticGraphAutogen.h @@ -0,0 +1,9306 @@ +/* +* INTEL CONFIDENTIAL +* Copyright (c) 2026 Intel Corporation +* All Rights Reserved. +* +* The source code contained or described herein and all documents related to +* the source code ("Material") are owned by Intel Corporation or its +* suppliers or licensors. Title to the Material remains with Intel +* Corporation or its suppliers and licensors. The Material may contain trade +* secrets and proprietary and confidential information of Intel Corporation +* and its suppliers and licensors, and is protected by worldwide copyright +* and trade secret laws and treaty provisions. No part of the Material may be +* used, copied, reproduced, modified, published, uploaded, posted, +* transmitted, distributed, or disclosed in any way without Intel's prior +* express written permission. +* +* No license under any patent, copyright, trade secret or other intellectual +* property right is granted to or conferred upon you by disclosure or +* delivery of the Materials, either expressly, by implication, inducement, +* estoppel or otherwise. Any license under such intellectual property rights +* must be express and approved by Intel in writing. +* +* Unless otherwise agreed by Intel in writing, you may not remove or alter +* this notice or any other notice embedded in Materials by Intel or Intels +* suppliers or licensors in any way. +*/ + +#ifndef STATIC_GRAPH_H +#define STATIC_GRAPH_H + +#include +#include +#include +#include "Ipu8StaticGraphTypesAutogen.h" +#include "Ipu8StaticGraphBinaryAutogen.h" + +#define SUPPORT_KEY_RESOLUTIONS 0 + +#define SUPPORT_FRAGMENTS 1 + +enum InnerNodeOption +{ + None = 0, + noIr = (1 << 1), + no3A = (1 << 2), + noMp = (1 << 3), + noDp = (1 << 4), + noPdaf = (1 << 5), +}; +typedef int32_t InnerNodeOptionsFlags; + +struct SubGraphPublicInnerNodeConfiguration { + bool no3A = false; + bool noMp = false; + bool noDp = false; + bool noPdaf = false; +}; + +struct KernelFragments { + StaticGraphFragmentDesc fragmentDescriptors[4]; +}; + +class OuterNode { +public: + /** + * \brief resourceId - represents the physical ID of the node, e.g. cb_id for CB node. + */ + uint8_t resourceId = 0; + + /** + * \brief contextId - represents the logical Id of the node according to the use-case. + * Same physical nodes in given graph topology will have a different contextId + */ + uint8_t contextId = 0; + NodeTypes type = NodeTypes::Cb; + HwBitmaps bitmaps; + StaticGraphNodeKernels nodeKernels = {}; + + uint8_t numberOfFragments = 0; + HwBitmaps bitmapsNotVanished = {}; + uint64_t disabledRunKernelsBitmapNotVanished[2] = {}; + VanishOption fragmentVanishStatus[4] = {}; + uint16_t* kernelListInConfigOrder = {}; + OuterNode() {} + ~OuterNode(); + + void Init(uint8_t nodeResourceId, + NodeTypes nodeType, + uint32_t kernelCount, + uint32_t operationMode, + uint32_t streamId, + uint8_t nodeNumberOfFragments); + + uint8_t GetNumberOfFragments(); + virtual void configVanishStatus(VanishOption vanishStatus); + const uint16_t* getRunKernelConfigOrder(); + + void SetDisabledKernels(uint64_t disabledRunKernelsBitmap[2]); + +protected: + void InitRunKernels(uint16_t* kernelsUuids, uint64_t kernelsRcbBitmap[2], StaticGraphKernelRes* resolutionInfos, uint64_t kernelsResolutionHistoryGroupBitmap[2], uint64_t kernelFragmentDescriptorGroupBitmap[2], StaticGraphKernelRes* resolutionHistories, StaticGraphKernelBppConfiguration* bppInfos, uint8_t* systemApisSizes, uint8_t* systemApiData, KernelFragments* fragmentDescriptors, uint16_t* runKernelConfigOrder); +}; + +struct GraphLink { + bool isActive = true; + + GraphElementType src; + OuterNode* srcNode = nullptr; + GraphElementType dest; + OuterNode* destNode = nullptr; + + uint8_t srcTerminalId = 0; + uint8_t destTerminalId = 0; + + FormatType format; + LinkType type; + uint8_t frameDelay = 0; + + StaticGraphLinkConfiguration* linkConfiguration = nullptr; + StaticGraphLinkCompressionConfiguration* linkCompressionConfiguration = nullptr; +}; + +struct SubGraphInnerNodeConfiguration +{ + SubGraphPublicInnerNodeConfiguration* imageInnerOptions = nullptr; + SubGraphPublicInnerNodeConfiguration* irInnerOptions = nullptr; + SubGraphPublicInnerNodeConfiguration* rawInnerOptions = nullptr; +}; + +class GraphTopology { +public: + GraphLink** links = nullptr; + int32_t numOfLinks = 0; + + GraphTopology(GraphLink** links, int32_t numOfLinks, VirtualSinkMapping* sinkMappingConfiguration); + virtual StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration); + bool isLinkVanished(GraphLink* link); + +protected: + VirtualSinkMapping* _sinkMappingConfiguration = nullptr; + static InnerNodeOptionsFlags GetInnerOptions(SubGraphPublicInnerNodeConfiguration* publicInnerOptions); + +}; + +class IStaticGraphConfig +{ +public: + virtual ~IStaticGraphConfig(){} + IStaticGraphConfig(SensorMode* selectedSensorMode, VirtualSinkMapping* sinkMappingConfiguration, int32_t graphId, int32_t selectedSettingsId); + StaticGraphStatus getGraphTopology(GraphTopology** topology); + StaticGraphStatus getSensorMode(SensorMode** sensorMode); + StaticGraphStatus getGraphId(int32_t* id); + StaticGraphStatus getSettingsId(int32_t* id); + StaticGraphStatus getVirtualSinkConnection(VirtualSink& virtualSink, HwSink* hwSink); + +protected: + SensorMode* _selectedSensorMode = nullptr; + GraphTopology* _selectedGraphTopology = nullptr; + VirtualSinkMapping* _sinkMappingConfiguration = &_selectedSinkMappingConfiguration; +private: + int32_t _graphId; + int32_t _settingsId; + VirtualSinkMapping _selectedSinkMappingConfiguration; +}; + +#pragma pack(push, 4) + +struct IsysOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[1]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[1]; + StaticGraphKernelRes resolutionHistories[1]; + StaticGraphKernelBppConfiguration bppInfos[1]; +}; + +struct LbffBayerNoGmvNoTnrNoSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[20]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[17]; + StaticGraphKernelRes resolutionHistories[13]; + StaticGraphKernelBppConfiguration bppInfos[34]; + uint8_t systemApiConfiguration[2154]; +}; + +struct LbffBayerWithGmvNoTnrNoSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[24]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[21]; + StaticGraphKernelRes resolutionHistories[17]; + StaticGraphKernelBppConfiguration bppInfos[38]; + uint8_t systemApiConfiguration[2846]; +}; + +struct SwGdcOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[1]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[1]; + StaticGraphKernelRes resolutionHistories[1]; + StaticGraphKernelBppConfiguration bppInfos[1]; +}; + +struct LbffBayerNoGmvWithTnrNoSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[31]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[25]; + StaticGraphKernelRes resolutionHistories[19]; + StaticGraphKernelBppConfiguration bppInfos[46]; + uint8_t systemApiConfiguration[3484]; +}; + +struct LbffBayerWithGmvWithTnrNoSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[35]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[29]; + StaticGraphKernelRes resolutionHistories[23]; + StaticGraphKernelBppConfiguration bppInfos[50]; + uint8_t systemApiConfiguration[4176]; +}; + +struct IsysWithCvOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[4]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[3]; + StaticGraphKernelRes resolutionHistories[4]; + StaticGraphKernelBppConfiguration bppInfos[4]; + uint8_t systemApiConfiguration[54]; +}; + +struct SwSegnetOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + uint32_t streamId = 0; + uint8_t tuningMode = 0; +}; + +struct LbffBayerWithGmvWithTnrWithSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[51]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[41]; + StaticGraphKernelRes resolutionHistories[39]; + StaticGraphKernelBppConfiguration bppInfos[62]; + uint8_t systemApiConfiguration[5496]; +}; + +struct SwScalerOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[1]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[1]; + StaticGraphKernelRes resolutionHistories[1]; + StaticGraphKernelBppConfiguration bppInfos[1]; + uint8_t systemApiConfiguration[5]; +}; + +struct SwNntmOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[1]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionHistories[1]; + StaticGraphKernelBppConfiguration bppInfos[1]; + uint8_t systemApiConfiguration[5]; +}; + +struct LbffBayerNoGmvWithTnrWithSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[47]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[37]; + StaticGraphKernelRes resolutionHistories[35]; + StaticGraphKernelBppConfiguration bppInfos[58]; + uint8_t systemApiConfiguration[4804]; +}; + +struct IsysPdaf2WithCvOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[5]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[4]; + StaticGraphKernelRes resolutionHistories[5]; + StaticGraphKernelBppConfiguration bppInfos[5]; + uint8_t systemApiConfiguration[54]; +}; + +struct LbffBayerPdaf2NoGmvWithTnrWithSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[51]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[41]; + StaticGraphKernelRes resolutionHistories[39]; + StaticGraphKernelBppConfiguration bppInfos[62]; + uint8_t systemApiConfiguration[5276]; +}; + +struct LbffBayerPdaf2WithTnrWithSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[55]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[45]; + StaticGraphKernelRes resolutionHistories[43]; + StaticGraphKernelBppConfiguration bppInfos[66]; + uint8_t systemApiConfiguration[5968]; +}; + +struct LbffBayerPdaf3NoGmvWithTnrWithSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[50]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[40]; + StaticGraphKernelRes resolutionHistories[37]; + StaticGraphKernelBppConfiguration bppInfos[61]; + uint8_t systemApiConfiguration[5056]; +}; + +struct LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[52]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[42]; + StaticGraphKernelRes resolutionHistories[39]; + StaticGraphKernelBppConfiguration bppInfos[63]; + uint8_t systemApiConfiguration[5496]; +}; + +struct IsysPdaf2OuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[2]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[2]; + StaticGraphKernelRes resolutionHistories[2]; + StaticGraphKernelBppConfiguration bppInfos[2]; +}; + +struct LbffBayerPdaf2NoGmvNoTnrNoSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[24]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[21]; + StaticGraphKernelRes resolutionHistories[17]; + StaticGraphKernelBppConfiguration bppInfos[38]; + uint8_t systemApiConfiguration[2626]; +}; + +struct LbffBayerPdaf2WithGmvNoTnrNoSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[28]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[25]; + StaticGraphKernelRes resolutionHistories[21]; + StaticGraphKernelBppConfiguration bppInfos[42]; + uint8_t systemApiConfiguration[3318]; +}; + +struct LbffBayerPdaf2NoGmvWithTnrNoSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[35]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[29]; + StaticGraphKernelRes resolutionHistories[23]; + StaticGraphKernelBppConfiguration bppInfos[50]; + uint8_t systemApiConfiguration[3956]; +}; + +struct LbffBayerPdaf2WithGmvWithTnrNoSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[39]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[33]; + StaticGraphKernelRes resolutionHistories[27]; + StaticGraphKernelBppConfiguration bppInfos[54]; + uint8_t systemApiConfiguration[4648]; +}; + +struct LbffBayerPdaf2WithGmvWithTnrWithSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[55]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[45]; + StaticGraphKernelRes resolutionHistories[43]; + StaticGraphKernelBppConfiguration bppInfos[66]; + uint8_t systemApiConfiguration[5968]; +}; + +struct LbffBayerPdaf3NoGmvNoTnrNoSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[23]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[20]; + StaticGraphKernelRes resolutionHistories[15]; + StaticGraphKernelBppConfiguration bppInfos[37]; + uint8_t systemApiConfiguration[2406]; +}; + +struct LbffBayerPdaf3WithGmvNoTnrNoSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[27]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[24]; + StaticGraphKernelRes resolutionHistories[19]; + StaticGraphKernelBppConfiguration bppInfos[41]; + uint8_t systemApiConfiguration[3098]; +}; + +struct LbffBayerPdaf3NoGmvWithTnrNoSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[34]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[28]; + StaticGraphKernelRes resolutionHistories[21]; + StaticGraphKernelBppConfiguration bppInfos[49]; + uint8_t systemApiConfiguration[3736]; +}; + +struct LbffBayerPdaf3WithGmvWithTnrNoSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[38]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[32]; + StaticGraphKernelRes resolutionHistories[25]; + StaticGraphKernelBppConfiguration bppInfos[53]; + uint8_t systemApiConfiguration[4428]; +}; + +struct LbffBayerPdaf3WithGmvWithTnrWithSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[54]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[44]; + StaticGraphKernelRes resolutionHistories[41]; + StaticGraphKernelBppConfiguration bppInfos[65]; + uint8_t systemApiConfiguration[5748]; +}; + +struct IsysDolOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[2]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[2]; + StaticGraphKernelRes resolutionHistories[2]; + StaticGraphKernelBppConfiguration bppInfos[2]; +}; + +struct LbffDol2InputsNoGmvNoTnrNoSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[22]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[19]; + StaticGraphKernelRes resolutionHistories[15]; + StaticGraphKernelBppConfiguration bppInfos[37]; + uint8_t systemApiConfiguration[2599]; +}; + +struct LbffDol2InputsWithGmvNoTnrNoSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[26]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[23]; + StaticGraphKernelRes resolutionHistories[19]; + StaticGraphKernelBppConfiguration bppInfos[41]; + uint8_t systemApiConfiguration[3291]; +}; + +struct LbffDol2InputsNoGmvWithTnrNoSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[33]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[27]; + StaticGraphKernelRes resolutionHistories[21]; + StaticGraphKernelBppConfiguration bppInfos[49]; + uint8_t systemApiConfiguration[3929]; +}; + +struct LbffDol2InputsWithGmvWithTnrNoSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[37]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[31]; + StaticGraphKernelRes resolutionHistories[25]; + StaticGraphKernelBppConfiguration bppInfos[53]; + uint8_t systemApiConfiguration[4621]; +}; + +struct LbffDolSmoothOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[3]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[2]; + StaticGraphKernelRes resolutionHistories[2]; + StaticGraphKernelBppConfiguration bppInfos[8]; + uint8_t systemApiConfiguration[476]; +}; + +struct LbffDol3InputsNoGmvNoTnrNoSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[23]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[20]; + StaticGraphKernelRes resolutionHistories[16]; + StaticGraphKernelBppConfiguration bppInfos[38]; + uint8_t systemApiConfiguration[2819]; +}; + +struct LbffDol3InputsWithGmvNoTnrNoSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[27]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[24]; + StaticGraphKernelRes resolutionHistories[20]; + StaticGraphKernelBppConfiguration bppInfos[42]; + uint8_t systemApiConfiguration[3511]; +}; + +struct LbffDol3InputsNoGmvWithTnrNoSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[34]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[28]; + StaticGraphKernelRes resolutionHistories[22]; + StaticGraphKernelBppConfiguration bppInfos[50]; + uint8_t systemApiConfiguration[4149]; +}; + +struct LbffDol3InputsWithGmvWithTnrNoSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[38]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[32]; + StaticGraphKernelRes resolutionHistories[26]; + StaticGraphKernelBppConfiguration bppInfos[54]; + uint8_t systemApiConfiguration[4841]; +}; + +struct LbffRgbIrNoGmvNoTnrNoSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[22]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[19]; + StaticGraphKernelRes resolutionHistories[15]; + StaticGraphKernelBppConfiguration bppInfos[36]; + uint8_t systemApiConfiguration[2594]; +}; + +struct LbffRgbIrIrNoGmvNoTnrNoSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[19]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[16]; + StaticGraphKernelRes resolutionHistories[13]; + StaticGraphKernelBppConfiguration bppInfos[32]; + uint8_t systemApiConfiguration[2134]; +}; + +struct LbffRgbIrWithGmvNoTnrNoSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[26]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[23]; + StaticGraphKernelRes resolutionHistories[19]; + StaticGraphKernelBppConfiguration bppInfos[40]; + uint8_t systemApiConfiguration[3286]; +}; + +struct LbffRgbIrNoGmvWithTnrNoSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[33]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[27]; + StaticGraphKernelRes resolutionHistories[21]; + StaticGraphKernelBppConfiguration bppInfos[48]; + uint8_t systemApiConfiguration[3924]; +}; + +struct LbffRgbIrIrNoGmvWithTnrNoSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[30]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[24]; + StaticGraphKernelRes resolutionHistories[19]; + StaticGraphKernelBppConfiguration bppInfos[44]; + uint8_t systemApiConfiguration[3464]; +}; + +struct LbffRgbIrWithGmvWithTnrNoSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[37]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[31]; + StaticGraphKernelRes resolutionHistories[25]; + StaticGraphKernelBppConfiguration bppInfos[52]; + uint8_t systemApiConfiguration[4616]; +}; + +struct LbffIrNoGmvNoTnrNoSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[19]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[16]; + StaticGraphKernelRes resolutionHistories[13]; + StaticGraphKernelBppConfiguration bppInfos[33]; + uint8_t systemApiConfiguration[2154]; +}; + +struct LbffIrWithGmvNoTnrNoSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[23]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[20]; + StaticGraphKernelRes resolutionHistories[17]; + StaticGraphKernelBppConfiguration bppInfos[37]; + uint8_t systemApiConfiguration[2846]; +}; + +struct LbffIrNoGmvWithTnrNoSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[30]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[24]; + StaticGraphKernelRes resolutionHistories[19]; + StaticGraphKernelBppConfiguration bppInfos[45]; + uint8_t systemApiConfiguration[3484]; +}; + +struct LbffIrWithGmvWithTnrNoSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[34]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[28]; + StaticGraphKernelRes resolutionHistories[23]; + StaticGraphKernelBppConfiguration bppInfos[49]; + uint8_t systemApiConfiguration[4176]; +}; + +struct LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[25]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[22]; + StaticGraphKernelRes resolutionHistories[17]; + StaticGraphKernelBppConfiguration bppInfos[39]; + uint8_t systemApiConfiguration[2846]; +}; + +struct LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[29]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[26]; + StaticGraphKernelRes resolutionHistories[21]; + StaticGraphKernelBppConfiguration bppInfos[43]; + uint8_t systemApiConfiguration[3538]; +}; + +struct LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[36]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[30]; + StaticGraphKernelRes resolutionHistories[23]; + StaticGraphKernelBppConfiguration bppInfos[51]; + uint8_t systemApiConfiguration[4176]; +}; + +struct LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[40]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[34]; + StaticGraphKernelRes resolutionHistories[27]; + StaticGraphKernelBppConfiguration bppInfos[55]; + uint8_t systemApiConfiguration[4868]; +}; + +struct LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[56]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[46]; + StaticGraphKernelRes resolutionHistories[43]; + StaticGraphKernelBppConfiguration bppInfos[67]; + uint8_t systemApiConfiguration[6188]; +}; + +struct LbffBayerNoGmvNoTnrWithSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[31]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[25]; + StaticGraphKernelRes resolutionHistories[24]; + StaticGraphKernelBppConfiguration bppInfos[42]; + uint8_t systemApiConfiguration[3034]; +}; + +struct LbffBayerWithGmvNoTnrWithSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[35]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[29]; + StaticGraphKernelRes resolutionHistories[28]; + StaticGraphKernelBppConfiguration bppInfos[46]; + uint8_t systemApiConfiguration[3726]; +}; + +struct LbffBayerNoGmvWithTnrWithOpacityOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[36]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[29]; + StaticGraphKernelRes resolutionHistories[24]; + StaticGraphKernelBppConfiguration bppInfos[50]; + uint8_t systemApiConfiguration[3924]; +}; + +struct LbffBayerPdaf2NoGmvNoTnrWithSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[35]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[29]; + StaticGraphKernelRes resolutionHistories[28]; + StaticGraphKernelBppConfiguration bppInfos[46]; + uint8_t systemApiConfiguration[3506]; +}; + +struct LbffBayerPdaf2WithGmvNoTnrWithSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[39]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[33]; + StaticGraphKernelRes resolutionHistories[32]; + StaticGraphKernelBppConfiguration bppInfos[50]; + uint8_t systemApiConfiguration[4198]; +}; + +struct LbffBayerPdaf3NoGmvNoTnrWithSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[34]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[28]; + StaticGraphKernelRes resolutionHistories[26]; + StaticGraphKernelBppConfiguration bppInfos[45]; + uint8_t systemApiConfiguration[3286]; +}; + +struct LbffBayerPdaf3WithGmvNoTnrWithSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[38]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[32]; + StaticGraphKernelRes resolutionHistories[30]; + StaticGraphKernelBppConfiguration bppInfos[49]; + uint8_t systemApiConfiguration[3978]; +}; + +struct IsysDolWithCvOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[5]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[4]; + StaticGraphKernelRes resolutionHistories[5]; + StaticGraphKernelBppConfiguration bppInfos[5]; + uint8_t systemApiConfiguration[54]; +}; + +struct LbffDol2InputsNoGmvNoTnrWithSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[33]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[27]; + StaticGraphKernelRes resolutionHistories[26]; + StaticGraphKernelBppConfiguration bppInfos[45]; + uint8_t systemApiConfiguration[3479]; +}; + +struct LbffDol2InputsWithGmvNoTnrWithSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[37]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[31]; + StaticGraphKernelRes resolutionHistories[30]; + StaticGraphKernelBppConfiguration bppInfos[49]; + uint8_t systemApiConfiguration[4171]; +}; + +struct LbffDol2InputsNoGmvWithTnrWithSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[49]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[39]; + StaticGraphKernelRes resolutionHistories[37]; + StaticGraphKernelBppConfiguration bppInfos[61]; + uint8_t systemApiConfiguration[5249]; +}; + +struct LbffDol2InputsWithGmvWithTnrWithSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[53]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[43]; + StaticGraphKernelRes resolutionHistories[41]; + StaticGraphKernelBppConfiguration bppInfos[65]; + uint8_t systemApiConfiguration[5941]; +}; + +struct LbffDol3InputsNoGmvNoTnrWithSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[34]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[28]; + StaticGraphKernelRes resolutionHistories[27]; + StaticGraphKernelBppConfiguration bppInfos[46]; + uint8_t systemApiConfiguration[3699]; +}; + +struct LbffDol3InputsWithGmvNoTnrWithSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[38]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[32]; + StaticGraphKernelRes resolutionHistories[31]; + StaticGraphKernelBppConfiguration bppInfos[50]; + uint8_t systemApiConfiguration[4391]; +}; + +struct LbffDol3InputsNoGmvWithTnrWithSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[50]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[40]; + StaticGraphKernelRes resolutionHistories[38]; + StaticGraphKernelBppConfiguration bppInfos[62]; + uint8_t systemApiConfiguration[5469]; +}; + +struct LbffDol3InputsWithGmvWithTnrWithSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[54]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[44]; + StaticGraphKernelRes resolutionHistories[42]; + StaticGraphKernelBppConfiguration bppInfos[66]; + uint8_t systemApiConfiguration[6161]; +}; + +struct LbffRgbIrNoGmvNoTnrWithSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[33]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[27]; + StaticGraphKernelRes resolutionHistories[26]; + StaticGraphKernelBppConfiguration bppInfos[44]; + uint8_t systemApiConfiguration[3474]; +}; + +struct LbffRgbIrWithGmvNoTnrWithSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[37]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[31]; + StaticGraphKernelRes resolutionHistories[30]; + StaticGraphKernelBppConfiguration bppInfos[48]; + uint8_t systemApiConfiguration[4166]; +}; + +struct LbffRgbIrNoGmvWithTnrWithSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[49]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[39]; + StaticGraphKernelRes resolutionHistories[37]; + StaticGraphKernelBppConfiguration bppInfos[60]; + uint8_t systemApiConfiguration[5244]; +}; + +struct LbffRgbIrWithGmvWithTnrWithSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[53]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[43]; + StaticGraphKernelRes resolutionHistories[41]; + StaticGraphKernelBppConfiguration bppInfos[64]; + uint8_t systemApiConfiguration[5936]; +}; + +struct LbffIrNoGmvNoTnrWithSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[27]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[22]; + StaticGraphKernelRes resolutionHistories[21]; + StaticGraphKernelBppConfiguration bppInfos[39]; + uint8_t systemApiConfiguration[2814]; +}; + +struct LbffIrWithGmvNoTnrWithSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[31]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[26]; + StaticGraphKernelRes resolutionHistories[25]; + StaticGraphKernelBppConfiguration bppInfos[43]; + uint8_t systemApiConfiguration[3506]; +}; + +struct LbffIrNoGmvWithTnrWithSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[43]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[34]; + StaticGraphKernelRes resolutionHistories[32]; + StaticGraphKernelBppConfiguration bppInfos[55]; + uint8_t systemApiConfiguration[4584]; +}; + +struct LbffIrWithGmvWithTnrWithSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[47]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[38]; + StaticGraphKernelRes resolutionHistories[36]; + StaticGraphKernelBppConfiguration bppInfos[59]; + uint8_t systemApiConfiguration[5276]; +}; + +struct LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[36]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[30]; + StaticGraphKernelRes resolutionHistories[28]; + StaticGraphKernelBppConfiguration bppInfos[47]; + uint8_t systemApiConfiguration[3726]; +}; + +struct LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[40]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[34]; + StaticGraphKernelRes resolutionHistories[32]; + StaticGraphKernelBppConfiguration bppInfos[51]; + uint8_t systemApiConfiguration[4418]; +}; + +struct WithCvOuterNodeConfiguration +{ + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[6]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[5]; + StaticGraphKernelRes resolutionHistories[6]; + StaticGraphKernelBppConfiguration bppInfos[6]; + uint8_t systemApiConfiguration[54]; +}; + +struct GraphConfiguration100000 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffBayerNoGmvNoTnrNoSapOuterNodeConfiguration lbffBayerNoGmvNoTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[9]; +}; + +struct GraphConfiguration100001 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffBayerWithGmvNoTnrNoSapOuterNodeConfiguration lbffBayerWithGmvNoTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[14]; +}; + +struct GraphConfiguration100002 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffBayerNoGmvWithTnrNoSapOuterNodeConfiguration lbffBayerNoGmvWithTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[12]; +}; + +struct GraphConfiguration100003 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffBayerWithGmvWithTnrNoSapOuterNodeConfiguration lbffBayerWithGmvWithTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[17]; +}; + +struct GraphConfiguration100137 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffBayerWithGmvWithTnrWithSapOuterNodeConfiguration lbffBayerWithGmvWithTnrWithSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[28]; +}; + +struct GraphConfiguration100079 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffBayerNoGmvWithTnrNoSapOuterNodeConfiguration lbffBayerNoGmvWithTnrNoSapOuterNodeConfiguration; + SwNntmOuterNodeConfiguration swNntmOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[17]; +}; + +struct GraphConfiguration100080 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffBayerNoGmvWithTnrNoSapOuterNodeConfiguration lbffBayerNoGmvWithTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[17]; +}; + +struct GraphConfiguration100138 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffBayerNoGmvWithTnrWithSapOuterNodeConfiguration lbffBayerNoGmvWithTnrWithSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[26]; +}; + +struct GraphConfiguration100142 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysPdaf2WithCvOuterNodeConfiguration isysPdaf2WithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffBayerPdaf2NoGmvWithTnrWithSapOuterNodeConfiguration lbffBayerPdaf2NoGmvWithTnrWithSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[29]; +}; + +struct GraphConfiguration100162 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysPdaf2WithCvOuterNodeConfiguration isysPdaf2WithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffBayerPdaf2WithTnrWithSapOuterNodeConfiguration lbffBayerPdaf2WithTnrWithSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[24]; +}; + +struct GraphConfiguration100143 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + LbffBayerPdaf3NoGmvWithTnrWithSapOuterNodeConfiguration lbffBayerPdaf3NoGmvWithTnrWithSapOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[27]; +}; + +struct GraphConfiguration100144 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNodeConfiguration lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[28]; +}; + +struct GraphConfiguration100081 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffBayerWithGmvWithTnrNoSapOuterNodeConfiguration lbffBayerWithGmvWithTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[19]; +}; + +struct GraphConfiguration100004 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysPdaf2OuterNodeConfiguration isysPdaf2OuterNodeConfiguration; + LbffBayerPdaf2NoGmvNoTnrNoSapOuterNodeConfiguration lbffBayerPdaf2NoGmvNoTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[12]; +}; + +struct GraphConfiguration100005 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysPdaf2OuterNodeConfiguration isysPdaf2OuterNodeConfiguration; + LbffBayerPdaf2WithGmvNoTnrNoSapOuterNodeConfiguration lbffBayerPdaf2WithGmvNoTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[17]; +}; + +struct GraphConfiguration100006 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysPdaf2OuterNodeConfiguration isysPdaf2OuterNodeConfiguration; + LbffBayerPdaf2NoGmvWithTnrNoSapOuterNodeConfiguration lbffBayerPdaf2NoGmvWithTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[15]; +}; + +struct GraphConfiguration100066 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysPdaf2OuterNodeConfiguration isysPdaf2OuterNodeConfiguration; + LbffBayerPdaf2NoGmvWithTnrNoSapOuterNodeConfiguration lbffBayerPdaf2NoGmvWithTnrNoSapOuterNodeConfiguration; + SwNntmOuterNodeConfiguration swNntmOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[20]; +}; + +struct GraphConfiguration100007 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysPdaf2OuterNodeConfiguration isysPdaf2OuterNodeConfiguration; + LbffBayerPdaf2WithGmvWithTnrNoSapOuterNodeConfiguration lbffBayerPdaf2WithGmvWithTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[20]; +}; + +struct GraphConfiguration100067 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysPdaf2OuterNodeConfiguration isysPdaf2OuterNodeConfiguration; + LbffBayerPdaf2WithGmvWithTnrNoSapOuterNodeConfiguration lbffBayerPdaf2WithGmvWithTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + SwNntmOuterNodeConfiguration swNntmOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[23]; +}; + +struct GraphConfiguration100139 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysPdaf2WithCvOuterNodeConfiguration isysPdaf2WithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffBayerPdaf2WithGmvWithTnrWithSapOuterNodeConfiguration lbffBayerPdaf2WithGmvWithTnrWithSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[31]; +}; + +struct GraphConfiguration100169 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysPdaf2WithCvOuterNodeConfiguration isysPdaf2WithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffBayerPdaf2WithTnrWithSapOuterNodeConfiguration lbffBayerPdaf2WithTnrWithSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[24]; +}; + +struct GraphConfiguration100008 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffBayerPdaf3NoGmvNoTnrNoSapOuterNodeConfiguration lbffBayerPdaf3NoGmvNoTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[10]; +}; + +struct GraphConfiguration100009 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffBayerPdaf3WithGmvNoTnrNoSapOuterNodeConfiguration lbffBayerPdaf3WithGmvNoTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[15]; +}; + +struct GraphConfiguration100010 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffBayerPdaf3NoGmvWithTnrNoSapOuterNodeConfiguration lbffBayerPdaf3NoGmvWithTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[13]; +}; + +struct GraphConfiguration100011 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffBayerPdaf3WithGmvWithTnrNoSapOuterNodeConfiguration lbffBayerPdaf3WithGmvWithTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[18]; +}; + +struct GraphConfiguration100140 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + LbffBayerPdaf3WithGmvWithTnrWithSapOuterNodeConfiguration lbffBayerPdaf3WithGmvWithTnrWithSapOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[29]; +}; + +struct GraphConfiguration100045 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffBayerPdaf3NoGmvWithTnrNoSapOuterNodeConfiguration lbffBayerPdaf3NoGmvWithTnrNoSapOuterNodeConfiguration; + SwNntmOuterNodeConfiguration swNntmOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[18]; +}; + +struct GraphConfiguration100012 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysDolOuterNodeConfiguration isysDolOuterNodeConfiguration; + LbffDol2InputsNoGmvNoTnrNoSapOuterNodeConfiguration lbffDol2InputsNoGmvNoTnrNoSapOuterNodeConfiguration; + SwNntmOuterNodeConfiguration swNntmOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[17]; +}; + +struct GraphConfiguration100013 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysDolOuterNodeConfiguration isysDolOuterNodeConfiguration; + LbffDol2InputsWithGmvNoTnrNoSapOuterNodeConfiguration lbffDol2InputsWithGmvNoTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[17]; +}; + +struct GraphConfiguration100014 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysDolOuterNodeConfiguration isysDolOuterNodeConfiguration; + LbffDol2InputsNoGmvWithTnrNoSapOuterNodeConfiguration lbffDol2InputsNoGmvWithTnrNoSapOuterNodeConfiguration; + SwNntmOuterNodeConfiguration swNntmOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[20]; +}; + +struct GraphConfiguration100015 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysDolOuterNodeConfiguration isysDolOuterNodeConfiguration; + LbffDol2InputsWithGmvWithTnrNoSapOuterNodeConfiguration lbffDol2InputsWithGmvWithTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[20]; +}; + +struct GraphConfiguration100016 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysDolOuterNodeConfiguration isysDolOuterNodeConfiguration; + LbffDolSmoothOuterNodeConfiguration lbffDolSmoothOuterNodeConfiguration; + LbffDol3InputsNoGmvNoTnrNoSapOuterNodeConfiguration lbffDol3InputsNoGmvNoTnrNoSapOuterNodeConfiguration; + SwNntmOuterNodeConfiguration swNntmOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[19]; +}; + +struct GraphConfiguration100017 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysDolOuterNodeConfiguration isysDolOuterNodeConfiguration; + LbffDolSmoothOuterNodeConfiguration lbffDolSmoothOuterNodeConfiguration; + LbffDol3InputsWithGmvNoTnrNoSapOuterNodeConfiguration lbffDol3InputsWithGmvNoTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[19]; +}; + +struct GraphConfiguration100018 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysDolOuterNodeConfiguration isysDolOuterNodeConfiguration; + LbffDolSmoothOuterNodeConfiguration lbffDolSmoothOuterNodeConfiguration; + LbffDol3InputsNoGmvWithTnrNoSapOuterNodeConfiguration lbffDol3InputsNoGmvWithTnrNoSapOuterNodeConfiguration; + SwNntmOuterNodeConfiguration swNntmOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[22]; +}; + +struct GraphConfiguration100019 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysDolOuterNodeConfiguration isysDolOuterNodeConfiguration; + LbffDolSmoothOuterNodeConfiguration lbffDolSmoothOuterNodeConfiguration; + LbffDol3InputsWithGmvWithTnrNoSapOuterNodeConfiguration lbffDol3InputsWithGmvWithTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[22]; +}; + +struct GraphConfiguration100020 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffRgbIrNoGmvNoTnrNoSapOuterNodeConfiguration lbffRgbIrNoGmvNoTnrNoSapOuterNodeConfiguration; + LbffRgbIrIrNoGmvNoTnrNoSapOuterNodeConfiguration lbffRgbIrIrNoGmvNoTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[17]; +}; + +struct GraphConfiguration100021 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffRgbIrWithGmvNoTnrNoSapOuterNodeConfiguration lbffRgbIrWithGmvNoTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + LbffRgbIrIrNoGmvNoTnrNoSapOuterNodeConfiguration lbffRgbIrIrNoGmvNoTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[22]; +}; + +struct GraphConfiguration100022 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffRgbIrNoGmvWithTnrNoSapOuterNodeConfiguration lbffRgbIrNoGmvWithTnrNoSapOuterNodeConfiguration; + LbffRgbIrIrNoGmvWithTnrNoSapOuterNodeConfiguration lbffRgbIrIrNoGmvWithTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[23]; +}; + +struct GraphConfiguration100023 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffRgbIrWithGmvWithTnrNoSapOuterNodeConfiguration lbffRgbIrWithGmvWithTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + LbffRgbIrIrNoGmvWithTnrNoSapOuterNodeConfiguration lbffRgbIrIrNoGmvWithTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[28]; +}; + +struct GraphConfiguration100024 +{ + VirtualSinkMapping sinkMappingConfiguration; + LbffBayerNoGmvNoTnrNoSapOuterNodeConfiguration lbffBayerNoGmvNoTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[8]; +}; + +struct GraphConfiguration100040 +{ + VirtualSinkMapping sinkMappingConfiguration; + LbffBayerWithGmvNoTnrNoSapOuterNodeConfiguration lbffBayerWithGmvNoTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[13]; +}; + +struct GraphConfiguration100041 +{ + VirtualSinkMapping sinkMappingConfiguration; + LbffBayerWithGmvWithTnrNoSapOuterNodeConfiguration lbffBayerWithGmvWithTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[16]; +}; + +struct GraphConfiguration100042 +{ + VirtualSinkMapping sinkMappingConfiguration; + LbffBayerNoGmvWithTnrNoSapOuterNodeConfiguration lbffBayerNoGmvWithTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[11]; +}; + +struct GraphConfiguration100027 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffIrNoGmvNoTnrNoSapOuterNodeConfiguration lbffIrNoGmvNoTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[9]; +}; + +struct GraphConfiguration100028 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffIrWithGmvNoTnrNoSapOuterNodeConfiguration lbffIrWithGmvNoTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[14]; +}; + +struct GraphConfiguration100029 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffIrNoGmvWithTnrNoSapOuterNodeConfiguration lbffIrNoGmvWithTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[12]; +}; + +struct GraphConfiguration100030 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffIrWithGmvWithTnrNoSapOuterNodeConfiguration lbffIrWithGmvWithTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[17]; +}; + +struct GraphConfiguration100031 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNodeConfiguration lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[11]; +}; + +struct GraphConfiguration100032 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNodeConfiguration lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[16]; +}; + +struct GraphConfiguration100033 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNodeConfiguration lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[14]; +}; + +struct GraphConfiguration100034 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNodeConfiguration lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[19]; +}; + +struct GraphConfiguration100141 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNodeConfiguration lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[30]; +}; + +struct GraphConfiguration100100 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffBayerNoGmvNoTnrWithSapOuterNodeConfiguration lbffBayerNoGmvNoTnrWithSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[16]; +}; + +struct GraphConfiguration100101 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffBayerWithGmvNoTnrWithSapOuterNodeConfiguration lbffBayerWithGmvNoTnrWithSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[21]; +}; + +struct GraphConfiguration100102 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffBayerNoGmvWithTnrWithSapOuterNodeConfiguration lbffBayerNoGmvWithTnrWithSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[21]; +}; + +struct GraphConfiguration100157 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffBayerNoGmvWithTnrWithOpacityOuterNodeConfiguration lbffBayerNoGmvWithTnrWithOpacityOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[17]; +}; + +struct GraphConfiguration100103 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffBayerWithGmvWithTnrWithSapOuterNodeConfiguration lbffBayerWithGmvWithTnrWithSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[26]; +}; + +struct GraphConfiguration100135 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffBayerNoGmvWithTnrWithSapOuterNodeConfiguration lbffBayerNoGmvWithTnrWithSapOuterNodeConfiguration; + SwNntmOuterNodeConfiguration swNntmOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[26]; +}; + +struct GraphConfiguration100104 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysPdaf2WithCvOuterNodeConfiguration isysPdaf2WithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffBayerPdaf2NoGmvNoTnrWithSapOuterNodeConfiguration lbffBayerPdaf2NoGmvNoTnrWithSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[19]; +}; + +struct GraphConfiguration100105 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysPdaf2WithCvOuterNodeConfiguration isysPdaf2WithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffBayerPdaf2WithGmvNoTnrWithSapOuterNodeConfiguration lbffBayerPdaf2WithGmvNoTnrWithSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[24]; +}; + +struct GraphConfiguration100106 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysPdaf2WithCvOuterNodeConfiguration isysPdaf2WithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffBayerPdaf2NoGmvWithTnrWithSapOuterNodeConfiguration lbffBayerPdaf2NoGmvWithTnrWithSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[24]; +}; + +struct GraphConfiguration100166 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysPdaf2WithCvOuterNodeConfiguration isysPdaf2WithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffBayerPdaf2NoGmvWithTnrWithSapOuterNodeConfiguration lbffBayerPdaf2NoGmvWithTnrWithSapOuterNodeConfiguration; + SwNntmOuterNodeConfiguration swNntmOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[29]; +}; + +struct GraphConfiguration100107 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysPdaf2WithCvOuterNodeConfiguration isysPdaf2WithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffBayerPdaf2WithGmvWithTnrWithSapOuterNodeConfiguration lbffBayerPdaf2WithGmvWithTnrWithSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[29]; +}; + +struct GraphConfiguration100145 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysPdaf2WithCvOuterNodeConfiguration isysPdaf2WithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffBayerPdaf2WithGmvWithTnrWithSapOuterNodeConfiguration lbffBayerPdaf2WithGmvWithTnrWithSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + SwNntmOuterNodeConfiguration swNntmOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[32]; +}; + +struct GraphConfiguration100108 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + LbffBayerPdaf3NoGmvNoTnrWithSapOuterNodeConfiguration lbffBayerPdaf3NoGmvNoTnrWithSapOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[17]; +}; + +struct GraphConfiguration100109 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + LbffBayerPdaf3WithGmvNoTnrWithSapOuterNodeConfiguration lbffBayerPdaf3WithGmvNoTnrWithSapOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[22]; +}; + +struct GraphConfiguration100110 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + LbffBayerPdaf3NoGmvWithTnrWithSapOuterNodeConfiguration lbffBayerPdaf3NoGmvWithTnrWithSapOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[22]; +}; + +struct GraphConfiguration100111 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + LbffBayerPdaf3WithGmvWithTnrWithSapOuterNodeConfiguration lbffBayerPdaf3WithGmvWithTnrWithSapOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[27]; +}; + +struct GraphConfiguration100136 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + LbffBayerPdaf3NoGmvWithTnrWithSapOuterNodeConfiguration lbffBayerPdaf3NoGmvWithTnrWithSapOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + SwNntmOuterNodeConfiguration swNntmOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[27]; +}; + +struct GraphConfiguration100200 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNodeConfiguration lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNodeConfiguration; + SwNntmOuterNodeConfiguration swNntmOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[28]; +}; + +struct GraphConfiguration100201 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNodeConfiguration lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNodeConfiguration; + SwNntmOuterNodeConfiguration swNntmOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[21]; +}; + +struct GraphConfiguration100112 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysDolWithCvOuterNodeConfiguration isysDolWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffDol2InputsNoGmvNoTnrWithSapOuterNodeConfiguration lbffDol2InputsNoGmvNoTnrWithSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[20]; +}; + +struct GraphConfiguration100113 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysDolWithCvOuterNodeConfiguration isysDolWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffDol2InputsWithGmvNoTnrWithSapOuterNodeConfiguration lbffDol2InputsWithGmvNoTnrWithSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[25]; +}; + +struct GraphConfiguration100114 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysDolWithCvOuterNodeConfiguration isysDolWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffDol2InputsNoGmvWithTnrWithSapOuterNodeConfiguration lbffDol2InputsNoGmvWithTnrWithSapOuterNodeConfiguration; + SwNntmOuterNodeConfiguration swNntmOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[30]; +}; + +struct GraphConfiguration100146 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysDolWithCvOuterNodeConfiguration isysDolWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffDol2InputsNoGmvWithTnrWithSapOuterNodeConfiguration lbffDol2InputsNoGmvWithTnrWithSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[30]; +}; + +struct GraphConfiguration100115 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysDolWithCvOuterNodeConfiguration isysDolWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffDol2InputsWithGmvWithTnrWithSapOuterNodeConfiguration lbffDol2InputsWithGmvWithTnrWithSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[30]; +}; + +struct GraphConfiguration100116 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysDolWithCvOuterNodeConfiguration isysDolWithCvOuterNodeConfiguration; + LbffDolSmoothOuterNodeConfiguration lbffDolSmoothOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffDol3InputsNoGmvNoTnrWithSapOuterNodeConfiguration lbffDol3InputsNoGmvNoTnrWithSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[22]; +}; + +struct GraphConfiguration100117 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysDolWithCvOuterNodeConfiguration isysDolWithCvOuterNodeConfiguration; + LbffDolSmoothOuterNodeConfiguration lbffDolSmoothOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffDol3InputsWithGmvNoTnrWithSapOuterNodeConfiguration lbffDol3InputsWithGmvNoTnrWithSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[27]; +}; + +struct GraphConfiguration100118 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysDolWithCvOuterNodeConfiguration isysDolWithCvOuterNodeConfiguration; + LbffDolSmoothOuterNodeConfiguration lbffDolSmoothOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffDol3InputsNoGmvWithTnrWithSapOuterNodeConfiguration lbffDol3InputsNoGmvWithTnrWithSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[27]; +}; + +struct GraphConfiguration100119 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysDolWithCvOuterNodeConfiguration isysDolWithCvOuterNodeConfiguration; + LbffDolSmoothOuterNodeConfiguration lbffDolSmoothOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffDol3InputsWithGmvWithTnrWithSapOuterNodeConfiguration lbffDol3InputsWithGmvWithTnrWithSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[32]; +}; + +struct GraphConfiguration100120 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffRgbIrNoGmvNoTnrWithSapOuterNodeConfiguration lbffRgbIrNoGmvNoTnrWithSapOuterNodeConfiguration; + LbffRgbIrIrNoGmvNoTnrNoSapOuterNodeConfiguration lbffRgbIrIrNoGmvNoTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[24]; +}; + +struct GraphConfiguration100121 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffRgbIrWithGmvNoTnrWithSapOuterNodeConfiguration lbffRgbIrWithGmvNoTnrWithSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + LbffRgbIrIrNoGmvNoTnrNoSapOuterNodeConfiguration lbffRgbIrIrNoGmvNoTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[29]; +}; + +struct GraphConfiguration100122 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffRgbIrNoGmvWithTnrWithSapOuterNodeConfiguration lbffRgbIrNoGmvWithTnrWithSapOuterNodeConfiguration; + LbffRgbIrIrNoGmvWithTnrNoSapOuterNodeConfiguration lbffRgbIrIrNoGmvWithTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[32]; +}; + +struct GraphConfiguration100123 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffRgbIrWithGmvWithTnrWithSapOuterNodeConfiguration lbffRgbIrWithGmvWithTnrWithSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + LbffRgbIrIrNoGmvWithTnrNoSapOuterNodeConfiguration lbffRgbIrIrNoGmvWithTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[37]; +}; + +struct GraphConfiguration100127 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffIrNoGmvNoTnrWithSapOuterNodeConfiguration lbffIrNoGmvNoTnrWithSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[15]; +}; + +struct GraphConfiguration100128 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffIrWithGmvNoTnrWithSapOuterNodeConfiguration lbffIrWithGmvNoTnrWithSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[20]; +}; + +struct GraphConfiguration100129 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffIrNoGmvWithTnrWithSapOuterNodeConfiguration lbffIrNoGmvWithTnrWithSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[20]; +}; + +struct GraphConfiguration100130 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffIrWithGmvWithTnrWithSapOuterNodeConfiguration lbffIrWithGmvWithTnrWithSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[25]; +}; + +struct GraphConfiguration100131 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNodeConfiguration lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[18]; +}; + +struct GraphConfiguration100132 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNodeConfiguration lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[23]; +}; + +struct GraphConfiguration100133 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNodeConfiguration lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[23]; +}; + +struct GraphConfiguration100134 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNodeConfiguration lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[28]; +}; + +struct GraphConfiguration100235 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + LbffBayerNoGmvNoTnrNoSapOuterNodeConfiguration lbffBayerNoGmvNoTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[11]; +}; + +struct GraphConfiguration100236 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + LbffBayerWithGmvNoTnrNoSapOuterNodeConfiguration lbffBayerWithGmvNoTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[16]; +}; + +struct GraphConfiguration100202 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + LbffBayerNoGmvWithTnrNoSapOuterNodeConfiguration lbffBayerNoGmvWithTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[14]; +}; + +struct GraphConfiguration100203 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + LbffBayerWithGmvWithTnrNoSapOuterNodeConfiguration lbffBayerWithGmvWithTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[19]; +}; + +struct GraphConfiguration100279 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + LbffBayerNoGmvWithTnrNoSapOuterNodeConfiguration lbffBayerNoGmvWithTnrNoSapOuterNodeConfiguration; + SwNntmOuterNodeConfiguration swNntmOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[19]; +}; + +struct GraphConfiguration100280 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + LbffBayerNoGmvWithTnrNoSapOuterNodeConfiguration lbffBayerNoGmvWithTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[19]; +}; + +struct GraphConfiguration100281 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + LbffBayerWithGmvWithTnrNoSapOuterNodeConfiguration lbffBayerWithGmvWithTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[21]; +}; + +struct GraphConfiguration100204 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysPdaf2WithCvOuterNodeConfiguration isysPdaf2WithCvOuterNodeConfiguration; + LbffBayerPdaf2NoGmvNoTnrNoSapOuterNodeConfiguration lbffBayerPdaf2NoGmvNoTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[14]; +}; + +struct GraphConfiguration100205 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysPdaf2WithCvOuterNodeConfiguration isysPdaf2WithCvOuterNodeConfiguration; + LbffBayerPdaf2WithGmvNoTnrNoSapOuterNodeConfiguration lbffBayerPdaf2WithGmvNoTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[19]; +}; + +struct GraphConfiguration100206 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysPdaf2WithCvOuterNodeConfiguration isysPdaf2WithCvOuterNodeConfiguration; + LbffBayerPdaf2NoGmvWithTnrNoSapOuterNodeConfiguration lbffBayerPdaf2NoGmvWithTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[17]; +}; + +struct GraphConfiguration100266 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysPdaf2WithCvOuterNodeConfiguration isysPdaf2WithCvOuterNodeConfiguration; + LbffBayerPdaf2NoGmvWithTnrNoSapOuterNodeConfiguration lbffBayerPdaf2NoGmvWithTnrNoSapOuterNodeConfiguration; + SwNntmOuterNodeConfiguration swNntmOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[22]; +}; + +struct GraphConfiguration100207 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysPdaf2WithCvOuterNodeConfiguration isysPdaf2WithCvOuterNodeConfiguration; + LbffBayerPdaf2WithGmvWithTnrNoSapOuterNodeConfiguration lbffBayerPdaf2WithGmvWithTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[22]; +}; + +struct GraphConfiguration100267 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysPdaf2WithCvOuterNodeConfiguration isysPdaf2WithCvOuterNodeConfiguration; + LbffBayerPdaf2WithGmvWithTnrNoSapOuterNodeConfiguration lbffBayerPdaf2WithGmvWithTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + SwNntmOuterNodeConfiguration swNntmOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[25]; +}; + +struct GraphConfiguration100208 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + LbffBayerPdaf3NoGmvNoTnrNoSapOuterNodeConfiguration lbffBayerPdaf3NoGmvNoTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[12]; +}; + +struct GraphConfiguration100209 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + LbffBayerPdaf3WithGmvNoTnrNoSapOuterNodeConfiguration lbffBayerPdaf3WithGmvNoTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[17]; +}; + +struct GraphConfiguration100210 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + LbffBayerPdaf3NoGmvWithTnrNoSapOuterNodeConfiguration lbffBayerPdaf3NoGmvWithTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[15]; +}; + +struct GraphConfiguration100211 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + LbffBayerPdaf3WithGmvWithTnrNoSapOuterNodeConfiguration lbffBayerPdaf3WithGmvWithTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[20]; +}; + +struct GraphConfiguration100245 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + LbffBayerPdaf3NoGmvWithTnrNoSapOuterNodeConfiguration lbffBayerPdaf3NoGmvWithTnrNoSapOuterNodeConfiguration; + SwNntmOuterNodeConfiguration swNntmOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[20]; +}; + +struct GraphConfiguration100212 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysDolWithCvOuterNodeConfiguration isysDolWithCvOuterNodeConfiguration; + LbffDol2InputsNoGmvNoTnrNoSapOuterNodeConfiguration lbffDol2InputsNoGmvNoTnrNoSapOuterNodeConfiguration; + SwNntmOuterNodeConfiguration swNntmOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[19]; +}; + +struct GraphConfiguration100213 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysDolWithCvOuterNodeConfiguration isysDolWithCvOuterNodeConfiguration; + LbffDol2InputsWithGmvNoTnrNoSapOuterNodeConfiguration lbffDol2InputsWithGmvNoTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[19]; +}; + +struct GraphConfiguration100214 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysDolWithCvOuterNodeConfiguration isysDolWithCvOuterNodeConfiguration; + LbffDol2InputsNoGmvWithTnrNoSapOuterNodeConfiguration lbffDol2InputsNoGmvWithTnrNoSapOuterNodeConfiguration; + SwNntmOuterNodeConfiguration swNntmOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[22]; +}; + +struct GraphConfiguration100215 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysDolWithCvOuterNodeConfiguration isysDolWithCvOuterNodeConfiguration; + LbffDol2InputsWithGmvWithTnrNoSapOuterNodeConfiguration lbffDol2InputsWithGmvWithTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[22]; +}; + +struct GraphConfiguration100216 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysDolWithCvOuterNodeConfiguration isysDolWithCvOuterNodeConfiguration; + LbffDolSmoothOuterNodeConfiguration lbffDolSmoothOuterNodeConfiguration; + LbffDol3InputsNoGmvNoTnrNoSapOuterNodeConfiguration lbffDol3InputsNoGmvNoTnrNoSapOuterNodeConfiguration; + SwNntmOuterNodeConfiguration swNntmOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[21]; +}; + +struct GraphConfiguration100217 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysDolWithCvOuterNodeConfiguration isysDolWithCvOuterNodeConfiguration; + LbffDolSmoothOuterNodeConfiguration lbffDolSmoothOuterNodeConfiguration; + LbffDol3InputsWithGmvNoTnrNoSapOuterNodeConfiguration lbffDol3InputsWithGmvNoTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[21]; +}; + +struct GraphConfiguration100218 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysDolWithCvOuterNodeConfiguration isysDolWithCvOuterNodeConfiguration; + LbffDolSmoothOuterNodeConfiguration lbffDolSmoothOuterNodeConfiguration; + LbffDol3InputsNoGmvWithTnrNoSapOuterNodeConfiguration lbffDol3InputsNoGmvWithTnrNoSapOuterNodeConfiguration; + SwNntmOuterNodeConfiguration swNntmOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[24]; +}; + +struct GraphConfiguration100219 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysDolWithCvOuterNodeConfiguration isysDolWithCvOuterNodeConfiguration; + LbffDolSmoothOuterNodeConfiguration lbffDolSmoothOuterNodeConfiguration; + LbffDol3InputsWithGmvWithTnrNoSapOuterNodeConfiguration lbffDol3InputsWithGmvWithTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[24]; +}; + +struct GraphConfiguration100220 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + LbffRgbIrNoGmvNoTnrNoSapOuterNodeConfiguration lbffRgbIrNoGmvNoTnrNoSapOuterNodeConfiguration; + LbffRgbIrIrNoGmvNoTnrNoSapOuterNodeConfiguration lbffRgbIrIrNoGmvNoTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[19]; +}; + +struct GraphConfiguration100221 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + LbffRgbIrWithGmvNoTnrNoSapOuterNodeConfiguration lbffRgbIrWithGmvNoTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + LbffRgbIrIrNoGmvNoTnrNoSapOuterNodeConfiguration lbffRgbIrIrNoGmvNoTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[24]; +}; + +struct GraphConfiguration100222 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + LbffRgbIrNoGmvWithTnrNoSapOuterNodeConfiguration lbffRgbIrNoGmvWithTnrNoSapOuterNodeConfiguration; + LbffRgbIrIrNoGmvWithTnrNoSapOuterNodeConfiguration lbffRgbIrIrNoGmvWithTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[25]; +}; + +struct GraphConfiguration100223 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + LbffRgbIrWithGmvWithTnrNoSapOuterNodeConfiguration lbffRgbIrWithGmvWithTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + LbffRgbIrIrNoGmvWithTnrNoSapOuterNodeConfiguration lbffRgbIrIrNoGmvWithTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[30]; +}; + +struct GraphConfiguration100224 +{ + VirtualSinkMapping sinkMappingConfiguration; + WithCvOuterNodeConfiguration withCvOuterNodeConfiguration; + LbffBayerNoGmvNoTnrNoSapOuterNodeConfiguration lbffBayerNoGmvNoTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[10]; +}; + +struct GraphConfiguration100240 +{ + VirtualSinkMapping sinkMappingConfiguration; + WithCvOuterNodeConfiguration withCvOuterNodeConfiguration; + LbffBayerWithGmvNoTnrNoSapOuterNodeConfiguration lbffBayerWithGmvNoTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[15]; +}; + +struct GraphConfiguration100241 +{ + VirtualSinkMapping sinkMappingConfiguration; + WithCvOuterNodeConfiguration withCvOuterNodeConfiguration; + LbffBayerWithGmvWithTnrNoSapOuterNodeConfiguration lbffBayerWithGmvWithTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[18]; +}; + +struct GraphConfiguration100242 +{ + VirtualSinkMapping sinkMappingConfiguration; + WithCvOuterNodeConfiguration withCvOuterNodeConfiguration; + LbffBayerNoGmvWithTnrNoSapOuterNodeConfiguration lbffBayerNoGmvWithTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[13]; +}; + +struct GraphConfiguration100227 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + LbffIrNoGmvNoTnrNoSapOuterNodeConfiguration lbffIrNoGmvNoTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[11]; +}; + +struct GraphConfiguration100228 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + LbffIrWithGmvNoTnrNoSapOuterNodeConfiguration lbffIrWithGmvNoTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[16]; +}; + +struct GraphConfiguration100229 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + LbffIrNoGmvWithTnrNoSapOuterNodeConfiguration lbffIrNoGmvWithTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[14]; +}; + +struct GraphConfiguration100230 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + LbffIrWithGmvWithTnrNoSapOuterNodeConfiguration lbffIrWithGmvWithTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[19]; +}; + +struct GraphConfiguration100231 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNodeConfiguration lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[13]; +}; + +struct GraphConfiguration100232 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNodeConfiguration lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[18]; +}; + +struct GraphConfiguration100233 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNodeConfiguration lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[16]; +}; + +struct GraphConfiguration100234 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNodeConfiguration lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[21]; +}; + +struct GraphConfiguration100026 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[2]; +}; + +struct GraphConfiguration100059 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[4]; +}; + +struct GraphConfiguration100035 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysDolOuterNodeConfiguration isysDolOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[4]; +}; + +struct GraphConfiguration100036 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysPdaf2OuterNodeConfiguration isysPdaf2OuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[4]; +}; + +struct GraphConfiguration100037 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[4]; +}; + +struct GraphConfiguration100058 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[4]; +}; + +struct GraphConfiguration100038 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysDolWithCvOuterNodeConfiguration isysDolWithCvOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[6]; +}; + +struct GraphConfiguration100039 +{ + VirtualSinkMapping sinkMappingConfiguration; + IsysPdaf2WithCvOuterNodeConfiguration isysPdaf2WithCvOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[6]; +}; +#pragma pack(pop) + +class IsysOuterNode : public OuterNode +{ +public: + IsysOuterNode(): OuterNode(){} + void Init(IsysOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffBayerNoGmvNoTnrNoSapOuterNode : public OuterNode +{ +public: + LbffBayerNoGmvNoTnrNoSapOuterNode(): OuterNode(){} + void Init(LbffBayerNoGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffBayerWithGmvNoTnrNoSapOuterNode : public OuterNode +{ +public: + LbffBayerWithGmvNoTnrNoSapOuterNode(): OuterNode(){} + void Init(LbffBayerWithGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class SwGdcOuterNode : public OuterNode +{ +public: + SwGdcOuterNode(): OuterNode(){} + void Init(SwGdcOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffBayerNoGmvWithTnrNoSapOuterNode : public OuterNode +{ +public: + LbffBayerNoGmvWithTnrNoSapOuterNode(): OuterNode(){} + void Init(LbffBayerNoGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffBayerWithGmvWithTnrNoSapOuterNode : public OuterNode +{ +public: + LbffBayerWithGmvWithTnrNoSapOuterNode(): OuterNode(){} + void Init(LbffBayerWithGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class IsysWithCvOuterNode : public OuterNode +{ +public: + IsysWithCvOuterNode(): OuterNode(){} + void Init(IsysWithCvOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class SwSegnetOuterNode : public OuterNode +{ +public: + SwSegnetOuterNode(): OuterNode(){} + void Init(SwSegnetOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffBayerWithGmvWithTnrWithSapOuterNode : public OuterNode +{ +public: + LbffBayerWithGmvWithTnrWithSapOuterNode(): OuterNode(){} + void Init(LbffBayerWithGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class SwScalerOuterNode : public OuterNode +{ +public: + SwScalerOuterNode(): OuterNode(){} + void Init(SwScalerOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class SwNntmOuterNode : public OuterNode +{ +public: + SwNntmOuterNode(): OuterNode(){} + void Init(SwNntmOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffBayerNoGmvWithTnrWithSapOuterNode : public OuterNode +{ +public: + LbffBayerNoGmvWithTnrWithSapOuterNode(): OuterNode(){} + void Init(LbffBayerNoGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class IsysPdaf2WithCvOuterNode : public OuterNode +{ +public: + IsysPdaf2WithCvOuterNode(): OuterNode(){} + void Init(IsysPdaf2WithCvOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffBayerPdaf2NoGmvWithTnrWithSapOuterNode : public OuterNode +{ +public: + LbffBayerPdaf2NoGmvWithTnrWithSapOuterNode(): OuterNode(){} + void Init(LbffBayerPdaf2NoGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffBayerPdaf2WithTnrWithSapOuterNode : public OuterNode +{ +public: + LbffBayerPdaf2WithTnrWithSapOuterNode(): OuterNode(){} + void Init(LbffBayerPdaf2WithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffBayerPdaf3NoGmvWithTnrWithSapOuterNode : public OuterNode +{ +public: + LbffBayerPdaf3NoGmvWithTnrWithSapOuterNode(): OuterNode(){} + void Init(LbffBayerPdaf3NoGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode : public OuterNode +{ +public: + LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode(): OuterNode(){} + void Init(LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class IsysPdaf2OuterNode : public OuterNode +{ +public: + IsysPdaf2OuterNode(): OuterNode(){} + void Init(IsysPdaf2OuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffBayerPdaf2NoGmvNoTnrNoSapOuterNode : public OuterNode +{ +public: + LbffBayerPdaf2NoGmvNoTnrNoSapOuterNode(): OuterNode(){} + void Init(LbffBayerPdaf2NoGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffBayerPdaf2WithGmvNoTnrNoSapOuterNode : public OuterNode +{ +public: + LbffBayerPdaf2WithGmvNoTnrNoSapOuterNode(): OuterNode(){} + void Init(LbffBayerPdaf2WithGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffBayerPdaf2NoGmvWithTnrNoSapOuterNode : public OuterNode +{ +public: + LbffBayerPdaf2NoGmvWithTnrNoSapOuterNode(): OuterNode(){} + void Init(LbffBayerPdaf2NoGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffBayerPdaf2WithGmvWithTnrNoSapOuterNode : public OuterNode +{ +public: + LbffBayerPdaf2WithGmvWithTnrNoSapOuterNode(): OuterNode(){} + void Init(LbffBayerPdaf2WithGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffBayerPdaf2WithGmvWithTnrWithSapOuterNode : public OuterNode +{ +public: + LbffBayerPdaf2WithGmvWithTnrWithSapOuterNode(): OuterNode(){} + void Init(LbffBayerPdaf2WithGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffBayerPdaf3NoGmvNoTnrNoSapOuterNode : public OuterNode +{ +public: + LbffBayerPdaf3NoGmvNoTnrNoSapOuterNode(): OuterNode(){} + void Init(LbffBayerPdaf3NoGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffBayerPdaf3WithGmvNoTnrNoSapOuterNode : public OuterNode +{ +public: + LbffBayerPdaf3WithGmvNoTnrNoSapOuterNode(): OuterNode(){} + void Init(LbffBayerPdaf3WithGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffBayerPdaf3NoGmvWithTnrNoSapOuterNode : public OuterNode +{ +public: + LbffBayerPdaf3NoGmvWithTnrNoSapOuterNode(): OuterNode(){} + void Init(LbffBayerPdaf3NoGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffBayerPdaf3WithGmvWithTnrNoSapOuterNode : public OuterNode +{ +public: + LbffBayerPdaf3WithGmvWithTnrNoSapOuterNode(): OuterNode(){} + void Init(LbffBayerPdaf3WithGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffBayerPdaf3WithGmvWithTnrWithSapOuterNode : public OuterNode +{ +public: + LbffBayerPdaf3WithGmvWithTnrWithSapOuterNode(): OuterNode(){} + void Init(LbffBayerPdaf3WithGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class IsysDolOuterNode : public OuterNode +{ +public: + IsysDolOuterNode(): OuterNode(){} + void Init(IsysDolOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffDol2InputsNoGmvNoTnrNoSapOuterNode : public OuterNode +{ +public: + LbffDol2InputsNoGmvNoTnrNoSapOuterNode(): OuterNode(){} + void Init(LbffDol2InputsNoGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffDol2InputsWithGmvNoTnrNoSapOuterNode : public OuterNode +{ +public: + LbffDol2InputsWithGmvNoTnrNoSapOuterNode(): OuterNode(){} + void Init(LbffDol2InputsWithGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffDol2InputsNoGmvWithTnrNoSapOuterNode : public OuterNode +{ +public: + LbffDol2InputsNoGmvWithTnrNoSapOuterNode(): OuterNode(){} + void Init(LbffDol2InputsNoGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffDol2InputsWithGmvWithTnrNoSapOuterNode : public OuterNode +{ +public: + LbffDol2InputsWithGmvWithTnrNoSapOuterNode(): OuterNode(){} + void Init(LbffDol2InputsWithGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffDolSmoothOuterNode : public OuterNode +{ +public: + LbffDolSmoothOuterNode(): OuterNode(){} + void Init(LbffDolSmoothOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffDol3InputsNoGmvNoTnrNoSapOuterNode : public OuterNode +{ +public: + LbffDol3InputsNoGmvNoTnrNoSapOuterNode(): OuterNode(){} + void Init(LbffDol3InputsNoGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffDol3InputsWithGmvNoTnrNoSapOuterNode : public OuterNode +{ +public: + LbffDol3InputsWithGmvNoTnrNoSapOuterNode(): OuterNode(){} + void Init(LbffDol3InputsWithGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffDol3InputsNoGmvWithTnrNoSapOuterNode : public OuterNode +{ +public: + LbffDol3InputsNoGmvWithTnrNoSapOuterNode(): OuterNode(){} + void Init(LbffDol3InputsNoGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffDol3InputsWithGmvWithTnrNoSapOuterNode : public OuterNode +{ +public: + LbffDol3InputsWithGmvWithTnrNoSapOuterNode(): OuterNode(){} + void Init(LbffDol3InputsWithGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffRgbIrNoGmvNoTnrNoSapOuterNode : public OuterNode +{ +public: + LbffRgbIrNoGmvNoTnrNoSapOuterNode(): OuterNode(){} + void Init(LbffRgbIrNoGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffRgbIrIrNoGmvNoTnrNoSapOuterNode : public OuterNode +{ +public: + LbffRgbIrIrNoGmvNoTnrNoSapOuterNode(): OuterNode(){} + void Init(LbffRgbIrIrNoGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffRgbIrWithGmvNoTnrNoSapOuterNode : public OuterNode +{ +public: + LbffRgbIrWithGmvNoTnrNoSapOuterNode(): OuterNode(){} + void Init(LbffRgbIrWithGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffRgbIrNoGmvWithTnrNoSapOuterNode : public OuterNode +{ +public: + LbffRgbIrNoGmvWithTnrNoSapOuterNode(): OuterNode(){} + void Init(LbffRgbIrNoGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffRgbIrIrNoGmvWithTnrNoSapOuterNode : public OuterNode +{ +public: + LbffRgbIrIrNoGmvWithTnrNoSapOuterNode(): OuterNode(){} + void Init(LbffRgbIrIrNoGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffRgbIrWithGmvWithTnrNoSapOuterNode : public OuterNode +{ +public: + LbffRgbIrWithGmvWithTnrNoSapOuterNode(): OuterNode(){} + void Init(LbffRgbIrWithGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffIrNoGmvNoTnrNoSapOuterNode : public OuterNode +{ +public: + LbffIrNoGmvNoTnrNoSapOuterNode(): OuterNode(){} + void Init(LbffIrNoGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffIrWithGmvNoTnrNoSapOuterNode : public OuterNode +{ +public: + LbffIrWithGmvNoTnrNoSapOuterNode(): OuterNode(){} + void Init(LbffIrWithGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffIrNoGmvWithTnrNoSapOuterNode : public OuterNode +{ +public: + LbffIrNoGmvWithTnrNoSapOuterNode(): OuterNode(){} + void Init(LbffIrNoGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffIrWithGmvWithTnrNoSapOuterNode : public OuterNode +{ +public: + LbffIrWithGmvWithTnrNoSapOuterNode(): OuterNode(){} + void Init(LbffIrWithGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode : public OuterNode +{ +public: + LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode(): OuterNode(){} + void Init(LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode : public OuterNode +{ +public: + LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode(): OuterNode(){} + void Init(LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode : public OuterNode +{ +public: + LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode(): OuterNode(){} + void Init(LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode : public OuterNode +{ +public: + LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode(): OuterNode(){} + void Init(LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode : public OuterNode +{ +public: + LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode(): OuterNode(){} + void Init(LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffBayerNoGmvNoTnrWithSapOuterNode : public OuterNode +{ +public: + LbffBayerNoGmvNoTnrWithSapOuterNode(): OuterNode(){} + void Init(LbffBayerNoGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffBayerWithGmvNoTnrWithSapOuterNode : public OuterNode +{ +public: + LbffBayerWithGmvNoTnrWithSapOuterNode(): OuterNode(){} + void Init(LbffBayerWithGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffBayerNoGmvWithTnrWithOpacityOuterNode : public OuterNode +{ +public: + LbffBayerNoGmvWithTnrWithOpacityOuterNode(): OuterNode(){} + void Init(LbffBayerNoGmvWithTnrWithOpacityOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffBayerPdaf2NoGmvNoTnrWithSapOuterNode : public OuterNode +{ +public: + LbffBayerPdaf2NoGmvNoTnrWithSapOuterNode(): OuterNode(){} + void Init(LbffBayerPdaf2NoGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffBayerPdaf2WithGmvNoTnrWithSapOuterNode : public OuterNode +{ +public: + LbffBayerPdaf2WithGmvNoTnrWithSapOuterNode(): OuterNode(){} + void Init(LbffBayerPdaf2WithGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffBayerPdaf3NoGmvNoTnrWithSapOuterNode : public OuterNode +{ +public: + LbffBayerPdaf3NoGmvNoTnrWithSapOuterNode(): OuterNode(){} + void Init(LbffBayerPdaf3NoGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffBayerPdaf3WithGmvNoTnrWithSapOuterNode : public OuterNode +{ +public: + LbffBayerPdaf3WithGmvNoTnrWithSapOuterNode(): OuterNode(){} + void Init(LbffBayerPdaf3WithGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class IsysDolWithCvOuterNode : public OuterNode +{ +public: + IsysDolWithCvOuterNode(): OuterNode(){} + void Init(IsysDolWithCvOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffDol2InputsNoGmvNoTnrWithSapOuterNode : public OuterNode +{ +public: + LbffDol2InputsNoGmvNoTnrWithSapOuterNode(): OuterNode(){} + void Init(LbffDol2InputsNoGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffDol2InputsWithGmvNoTnrWithSapOuterNode : public OuterNode +{ +public: + LbffDol2InputsWithGmvNoTnrWithSapOuterNode(): OuterNode(){} + void Init(LbffDol2InputsWithGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffDol2InputsNoGmvWithTnrWithSapOuterNode : public OuterNode +{ +public: + LbffDol2InputsNoGmvWithTnrWithSapOuterNode(): OuterNode(){} + void Init(LbffDol2InputsNoGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffDol2InputsWithGmvWithTnrWithSapOuterNode : public OuterNode +{ +public: + LbffDol2InputsWithGmvWithTnrWithSapOuterNode(): OuterNode(){} + void Init(LbffDol2InputsWithGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffDol3InputsNoGmvNoTnrWithSapOuterNode : public OuterNode +{ +public: + LbffDol3InputsNoGmvNoTnrWithSapOuterNode(): OuterNode(){} + void Init(LbffDol3InputsNoGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffDol3InputsWithGmvNoTnrWithSapOuterNode : public OuterNode +{ +public: + LbffDol3InputsWithGmvNoTnrWithSapOuterNode(): OuterNode(){} + void Init(LbffDol3InputsWithGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffDol3InputsNoGmvWithTnrWithSapOuterNode : public OuterNode +{ +public: + LbffDol3InputsNoGmvWithTnrWithSapOuterNode(): OuterNode(){} + void Init(LbffDol3InputsNoGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffDol3InputsWithGmvWithTnrWithSapOuterNode : public OuterNode +{ +public: + LbffDol3InputsWithGmvWithTnrWithSapOuterNode(): OuterNode(){} + void Init(LbffDol3InputsWithGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffRgbIrNoGmvNoTnrWithSapOuterNode : public OuterNode +{ +public: + LbffRgbIrNoGmvNoTnrWithSapOuterNode(): OuterNode(){} + void Init(LbffRgbIrNoGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffRgbIrWithGmvNoTnrWithSapOuterNode : public OuterNode +{ +public: + LbffRgbIrWithGmvNoTnrWithSapOuterNode(): OuterNode(){} + void Init(LbffRgbIrWithGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffRgbIrNoGmvWithTnrWithSapOuterNode : public OuterNode +{ +public: + LbffRgbIrNoGmvWithTnrWithSapOuterNode(): OuterNode(){} + void Init(LbffRgbIrNoGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffRgbIrWithGmvWithTnrWithSapOuterNode : public OuterNode +{ +public: + LbffRgbIrWithGmvWithTnrWithSapOuterNode(): OuterNode(){} + void Init(LbffRgbIrWithGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffIrNoGmvNoTnrWithSapOuterNode : public OuterNode +{ +public: + LbffIrNoGmvNoTnrWithSapOuterNode(): OuterNode(){} + void Init(LbffIrNoGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffIrWithGmvNoTnrWithSapOuterNode : public OuterNode +{ +public: + LbffIrWithGmvNoTnrWithSapOuterNode(): OuterNode(){} + void Init(LbffIrWithGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffIrNoGmvWithTnrWithSapOuterNode : public OuterNode +{ +public: + LbffIrNoGmvWithTnrWithSapOuterNode(): OuterNode(){} + void Init(LbffIrNoGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffIrWithGmvWithTnrWithSapOuterNode : public OuterNode +{ +public: + LbffIrWithGmvWithTnrWithSapOuterNode(): OuterNode(){} + void Init(LbffIrWithGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode : public OuterNode +{ +public: + LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode(): OuterNode(){} + void Init(LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode : public OuterNode +{ +public: + LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode(): OuterNode(){} + void Init(LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; +class WithCvOuterNode : public OuterNode +{ +public: + WithCvOuterNode(): OuterNode(){} + void Init(WithCvOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); + void configVanishStatus(VanishOption vanishStatus) override; + +}; + +class imageSubGraphTopology100000 : public GraphTopology { + +public: + imageSubGraphTopology100000(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 9, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffBayerNoGmvNoTnrNoSapOuterNode* lbffBayerNoGmvNoTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[9]; + +}; + +class StaticGraph100000 : public IStaticGraphConfig +{ +public: + StaticGraph100000(GraphConfiguration100000* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100000(); + static const uint32_t hashCode = 659422379; // autogenerated + +private: + // Configuration + GraphConfiguration100000 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffBayerNoGmvNoTnrNoSapOuterNode _lbffBayerNoGmvNoTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100000 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[9]; +}; + +class imageSubGraphTopology100001 : public GraphTopology { + +public: + imageSubGraphTopology100001(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 14, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffBayerWithGmvNoTnrNoSapOuterNode* lbffBayerWithGmvNoTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[14]; + +}; + +class StaticGraph100001 : public IStaticGraphConfig +{ +public: + StaticGraph100001(GraphConfiguration100001* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100001(); + static const uint32_t hashCode = 1362910222; // autogenerated + +private: + // Configuration + GraphConfiguration100001 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffBayerWithGmvNoTnrNoSapOuterNode _lbffBayerWithGmvNoTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100001 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[14]; +}; + +class imageSubGraphTopology100002 : public GraphTopology { + +public: + imageSubGraphTopology100002(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 12, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffBayerNoGmvWithTnrNoSapOuterNode* lbffBayerNoGmvWithTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[12]; + +}; + +class StaticGraph100002 : public IStaticGraphConfig +{ +public: + StaticGraph100002(GraphConfiguration100002* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100002(); + static const uint32_t hashCode = 234836739; // autogenerated + +private: + // Configuration + GraphConfiguration100002 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffBayerNoGmvWithTnrNoSapOuterNode _lbffBayerNoGmvWithTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100002 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[12]; +}; + +class imageSubGraphTopology100003 : public GraphTopology { + +public: + imageSubGraphTopology100003(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 17, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffBayerWithGmvWithTnrNoSapOuterNode* lbffBayerWithGmvWithTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[17]; + +}; + +class StaticGraph100003 : public IStaticGraphConfig +{ +public: + StaticGraph100003(GraphConfiguration100003* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100003(); + static const uint32_t hashCode = 4056809410; // autogenerated + +private: + // Configuration + GraphConfiguration100003 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffBayerWithGmvWithTnrNoSapOuterNode _lbffBayerWithGmvWithTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100003 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[17]; +}; + +class imageSubGraphTopology100137 : public GraphTopology { + +public: + imageSubGraphTopology100137(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 28, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerWithGmvWithTnrWithSapOuterNode* lbffBayerWithGmvWithTnrWithSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[28]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100137 : public IStaticGraphConfig +{ +public: + StaticGraph100137(GraphConfiguration100137* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100137(); + static const uint32_t hashCode = 1162208336; // autogenerated + +private: + // Configuration + GraphConfiguration100137 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffBayerWithGmvWithTnrWithSapOuterNode _lbffBayerWithGmvWithTnrWithSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100137 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[28]; +}; + +class imageSubGraphTopology100079 : public GraphTopology { + +public: + imageSubGraphTopology100079(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 17, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffBayerNoGmvWithTnrNoSapOuterNode* lbffBayerNoGmvWithTnrNoSapOuterNode = nullptr; + SwNntmOuterNode* swNntmOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[17]; + +}; + +class StaticGraph100079 : public IStaticGraphConfig +{ +public: + StaticGraph100079(GraphConfiguration100079* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100079(); + static const uint32_t hashCode = 532659637; // autogenerated + +private: + // Configuration + GraphConfiguration100079 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffBayerNoGmvWithTnrNoSapOuterNode _lbffBayerNoGmvWithTnrNoSapOuterNode; + SwNntmOuterNode _swNntmOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100079 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[17]; +}; + +class imageSubGraphTopology100080 : public GraphTopology { + +public: + imageSubGraphTopology100080(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 17, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffBayerNoGmvWithTnrNoSapOuterNode* lbffBayerNoGmvWithTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[17]; + +}; + +class StaticGraph100080 : public IStaticGraphConfig +{ +public: + StaticGraph100080(GraphConfiguration100080* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100080(); + static const uint32_t hashCode = 2414017975; // autogenerated + +private: + // Configuration + GraphConfiguration100080 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffBayerNoGmvWithTnrNoSapOuterNode _lbffBayerNoGmvWithTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100080 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[17]; +}; + +class imageSubGraphTopology100138 : public GraphTopology { + +public: + imageSubGraphTopology100138(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 26, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerNoGmvWithTnrWithSapOuterNode* lbffBayerNoGmvWithTnrWithSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[26]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100138 : public IStaticGraphConfig +{ +public: + StaticGraph100138(GraphConfiguration100138* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100138(); + static const uint32_t hashCode = 3346954776; // autogenerated + +private: + // Configuration + GraphConfiguration100138 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffBayerNoGmvWithTnrWithSapOuterNode _lbffBayerNoGmvWithTnrWithSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100138 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[26]; +}; + +class imageSubGraphTopology100142 : public GraphTopology { + +public: + imageSubGraphTopology100142(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 29, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysPdaf2WithCvOuterNode* isysPdaf2WithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerPdaf2NoGmvWithTnrWithSapOuterNode* lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[29]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100142 : public IStaticGraphConfig +{ +public: + StaticGraph100142(GraphConfiguration100142* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100142(); + static const uint32_t hashCode = 2439817970; // autogenerated + +private: + // Configuration + GraphConfiguration100142 _graphConfiguration; + + /* Outer Nodes */ + IsysPdaf2WithCvOuterNode _isysPdaf2WithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffBayerPdaf2NoGmvWithTnrWithSapOuterNode _lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100142 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[29]; +}; + +class imageSubGraphTopology100162 : public GraphTopology { + +public: + imageSubGraphTopology100162(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 24, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysPdaf2WithCvOuterNode* isysPdaf2WithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerPdaf2WithTnrWithSapOuterNode* lbffBayerPdaf2WithTnrWithSapOuterNode = nullptr; + GraphLink* subGraphLinks[24]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100162 : public IStaticGraphConfig +{ +public: + StaticGraph100162(GraphConfiguration100162* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100162(); + static const uint32_t hashCode = 400260450; // autogenerated + +private: + // Configuration + GraphConfiguration100162 _graphConfiguration; + + /* Outer Nodes */ + IsysPdaf2WithCvOuterNode _isysPdaf2WithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffBayerPdaf2WithTnrWithSapOuterNode _lbffBayerPdaf2WithTnrWithSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100162 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[24]; +}; + +class imageSubGraphTopology100143 : public GraphTopology { + +public: + imageSubGraphTopology100143(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 27, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerPdaf3NoGmvWithTnrWithSapOuterNode* lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[27]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100143 : public IStaticGraphConfig +{ +public: + StaticGraph100143(GraphConfiguration100143* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100143(); + static const uint32_t hashCode = 1997307496; // autogenerated + +private: + // Configuration + GraphConfiguration100143 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + LbffBayerPdaf3NoGmvWithTnrWithSapOuterNode _lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + SwGdcOuterNode _swGdcOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100143 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[27]; +}; + +class imageSubGraphTopology100144 : public GraphTopology { + +public: + imageSubGraphTopology100144(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 28, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode* lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[28]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100144 : public IStaticGraphConfig +{ +public: + StaticGraph100144(GraphConfiguration100144* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100144(); + static const uint32_t hashCode = 297378060; // autogenerated + +private: + // Configuration + GraphConfiguration100144 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode _lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100144 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[28]; +}; + +class imageSubGraphTopology100081 : public GraphTopology { + +public: + imageSubGraphTopology100081(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 19, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffBayerWithGmvWithTnrNoSapOuterNode* lbffBayerWithGmvWithTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[19]; + +}; + +class StaticGraph100081 : public IStaticGraphConfig +{ +public: + StaticGraph100081(GraphConfiguration100081* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100081(); + static const uint32_t hashCode = 250406055; // autogenerated + +private: + // Configuration + GraphConfiguration100081 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffBayerWithGmvWithTnrNoSapOuterNode _lbffBayerWithGmvWithTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100081 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[19]; +}; + +class imageSubGraphTopology100004 : public GraphTopology { + +public: + imageSubGraphTopology100004(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 12, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysPdaf2OuterNode* isysPdaf2OuterNode = nullptr; + LbffBayerPdaf2NoGmvNoTnrNoSapOuterNode* lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[12]; + +}; + +class StaticGraph100004 : public IStaticGraphConfig +{ +public: + StaticGraph100004(GraphConfiguration100004* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100004(); + static const uint32_t hashCode = 1893639437; // autogenerated + +private: + // Configuration + GraphConfiguration100004 _graphConfiguration; + + /* Outer Nodes */ + IsysPdaf2OuterNode _isysPdaf2OuterNode; + LbffBayerPdaf2NoGmvNoTnrNoSapOuterNode _lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100004 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[12]; +}; + +class imageSubGraphTopology100005 : public GraphTopology { + +public: + imageSubGraphTopology100005(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 17, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysPdaf2OuterNode* isysPdaf2OuterNode = nullptr; + LbffBayerPdaf2WithGmvNoTnrNoSapOuterNode* lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[17]; + +}; + +class StaticGraph100005 : public IStaticGraphConfig +{ +public: + StaticGraph100005(GraphConfiguration100005* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100005(); + static const uint32_t hashCode = 289246692; // autogenerated + +private: + // Configuration + GraphConfiguration100005 _graphConfiguration; + + /* Outer Nodes */ + IsysPdaf2OuterNode _isysPdaf2OuterNode; + LbffBayerPdaf2WithGmvNoTnrNoSapOuterNode _lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100005 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[17]; +}; + +class imageSubGraphTopology100006 : public GraphTopology { + +public: + imageSubGraphTopology100006(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 15, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysPdaf2OuterNode* isysPdaf2OuterNode = nullptr; + LbffBayerPdaf2NoGmvWithTnrNoSapOuterNode* lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[15]; + +}; + +class StaticGraph100006 : public IStaticGraphConfig +{ +public: + StaticGraph100006(GraphConfiguration100006* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100006(); + static const uint32_t hashCode = 1235256317; // autogenerated + +private: + // Configuration + GraphConfiguration100006 _graphConfiguration; + + /* Outer Nodes */ + IsysPdaf2OuterNode _isysPdaf2OuterNode; + LbffBayerPdaf2NoGmvWithTnrNoSapOuterNode _lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100006 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[15]; +}; + +class imageSubGraphTopology100066 : public GraphTopology { + +public: + imageSubGraphTopology100066(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 20, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysPdaf2OuterNode* isysPdaf2OuterNode = nullptr; + LbffBayerPdaf2NoGmvWithTnrNoSapOuterNode* lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode = nullptr; + SwNntmOuterNode* swNntmOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[20]; + +}; + +class StaticGraph100066 : public IStaticGraphConfig +{ +public: + StaticGraph100066(GraphConfiguration100066* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100066(); + static const uint32_t hashCode = 3796248179; // autogenerated + +private: + // Configuration + GraphConfiguration100066 _graphConfiguration; + + /* Outer Nodes */ + IsysPdaf2OuterNode _isysPdaf2OuterNode; + LbffBayerPdaf2NoGmvWithTnrNoSapOuterNode _lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + SwNntmOuterNode _swNntmOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100066 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[20]; +}; + +class imageSubGraphTopology100007 : public GraphTopology { + +public: + imageSubGraphTopology100007(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 20, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysPdaf2OuterNode* isysPdaf2OuterNode = nullptr; + LbffBayerPdaf2WithGmvWithTnrNoSapOuterNode* lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[20]; + +}; + +class StaticGraph100007 : public IStaticGraphConfig +{ +public: + StaticGraph100007(GraphConfiguration100007* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100007(); + static const uint32_t hashCode = 2306636736; // autogenerated + +private: + // Configuration + GraphConfiguration100007 _graphConfiguration; + + /* Outer Nodes */ + IsysPdaf2OuterNode _isysPdaf2OuterNode; + LbffBayerPdaf2WithGmvWithTnrNoSapOuterNode _lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100007 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[20]; +}; + +class imageSubGraphTopology100067 : public GraphTopology { + +public: + imageSubGraphTopology100067(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 23, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysPdaf2OuterNode* isysPdaf2OuterNode = nullptr; + LbffBayerPdaf2WithGmvWithTnrNoSapOuterNode* lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + SwNntmOuterNode* swNntmOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[23]; + +}; + +class StaticGraph100067 : public IStaticGraphConfig +{ +public: + StaticGraph100067(GraphConfiguration100067* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100067(); + static const uint32_t hashCode = 330767106; // autogenerated + +private: + // Configuration + GraphConfiguration100067 _graphConfiguration; + + /* Outer Nodes */ + IsysPdaf2OuterNode _isysPdaf2OuterNode; + LbffBayerPdaf2WithGmvWithTnrNoSapOuterNode _lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + SwNntmOuterNode _swNntmOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100067 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[23]; +}; + +class imageSubGraphTopology100139 : public GraphTopology { + +public: + imageSubGraphTopology100139(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 31, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysPdaf2WithCvOuterNode* isysPdaf2WithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerPdaf2WithGmvWithTnrWithSapOuterNode* lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[31]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100139 : public IStaticGraphConfig +{ +public: + StaticGraph100139(GraphConfiguration100139* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100139(); + static const uint32_t hashCode = 2072599578; // autogenerated + +private: + // Configuration + GraphConfiguration100139 _graphConfiguration; + + /* Outer Nodes */ + IsysPdaf2WithCvOuterNode _isysPdaf2WithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffBayerPdaf2WithGmvWithTnrWithSapOuterNode _lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100139 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[31]; +}; + +class imageSubGraphTopology100169 : public GraphTopology { + +public: + imageSubGraphTopology100169(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 24, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysPdaf2WithCvOuterNode* isysPdaf2WithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerPdaf2WithTnrWithSapOuterNode* lbffBayerPdaf2WithTnrWithSapOuterNode = nullptr; + GraphLink* subGraphLinks[24]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100169 : public IStaticGraphConfig +{ +public: + StaticGraph100169(GraphConfiguration100169* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100169(); + static const uint32_t hashCode = 400260450; // autogenerated + +private: + // Configuration + GraphConfiguration100169 _graphConfiguration; + + /* Outer Nodes */ + IsysPdaf2WithCvOuterNode _isysPdaf2WithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffBayerPdaf2WithTnrWithSapOuterNode _lbffBayerPdaf2WithTnrWithSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100169 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[24]; +}; + +class imageSubGraphTopology100008 : public GraphTopology { + +public: + imageSubGraphTopology100008(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 10, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffBayerPdaf3NoGmvNoTnrNoSapOuterNode* lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[10]; + +}; + +class StaticGraph100008 : public IStaticGraphConfig +{ +public: + StaticGraph100008(GraphConfiguration100008* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100008(); + static const uint32_t hashCode = 2097767335; // autogenerated + +private: + // Configuration + GraphConfiguration100008 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffBayerPdaf3NoGmvNoTnrNoSapOuterNode _lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100008 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[10]; +}; + +class imageSubGraphTopology100009 : public GraphTopology { + +public: + imageSubGraphTopology100009(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 15, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffBayerPdaf3WithGmvNoTnrNoSapOuterNode* lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[15]; + +}; + +class StaticGraph100009 : public IStaticGraphConfig +{ +public: + StaticGraph100009(GraphConfiguration100009* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100009(); + static const uint32_t hashCode = 2902802486; // autogenerated + +private: + // Configuration + GraphConfiguration100009 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffBayerPdaf3WithGmvNoTnrNoSapOuterNode _lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100009 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[15]; +}; + +class imageSubGraphTopology100010 : public GraphTopology { + +public: + imageSubGraphTopology100010(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 13, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffBayerPdaf3NoGmvWithTnrNoSapOuterNode* lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[13]; + +}; + +class StaticGraph100010 : public IStaticGraphConfig +{ +public: + StaticGraph100010(GraphConfiguration100010* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100010(); + static const uint32_t hashCode = 1235970399; // autogenerated + +private: + // Configuration + GraphConfiguration100010 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffBayerPdaf3NoGmvWithTnrNoSapOuterNode _lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100010 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[13]; +}; + +class imageSubGraphTopology100011 : public GraphTopology { + +public: + imageSubGraphTopology100011(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 18, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffBayerPdaf3WithGmvWithTnrNoSapOuterNode* lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[18]; + +}; + +class StaticGraph100011 : public IStaticGraphConfig +{ +public: + StaticGraph100011(GraphConfiguration100011* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100011(); + static const uint32_t hashCode = 1386704474; // autogenerated + +private: + // Configuration + GraphConfiguration100011 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffBayerPdaf3WithGmvWithTnrNoSapOuterNode _lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100011 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[18]; +}; + +class imageSubGraphTopology100140 : public GraphTopology { + +public: + imageSubGraphTopology100140(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 29, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerPdaf3WithGmvWithTnrWithSapOuterNode* lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[29]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100140 : public IStaticGraphConfig +{ +public: + StaticGraph100140(GraphConfiguration100140* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100140(); + static const uint32_t hashCode = 2598536544; // autogenerated + +private: + // Configuration + GraphConfiguration100140 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + LbffBayerPdaf3WithGmvWithTnrWithSapOuterNode _lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + SwGdcOuterNode _swGdcOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100140 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[29]; +}; + +class imageSubGraphTopology100045 : public GraphTopology { + +public: + imageSubGraphTopology100045(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 18, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffBayerPdaf3NoGmvWithTnrNoSapOuterNode* lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode = nullptr; + SwNntmOuterNode* swNntmOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[18]; + +}; + +class StaticGraph100045 : public IStaticGraphConfig +{ +public: + StaticGraph100045(GraphConfiguration100045* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100045(); + static const uint32_t hashCode = 2987627097; // autogenerated + +private: + // Configuration + GraphConfiguration100045 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffBayerPdaf3NoGmvWithTnrNoSapOuterNode _lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + SwNntmOuterNode _swNntmOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100045 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[18]; +}; + +class imageSubGraphTopology100012 : public GraphTopology { + +public: + imageSubGraphTopology100012(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 17, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysDolOuterNode* isysDolOuterNode = nullptr; + LbffDol2InputsNoGmvNoTnrNoSapOuterNode* lbffDol2InputsNoGmvNoTnrNoSapOuterNode = nullptr; + SwNntmOuterNode* swNntmOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[17]; + +}; + +class StaticGraph100012 : public IStaticGraphConfig +{ +public: + StaticGraph100012(GraphConfiguration100012* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100012(); + static const uint32_t hashCode = 1929687541; // autogenerated + +private: + // Configuration + GraphConfiguration100012 _graphConfiguration; + + /* Outer Nodes */ + IsysDolOuterNode _isysDolOuterNode; + LbffDol2InputsNoGmvNoTnrNoSapOuterNode _lbffDol2InputsNoGmvNoTnrNoSapOuterNode; + SwNntmOuterNode _swNntmOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100012 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[17]; +}; + +class imageSubGraphTopology100013 : public GraphTopology { + +public: + imageSubGraphTopology100013(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 17, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysDolOuterNode* isysDolOuterNode = nullptr; + LbffDol2InputsWithGmvNoTnrNoSapOuterNode* lbffDol2InputsWithGmvNoTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[17]; + +}; + +class StaticGraph100013 : public IStaticGraphConfig +{ +public: + StaticGraph100013(GraphConfiguration100013* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100013(); + static const uint32_t hashCode = 3222759362; // autogenerated + +private: + // Configuration + GraphConfiguration100013 _graphConfiguration; + + /* Outer Nodes */ + IsysDolOuterNode _isysDolOuterNode; + LbffDol2InputsWithGmvNoTnrNoSapOuterNode _lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100013 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[17]; +}; + +class imageSubGraphTopology100014 : public GraphTopology { + +public: + imageSubGraphTopology100014(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 20, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysDolOuterNode* isysDolOuterNode = nullptr; + LbffDol2InputsNoGmvWithTnrNoSapOuterNode* lbffDol2InputsNoGmvWithTnrNoSapOuterNode = nullptr; + SwNntmOuterNode* swNntmOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[20]; + +}; + +class StaticGraph100014 : public IStaticGraphConfig +{ +public: + StaticGraph100014(GraphConfiguration100014* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100014(); + static const uint32_t hashCode = 461825829; // autogenerated + +private: + // Configuration + GraphConfiguration100014 _graphConfiguration; + + /* Outer Nodes */ + IsysDolOuterNode _isysDolOuterNode; + LbffDol2InputsNoGmvWithTnrNoSapOuterNode _lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + SwNntmOuterNode _swNntmOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100014 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[20]; +}; + +class imageSubGraphTopology100015 : public GraphTopology { + +public: + imageSubGraphTopology100015(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 20, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysDolOuterNode* isysDolOuterNode = nullptr; + LbffDol2InputsWithGmvWithTnrNoSapOuterNode* lbffDol2InputsWithGmvWithTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[20]; + +}; + +class StaticGraph100015 : public IStaticGraphConfig +{ +public: + StaticGraph100015(GraphConfiguration100015* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100015(); + static const uint32_t hashCode = 3628721894; // autogenerated + +private: + // Configuration + GraphConfiguration100015 _graphConfiguration; + + /* Outer Nodes */ + IsysDolOuterNode _isysDolOuterNode; + LbffDol2InputsWithGmvWithTnrNoSapOuterNode _lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100015 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[20]; +}; + +class imageSubGraphTopology100016 : public GraphTopology { + +public: + imageSubGraphTopology100016(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 19, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysDolOuterNode* isysDolOuterNode = nullptr; + LbffDolSmoothOuterNode* lbffDolSmoothOuterNode = nullptr; + LbffDol3InputsNoGmvNoTnrNoSapOuterNode* lbffDol3InputsNoGmvNoTnrNoSapOuterNode = nullptr; + SwNntmOuterNode* swNntmOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[19]; + +}; + +class StaticGraph100016 : public IStaticGraphConfig +{ +public: + StaticGraph100016(GraphConfiguration100016* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100016(); + static const uint32_t hashCode = 3353314188; // autogenerated + +private: + // Configuration + GraphConfiguration100016 _graphConfiguration; + + /* Outer Nodes */ + IsysDolOuterNode _isysDolOuterNode; + LbffDolSmoothOuterNode _lbffDolSmoothOuterNode; + LbffDol3InputsNoGmvNoTnrNoSapOuterNode _lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + SwNntmOuterNode _swNntmOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100016 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[19]; +}; + +class imageSubGraphTopology100017 : public GraphTopology { + +public: + imageSubGraphTopology100017(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 19, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysDolOuterNode* isysDolOuterNode = nullptr; + LbffDolSmoothOuterNode* lbffDolSmoothOuterNode = nullptr; + LbffDol3InputsWithGmvNoTnrNoSapOuterNode* lbffDol3InputsWithGmvNoTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[19]; + +}; + +class StaticGraph100017 : public IStaticGraphConfig +{ +public: + StaticGraph100017(GraphConfiguration100017* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100017(); + static const uint32_t hashCode = 3319097463; // autogenerated + +private: + // Configuration + GraphConfiguration100017 _graphConfiguration; + + /* Outer Nodes */ + IsysDolOuterNode _isysDolOuterNode; + LbffDolSmoothOuterNode _lbffDolSmoothOuterNode; + LbffDol3InputsWithGmvNoTnrNoSapOuterNode _lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100017 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[19]; +}; + +class imageSubGraphTopology100018 : public GraphTopology { + +public: + imageSubGraphTopology100018(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 22, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysDolOuterNode* isysDolOuterNode = nullptr; + LbffDolSmoothOuterNode* lbffDolSmoothOuterNode = nullptr; + LbffDol3InputsNoGmvWithTnrNoSapOuterNode* lbffDol3InputsNoGmvWithTnrNoSapOuterNode = nullptr; + SwNntmOuterNode* swNntmOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[22]; + +}; + +class StaticGraph100018 : public IStaticGraphConfig +{ +public: + StaticGraph100018(GraphConfiguration100018* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100018(); + static const uint32_t hashCode = 2045302344; // autogenerated + +private: + // Configuration + GraphConfiguration100018 _graphConfiguration; + + /* Outer Nodes */ + IsysDolOuterNode _isysDolOuterNode; + LbffDolSmoothOuterNode _lbffDolSmoothOuterNode; + LbffDol3InputsNoGmvWithTnrNoSapOuterNode _lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + SwNntmOuterNode _swNntmOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100018 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[22]; +}; + +class imageSubGraphTopology100019 : public GraphTopology { + +public: + imageSubGraphTopology100019(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 22, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysDolOuterNode* isysDolOuterNode = nullptr; + LbffDolSmoothOuterNode* lbffDolSmoothOuterNode = nullptr; + LbffDol3InputsWithGmvWithTnrNoSapOuterNode* lbffDol3InputsWithGmvWithTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[22]; + +}; + +class StaticGraph100019 : public IStaticGraphConfig +{ +public: + StaticGraph100019(GraphConfiguration100019* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100019(); + static const uint32_t hashCode = 360993599; // autogenerated + +private: + // Configuration + GraphConfiguration100019 _graphConfiguration; + + /* Outer Nodes */ + IsysDolOuterNode _isysDolOuterNode; + LbffDolSmoothOuterNode _lbffDolSmoothOuterNode; + LbffDol3InputsWithGmvWithTnrNoSapOuterNode _lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100019 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[22]; +}; + +class imageSubGraphTopology100020 : public GraphTopology { + +public: + imageSubGraphTopology100020(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 10, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffRgbIrNoGmvNoTnrNoSapOuterNode* lbffRgbIrNoGmvNoTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[10]; + +}; + +class irSubGraphTopology100020 : public GraphTopology { + +public: + irSubGraphTopology100020(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 17, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffRgbIrNoGmvNoTnrNoSapOuterNode* lbffRgbIrNoGmvNoTnrNoSapOuterNode = nullptr; + LbffRgbIrIrNoGmvNoTnrNoSapOuterNode* lbffRgbIrIrNoGmvNoTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[17]; + +}; + +class image_irSubGraphTopology100020 : public GraphTopology { + +public: + image_irSubGraphTopology100020(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 17, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffRgbIrNoGmvNoTnrNoSapOuterNode* lbffRgbIrNoGmvNoTnrNoSapOuterNode = nullptr; + LbffRgbIrIrNoGmvNoTnrNoSapOuterNode* lbffRgbIrIrNoGmvNoTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[17]; + +}; + +class StaticGraph100020 : public IStaticGraphConfig +{ +public: + StaticGraph100020(GraphConfiguration100020* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100020(); + static const uint32_t hashCode = 3832894342; // autogenerated + +private: + // Configuration + GraphConfiguration100020 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffRgbIrNoGmvNoTnrNoSapOuterNode _lbffRgbIrNoGmvNoTnrNoSapOuterNode; + LbffRgbIrIrNoGmvNoTnrNoSapOuterNode _lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100020 _imageSubGraph; + irSubGraphTopology100020 _irSubGraph; + image_irSubGraphTopology100020 _image_irSubGraph; + + // All graph links + GraphLink _graphLinks[17]; +}; + +class imageSubGraphTopology100021 : public GraphTopology { + +public: + imageSubGraphTopology100021(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 15, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffRgbIrWithGmvNoTnrNoSapOuterNode* lbffRgbIrWithGmvNoTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[15]; + +}; + +class irSubGraphTopology100021 : public GraphTopology { + +public: + irSubGraphTopology100021(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 19, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffRgbIrWithGmvNoTnrNoSapOuterNode* lbffRgbIrWithGmvNoTnrNoSapOuterNode = nullptr; + LbffRgbIrIrNoGmvNoTnrNoSapOuterNode* lbffRgbIrIrNoGmvNoTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[19]; + +}; + +class image_irSubGraphTopology100021 : public GraphTopology { + +public: + image_irSubGraphTopology100021(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 22, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffRgbIrWithGmvNoTnrNoSapOuterNode* lbffRgbIrWithGmvNoTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + LbffRgbIrIrNoGmvNoTnrNoSapOuterNode* lbffRgbIrIrNoGmvNoTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[22]; + +}; + +class StaticGraph100021 : public IStaticGraphConfig +{ +public: + StaticGraph100021(GraphConfiguration100021* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100021(); + static const uint32_t hashCode = 1842368291; // autogenerated + +private: + // Configuration + GraphConfiguration100021 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffRgbIrWithGmvNoTnrNoSapOuterNode _lbffRgbIrWithGmvNoTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + LbffRgbIrIrNoGmvNoTnrNoSapOuterNode _lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100021 _imageSubGraph; + irSubGraphTopology100021 _irSubGraph; + image_irSubGraphTopology100021 _image_irSubGraph; + + // All graph links + GraphLink _graphLinks[22]; +}; + +class imageSubGraphTopology100022 : public GraphTopology { + +public: + imageSubGraphTopology100022(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 13, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffRgbIrNoGmvWithTnrNoSapOuterNode* lbffRgbIrNoGmvWithTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[13]; + +}; + +class irSubGraphTopology100022 : public GraphTopology { + +public: + irSubGraphTopology100022(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 23, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffRgbIrNoGmvWithTnrNoSapOuterNode* lbffRgbIrNoGmvWithTnrNoSapOuterNode = nullptr; + LbffRgbIrIrNoGmvWithTnrNoSapOuterNode* lbffRgbIrIrNoGmvWithTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[23]; + +}; + +class image_irSubGraphTopology100022 : public GraphTopology { + +public: + image_irSubGraphTopology100022(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 23, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffRgbIrNoGmvWithTnrNoSapOuterNode* lbffRgbIrNoGmvWithTnrNoSapOuterNode = nullptr; + LbffRgbIrIrNoGmvWithTnrNoSapOuterNode* lbffRgbIrIrNoGmvWithTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[23]; + +}; + +class StaticGraph100022 : public IStaticGraphConfig +{ +public: + StaticGraph100022(GraphConfiguration100022* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100022(); + static const uint32_t hashCode = 1716954062; // autogenerated + +private: + // Configuration + GraphConfiguration100022 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffRgbIrNoGmvWithTnrNoSapOuterNode _lbffRgbIrNoGmvWithTnrNoSapOuterNode; + LbffRgbIrIrNoGmvWithTnrNoSapOuterNode _lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100022 _imageSubGraph; + irSubGraphTopology100022 _irSubGraph; + image_irSubGraphTopology100022 _image_irSubGraph; + + // All graph links + GraphLink _graphLinks[23]; +}; + +class imageSubGraphTopology100023 : public GraphTopology { + +public: + imageSubGraphTopology100023(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 18, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffRgbIrWithGmvWithTnrNoSapOuterNode* lbffRgbIrWithGmvWithTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[18]; + +}; + +class irSubGraphTopology100023 : public GraphTopology { + +public: + irSubGraphTopology100023(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 25, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffRgbIrWithGmvWithTnrNoSapOuterNode* lbffRgbIrWithGmvWithTnrNoSapOuterNode = nullptr; + LbffRgbIrIrNoGmvWithTnrNoSapOuterNode* lbffRgbIrIrNoGmvWithTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[25]; + +}; + +class image_irSubGraphTopology100023 : public GraphTopology { + +public: + image_irSubGraphTopology100023(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 28, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffRgbIrWithGmvWithTnrNoSapOuterNode* lbffRgbIrWithGmvWithTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + LbffRgbIrIrNoGmvWithTnrNoSapOuterNode* lbffRgbIrIrNoGmvWithTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[28]; + +}; + +class StaticGraph100023 : public IStaticGraphConfig +{ +public: + StaticGraph100023(GraphConfiguration100023* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100023(); + static const uint32_t hashCode = 3714048611; // autogenerated + +private: + // Configuration + GraphConfiguration100023 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffRgbIrWithGmvWithTnrNoSapOuterNode _lbffRgbIrWithGmvWithTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + LbffRgbIrIrNoGmvWithTnrNoSapOuterNode _lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100023 _imageSubGraph; + irSubGraphTopology100023 _irSubGraph; + image_irSubGraphTopology100023 _image_irSubGraph; + + // All graph links + GraphLink _graphLinks[28]; +}; + +class imageSubGraphTopology100024 : public GraphTopology { + +public: + imageSubGraphTopology100024(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 8, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + LbffBayerNoGmvNoTnrNoSapOuterNode* lbffBayerNoGmvNoTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[8]; + +}; + +class StaticGraph100024 : public IStaticGraphConfig +{ +public: + StaticGraph100024(GraphConfiguration100024* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100024(); + static const uint32_t hashCode = 1924685938; // autogenerated + +private: + // Configuration + GraphConfiguration100024 _graphConfiguration; + + /* Outer Nodes */ + LbffBayerNoGmvNoTnrNoSapOuterNode _lbffBayerNoGmvNoTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100024 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[8]; +}; + +class imageSubGraphTopology100040 : public GraphTopology { + +public: + imageSubGraphTopology100040(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 13, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + LbffBayerWithGmvNoTnrNoSapOuterNode* lbffBayerWithGmvNoTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[13]; + +}; + +class StaticGraph100040 : public IStaticGraphConfig +{ +public: + StaticGraph100040(GraphConfiguration100040* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100040(); + static const uint32_t hashCode = 3034514411; // autogenerated + +private: + // Configuration + GraphConfiguration100040 _graphConfiguration; + + /* Outer Nodes */ + LbffBayerWithGmvNoTnrNoSapOuterNode _lbffBayerWithGmvNoTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100040 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[13]; +}; + +class imageSubGraphTopology100041 : public GraphTopology { + +public: + imageSubGraphTopology100041(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 16, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + LbffBayerWithGmvWithTnrNoSapOuterNode* lbffBayerWithGmvWithTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[16]; + +}; + +class StaticGraph100041 : public IStaticGraphConfig +{ +public: + StaticGraph100041(GraphConfiguration100041* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100041(); + static const uint32_t hashCode = 3140987267; // autogenerated + +private: + // Configuration + GraphConfiguration100041 _graphConfiguration; + + /* Outer Nodes */ + LbffBayerWithGmvWithTnrNoSapOuterNode _lbffBayerWithGmvWithTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100041 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[16]; +}; + +class imageSubGraphTopology100042 : public GraphTopology { + +public: + imageSubGraphTopology100042(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 11, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + LbffBayerNoGmvWithTnrNoSapOuterNode* lbffBayerNoGmvWithTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[11]; + +}; + +class StaticGraph100042 : public IStaticGraphConfig +{ +public: + StaticGraph100042(GraphConfiguration100042* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100042(); + static const uint32_t hashCode = 2085545078; // autogenerated + +private: + // Configuration + GraphConfiguration100042 _graphConfiguration; + + /* Outer Nodes */ + LbffBayerNoGmvWithTnrNoSapOuterNode _lbffBayerNoGmvWithTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100042 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[11]; +}; + +class imageSubGraphTopology100027 : public GraphTopology { + +public: + imageSubGraphTopology100027(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 9, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffIrNoGmvNoTnrNoSapOuterNode* lbffIrNoGmvNoTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[9]; + +}; + +class StaticGraph100027 : public IStaticGraphConfig +{ +public: + StaticGraph100027(GraphConfiguration100027* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100027(); + static const uint32_t hashCode = 486131511; // autogenerated + +private: + // Configuration + GraphConfiguration100027 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffIrNoGmvNoTnrNoSapOuterNode _lbffIrNoGmvNoTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100027 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[9]; +}; + +class imageSubGraphTopology100028 : public GraphTopology { + +public: + imageSubGraphTopology100028(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 14, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffIrWithGmvNoTnrNoSapOuterNode* lbffIrWithGmvNoTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[14]; + +}; + +class StaticGraph100028 : public IStaticGraphConfig +{ +public: + StaticGraph100028(GraphConfiguration100028* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100028(); + static const uint32_t hashCode = 1301349394; // autogenerated + +private: + // Configuration + GraphConfiguration100028 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffIrWithGmvNoTnrNoSapOuterNode _lbffIrWithGmvNoTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100028 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[14]; +}; + +class imageSubGraphTopology100029 : public GraphTopology { + +public: + imageSubGraphTopology100029(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 12, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffIrNoGmvWithTnrNoSapOuterNode* lbffIrNoGmvWithTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[12]; + +}; + +class StaticGraph100029 : public IStaticGraphConfig +{ +public: + StaticGraph100029(GraphConfiguration100029* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100029(); + static const uint32_t hashCode = 549041199; // autogenerated + +private: + // Configuration + GraphConfiguration100029 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffIrNoGmvWithTnrNoSapOuterNode _lbffIrNoGmvWithTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100029 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[12]; +}; + +class imageSubGraphTopology100030 : public GraphTopology { + +public: + imageSubGraphTopology100030(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 17, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffIrWithGmvWithTnrNoSapOuterNode* lbffIrWithGmvWithTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[17]; + +}; + +class StaticGraph100030 : public IStaticGraphConfig +{ +public: + StaticGraph100030(GraphConfiguration100030* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100030(); + static const uint32_t hashCode = 1796985254; // autogenerated + +private: + // Configuration + GraphConfiguration100030 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffIrWithGmvWithTnrNoSapOuterNode _lbffIrWithGmvWithTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100030 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[17]; +}; + +class imageSubGraphTopology100031 : public GraphTopology { + +public: + imageSubGraphTopology100031(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 11, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode* lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[11]; + +}; + +class StaticGraph100031 : public IStaticGraphConfig +{ +public: + StaticGraph100031(GraphConfiguration100031* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100031(); + static const uint32_t hashCode = 2736278879; // autogenerated + +private: + // Configuration + GraphConfiguration100031 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode _lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100031 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[11]; +}; + +class imageSubGraphTopology100032 : public GraphTopology { + +public: + imageSubGraphTopology100032(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 16, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode* lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[16]; + +}; + +class StaticGraph100032 : public IStaticGraphConfig +{ +public: + StaticGraph100032(GraphConfiguration100032* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100032(); + static const uint32_t hashCode = 4125323650; // autogenerated + +private: + // Configuration + GraphConfiguration100032 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode _lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100032 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[16]; +}; + +class imageSubGraphTopology100033 : public GraphTopology { + +public: + imageSubGraphTopology100033(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 14, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode* lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[14]; + +}; + +class StaticGraph100033 : public IStaticGraphConfig +{ +public: + StaticGraph100033(GraphConfiguration100033* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100033(); + static const uint32_t hashCode = 3790329975; // autogenerated + +private: + // Configuration + GraphConfiguration100033 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode _lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100033 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[14]; +}; + +class imageSubGraphTopology100034 : public GraphTopology { + +public: + imageSubGraphTopology100034(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 19, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode* lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[19]; + +}; + +class StaticGraph100034 : public IStaticGraphConfig +{ +public: + StaticGraph100034(GraphConfiguration100034* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100034(); + static const uint32_t hashCode = 3501256470; // autogenerated + +private: + // Configuration + GraphConfiguration100034 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode _lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100034 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[19]; +}; + +class imageSubGraphTopology100141 : public GraphTopology { + +public: + imageSubGraphTopology100141(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 30, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode* lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[30]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100141 : public IStaticGraphConfig +{ +public: + StaticGraph100141(GraphConfiguration100141* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100141(); + static const uint32_t hashCode = 1411526436; // autogenerated + +private: + // Configuration + GraphConfiguration100141 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode _lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100141 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[30]; +}; + +class imageSubGraphTopology100100 : public GraphTopology { + +public: + imageSubGraphTopology100100(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 16, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerNoGmvNoTnrWithSapOuterNode* lbffBayerNoGmvNoTnrWithSapOuterNode = nullptr; + GraphLink* subGraphLinks[16]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100100 : public IStaticGraphConfig +{ +public: + StaticGraph100100(GraphConfiguration100100* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100100(); + static const uint32_t hashCode = 979474966; // autogenerated + +private: + // Configuration + GraphConfiguration100100 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffBayerNoGmvNoTnrWithSapOuterNode _lbffBayerNoGmvNoTnrWithSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100100 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[16]; +}; + +class imageSubGraphTopology100101 : public GraphTopology { + +public: + imageSubGraphTopology100101(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 21, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerWithGmvNoTnrWithSapOuterNode* lbffBayerWithGmvNoTnrWithSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[21]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100101 : public IStaticGraphConfig +{ +public: + StaticGraph100101(GraphConfiguration100101* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100101(); + static const uint32_t hashCode = 1847712615; // autogenerated + +private: + // Configuration + GraphConfiguration100101 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffBayerWithGmvNoTnrWithSapOuterNode _lbffBayerWithGmvNoTnrWithSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100101 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[21]; +}; + +class imageSubGraphTopology100102 : public GraphTopology { + +public: + imageSubGraphTopology100102(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 21, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerNoGmvWithTnrWithSapOuterNode* lbffBayerNoGmvWithTnrWithSapOuterNode = nullptr; + GraphLink* subGraphLinks[21]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100102 : public IStaticGraphConfig +{ +public: + StaticGraph100102(GraphConfiguration100102* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100102(); + static const uint32_t hashCode = 153319248; // autogenerated + +private: + // Configuration + GraphConfiguration100102 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffBayerNoGmvWithTnrWithSapOuterNode _lbffBayerNoGmvWithTnrWithSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100102 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[21]; +}; + +class imageSubGraphTopology100157 : public GraphTopology { + +public: + imageSubGraphTopology100157(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 17, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerNoGmvWithTnrWithOpacityOuterNode* lbffBayerNoGmvWithTnrWithOpacityOuterNode = nullptr; + GraphLink* subGraphLinks[17]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100157 : public IStaticGraphConfig +{ +public: + StaticGraph100157(GraphConfiguration100157* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100157(); + static const uint32_t hashCode = 1227238042; // autogenerated + +private: + // Configuration + GraphConfiguration100157 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffBayerNoGmvWithTnrWithOpacityOuterNode _lbffBayerNoGmvWithTnrWithOpacityOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100157 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[17]; +}; + +class imageSubGraphTopology100103 : public GraphTopology { + +public: + imageSubGraphTopology100103(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 26, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerWithGmvWithTnrWithSapOuterNode* lbffBayerWithGmvWithTnrWithSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[26]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100103 : public IStaticGraphConfig +{ +public: + StaticGraph100103(GraphConfiguration100103* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100103(); + static const uint32_t hashCode = 2618946733; // autogenerated + +private: + // Configuration + GraphConfiguration100103 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffBayerWithGmvWithTnrWithSapOuterNode _lbffBayerWithGmvWithTnrWithSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100103 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[26]; +}; + +class imageSubGraphTopology100135 : public GraphTopology { + +public: + imageSubGraphTopology100135(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 26, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerNoGmvWithTnrWithSapOuterNode* lbffBayerNoGmvWithTnrWithSapOuterNode = nullptr; + SwNntmOuterNode* swNntmOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[26]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100135 : public IStaticGraphConfig +{ +public: + StaticGraph100135(GraphConfiguration100135* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100135(); + static const uint32_t hashCode = 3358004578; // autogenerated + +private: + // Configuration + GraphConfiguration100135 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffBayerNoGmvWithTnrWithSapOuterNode _lbffBayerNoGmvWithTnrWithSapOuterNode; + SwNntmOuterNode _swNntmOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100135 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[26]; +}; + +class imageSubGraphTopology100104 : public GraphTopology { + +public: + imageSubGraphTopology100104(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 19, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysPdaf2WithCvOuterNode* isysPdaf2WithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerPdaf2NoGmvNoTnrWithSapOuterNode* lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode = nullptr; + GraphLink* subGraphLinks[19]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100104 : public IStaticGraphConfig +{ +public: + StaticGraph100104(GraphConfiguration100104* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100104(); + static const uint32_t hashCode = 1065030484; // autogenerated + +private: + // Configuration + GraphConfiguration100104 _graphConfiguration; + + /* Outer Nodes */ + IsysPdaf2WithCvOuterNode _isysPdaf2WithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffBayerPdaf2NoGmvNoTnrWithSapOuterNode _lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100104 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[19]; +}; + +class imageSubGraphTopology100105 : public GraphTopology { + +public: + imageSubGraphTopology100105(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 24, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysPdaf2WithCvOuterNode* isysPdaf2WithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerPdaf2WithGmvNoTnrWithSapOuterNode* lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[24]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100105 : public IStaticGraphConfig +{ +public: + StaticGraph100105(GraphConfiguration100105* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100105(); + static const uint32_t hashCode = 4228759985; // autogenerated + +private: + // Configuration + GraphConfiguration100105 _graphConfiguration; + + /* Outer Nodes */ + IsysPdaf2WithCvOuterNode _isysPdaf2WithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffBayerPdaf2WithGmvNoTnrWithSapOuterNode _lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100105 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[24]; +}; + +class imageSubGraphTopology100106 : public GraphTopology { + +public: + imageSubGraphTopology100106(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 24, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysPdaf2WithCvOuterNode* isysPdaf2WithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerPdaf2NoGmvWithTnrWithSapOuterNode* lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode = nullptr; + GraphLink* subGraphLinks[24]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100106 : public IStaticGraphConfig +{ +public: + StaticGraph100106(GraphConfiguration100106* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100106(); + static const uint32_t hashCode = 1961584354; // autogenerated + +private: + // Configuration + GraphConfiguration100106 _graphConfiguration; + + /* Outer Nodes */ + IsysPdaf2WithCvOuterNode _isysPdaf2WithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffBayerPdaf2NoGmvWithTnrWithSapOuterNode _lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100106 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[24]; +}; + +class imageSubGraphTopology100166 : public GraphTopology { + +public: + imageSubGraphTopology100166(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 29, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysPdaf2WithCvOuterNode* isysPdaf2WithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerPdaf2NoGmvWithTnrWithSapOuterNode* lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode = nullptr; + SwNntmOuterNode* swNntmOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[29]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100166 : public IStaticGraphConfig +{ +public: + StaticGraph100166(GraphConfiguration100166* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100166(); + static const uint32_t hashCode = 2757085200; // autogenerated + +private: + // Configuration + GraphConfiguration100166 _graphConfiguration; + + /* Outer Nodes */ + IsysPdaf2WithCvOuterNode _isysPdaf2WithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffBayerPdaf2NoGmvWithTnrWithSapOuterNode _lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + SwNntmOuterNode _swNntmOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100166 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[29]; +}; + +class imageSubGraphTopology100107 : public GraphTopology { + +public: + imageSubGraphTopology100107(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 29, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysPdaf2WithCvOuterNode* isysPdaf2WithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerPdaf2WithGmvWithTnrWithSapOuterNode* lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[29]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100107 : public IStaticGraphConfig +{ +public: + StaticGraph100107(GraphConfiguration100107* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100107(); + static const uint32_t hashCode = 3417490043; // autogenerated + +private: + // Configuration + GraphConfiguration100107 _graphConfiguration; + + /* Outer Nodes */ + IsysPdaf2WithCvOuterNode _isysPdaf2WithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffBayerPdaf2WithGmvWithTnrWithSapOuterNode _lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100107 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[29]; +}; + +class imageSubGraphTopology100145 : public GraphTopology { + +public: + imageSubGraphTopology100145(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 32, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysPdaf2WithCvOuterNode* isysPdaf2WithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerPdaf2WithGmvWithTnrWithSapOuterNode* lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + SwNntmOuterNode* swNntmOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[32]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100145 : public IStaticGraphConfig +{ +public: + StaticGraph100145(GraphConfiguration100145* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100145(); + static const uint32_t hashCode = 2331839989; // autogenerated + +private: + // Configuration + GraphConfiguration100145 _graphConfiguration; + + /* Outer Nodes */ + IsysPdaf2WithCvOuterNode _isysPdaf2WithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffBayerPdaf2WithGmvWithTnrWithSapOuterNode _lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + SwNntmOuterNode _swNntmOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100145 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[32]; +}; + +class imageSubGraphTopology100108 : public GraphTopology { + +public: + imageSubGraphTopology100108(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 17, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerPdaf3NoGmvNoTnrWithSapOuterNode* lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode = nullptr; + GraphLink* subGraphLinks[17]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100108 : public IStaticGraphConfig +{ +public: + StaticGraph100108(GraphConfiguration100108* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100108(); + static const uint32_t hashCode = 2861365606; // autogenerated + +private: + // Configuration + GraphConfiguration100108 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + LbffBayerPdaf3NoGmvNoTnrWithSapOuterNode _lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100108 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[17]; +}; + +class imageSubGraphTopology100109 : public GraphTopology { + +public: + imageSubGraphTopology100109(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 22, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerPdaf3WithGmvNoTnrWithSapOuterNode* lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[22]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100109 : public IStaticGraphConfig +{ +public: + StaticGraph100109(GraphConfiguration100109* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100109(); + static const uint32_t hashCode = 2219839771; // autogenerated + +private: + // Configuration + GraphConfiguration100109 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + LbffBayerPdaf3WithGmvNoTnrWithSapOuterNode _lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100109 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[22]; +}; + +class imageSubGraphTopology100110 : public GraphTopology { + +public: + imageSubGraphTopology100110(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 22, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerPdaf3NoGmvWithTnrWithSapOuterNode* lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode = nullptr; + GraphLink* subGraphLinks[22]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100110 : public IStaticGraphConfig +{ +public: + StaticGraph100110(GraphConfiguration100110* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100110(); + static const uint32_t hashCode = 2694963488; // autogenerated + +private: + // Configuration + GraphConfiguration100110 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + LbffBayerPdaf3NoGmvWithTnrWithSapOuterNode _lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100110 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[22]; +}; + +class imageSubGraphTopology100111 : public GraphTopology { + +public: + imageSubGraphTopology100111(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 27, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerPdaf3WithGmvWithTnrWithSapOuterNode* lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[27]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100111 : public IStaticGraphConfig +{ +public: + StaticGraph100111(GraphConfiguration100111* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100111(); + static const uint32_t hashCode = 4079231553; // autogenerated + +private: + // Configuration + GraphConfiguration100111 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + LbffBayerPdaf3WithGmvWithTnrWithSapOuterNode _lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100111 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[27]; +}; + +class imageSubGraphTopology100136 : public GraphTopology { + +public: + imageSubGraphTopology100136(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 27, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerPdaf3NoGmvWithTnrWithSapOuterNode* lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode = nullptr; + SwNntmOuterNode* swNntmOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[27]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100136 : public IStaticGraphConfig +{ +public: + StaticGraph100136(GraphConfiguration100136* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100136(); + static const uint32_t hashCode = 1694054842; // autogenerated + +private: + // Configuration + GraphConfiguration100136 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + LbffBayerPdaf3NoGmvWithTnrWithSapOuterNode _lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + SwNntmOuterNode _swNntmOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100136 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[27]; +}; + +class imageSubGraphTopology100200 : public GraphTopology { + +public: + imageSubGraphTopology100200(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 28, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode* lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode = nullptr; + SwNntmOuterNode* swNntmOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[28]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100200 : public IStaticGraphConfig +{ +public: + StaticGraph100200(GraphConfiguration100200* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100200(); + static const uint32_t hashCode = 2110743046; // autogenerated + +private: + // Configuration + GraphConfiguration100200 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode _lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + SwNntmOuterNode _swNntmOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100200 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[28]; +}; + +class imageSubGraphTopology100201 : public GraphTopology { + +public: + imageSubGraphTopology100201(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 21, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode* lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode = nullptr; + SwNntmOuterNode* swNntmOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[21]; + +}; + +class StaticGraph100201 : public IStaticGraphConfig +{ +public: + StaticGraph100201(GraphConfiguration100201* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100201(); + static const uint32_t hashCode = 2682513749; // autogenerated + +private: + // Configuration + GraphConfiguration100201 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode _lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + SwNntmOuterNode _swNntmOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100201 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[21]; +}; + +class imageSubGraphTopology100112 : public GraphTopology { + +public: + imageSubGraphTopology100112(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 20, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysDolWithCvOuterNode* isysDolWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffDol2InputsNoGmvNoTnrWithSapOuterNode* lbffDol2InputsNoGmvNoTnrWithSapOuterNode = nullptr; + GraphLink* subGraphLinks[20]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100112 : public IStaticGraphConfig +{ +public: + StaticGraph100112(GraphConfiguration100112* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100112(); + static const uint32_t hashCode = 3373148390; // autogenerated + +private: + // Configuration + GraphConfiguration100112 _graphConfiguration; + + /* Outer Nodes */ + IsysDolWithCvOuterNode _isysDolWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffDol2InputsNoGmvNoTnrWithSapOuterNode _lbffDol2InputsNoGmvNoTnrWithSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100112 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[20]; +}; + +class imageSubGraphTopology100113 : public GraphTopology { + +public: + imageSubGraphTopology100113(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 25, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysDolWithCvOuterNode* isysDolWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffDol2InputsWithGmvNoTnrWithSapOuterNode* lbffDol2InputsWithGmvNoTnrWithSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[25]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100113 : public IStaticGraphConfig +{ +public: + StaticGraph100113(GraphConfiguration100113* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100113(); + static const uint32_t hashCode = 775910727; // autogenerated + +private: + // Configuration + GraphConfiguration100113 _graphConfiguration; + + /* Outer Nodes */ + IsysDolWithCvOuterNode _isysDolWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffDol2InputsWithGmvNoTnrWithSapOuterNode _lbffDol2InputsWithGmvNoTnrWithSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100113 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[25]; +}; + +class imageSubGraphTopology100114 : public GraphTopology { + +public: + imageSubGraphTopology100114(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 30, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysDolWithCvOuterNode* isysDolWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffDol2InputsNoGmvWithTnrWithSapOuterNode* lbffDol2InputsNoGmvWithTnrWithSapOuterNode = nullptr; + SwNntmOuterNode* swNntmOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[30]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100114 : public IStaticGraphConfig +{ +public: + StaticGraph100114(GraphConfiguration100114* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100114(); + static const uint32_t hashCode = 3079396690; // autogenerated + +private: + // Configuration + GraphConfiguration100114 _graphConfiguration; + + /* Outer Nodes */ + IsysDolWithCvOuterNode _isysDolWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffDol2InputsNoGmvWithTnrWithSapOuterNode _lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + SwNntmOuterNode _swNntmOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100114 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[30]; +}; + +class imageSubGraphTopology100146 : public GraphTopology { + +public: + imageSubGraphTopology100146(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 30, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysDolWithCvOuterNode* isysDolWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffDol2InputsNoGmvWithTnrWithSapOuterNode* lbffDol2InputsNoGmvWithTnrWithSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[30]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100146 : public IStaticGraphConfig +{ +public: + StaticGraph100146(GraphConfiguration100146* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100146(); + static const uint32_t hashCode = 2016392616; // autogenerated + +private: + // Configuration + GraphConfiguration100146 _graphConfiguration; + + /* Outer Nodes */ + IsysDolWithCvOuterNode _isysDolWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffDol2InputsNoGmvWithTnrWithSapOuterNode _lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100146 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[30]; +}; + +class imageSubGraphTopology100115 : public GraphTopology { + +public: + imageSubGraphTopology100115(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 30, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysDolWithCvOuterNode* isysDolWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffDol2InputsWithGmvWithTnrWithSapOuterNode* lbffDol2InputsWithGmvWithTnrWithSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[30]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100115 : public IStaticGraphConfig +{ +public: + StaticGraph100115(GraphConfiguration100115* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100115(); + static const uint32_t hashCode = 4059271885; // autogenerated + +private: + // Configuration + GraphConfiguration100115 _graphConfiguration; + + /* Outer Nodes */ + IsysDolWithCvOuterNode _isysDolWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffDol2InputsWithGmvWithTnrWithSapOuterNode _lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100115 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[30]; +}; + +class imageSubGraphTopology100116 : public GraphTopology { + +public: + imageSubGraphTopology100116(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 22, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysDolWithCvOuterNode* isysDolWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffDolSmoothOuterNode* lbffDolSmoothOuterNode = nullptr; + LbffDol3InputsNoGmvNoTnrWithSapOuterNode* lbffDol3InputsNoGmvNoTnrWithSapOuterNode = nullptr; + GraphLink* subGraphLinks[22]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100116 : public IStaticGraphConfig +{ +public: + StaticGraph100116(GraphConfiguration100116* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100116(); + static const uint32_t hashCode = 1685832567; // autogenerated + +private: + // Configuration + GraphConfiguration100116 _graphConfiguration; + + /* Outer Nodes */ + IsysDolWithCvOuterNode _isysDolWithCvOuterNode; + LbffDolSmoothOuterNode _lbffDolSmoothOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffDol3InputsNoGmvNoTnrWithSapOuterNode _lbffDol3InputsNoGmvNoTnrWithSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100116 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[22]; +}; + +class imageSubGraphTopology100117 : public GraphTopology { + +public: + imageSubGraphTopology100117(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 27, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysDolWithCvOuterNode* isysDolWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffDolSmoothOuterNode* lbffDolSmoothOuterNode = nullptr; + LbffDol3InputsWithGmvNoTnrWithSapOuterNode* lbffDol3InputsWithGmvNoTnrWithSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[27]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100117 : public IStaticGraphConfig +{ +public: + StaticGraph100117(GraphConfiguration100117* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100117(); + static const uint32_t hashCode = 2530207606; // autogenerated + +private: + // Configuration + GraphConfiguration100117 _graphConfiguration; + + /* Outer Nodes */ + IsysDolWithCvOuterNode _isysDolWithCvOuterNode; + LbffDolSmoothOuterNode _lbffDolSmoothOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffDol3InputsWithGmvNoTnrWithSapOuterNode _lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100117 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[27]; +}; + +class imageSubGraphTopology100118 : public GraphTopology { + +public: + imageSubGraphTopology100118(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 27, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysDolWithCvOuterNode* isysDolWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffDolSmoothOuterNode* lbffDolSmoothOuterNode = nullptr; + LbffDol3InputsNoGmvWithTnrWithSapOuterNode* lbffDol3InputsNoGmvWithTnrWithSapOuterNode = nullptr; + GraphLink* subGraphLinks[27]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100118 : public IStaticGraphConfig +{ +public: + StaticGraph100118(GraphConfiguration100118* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100118(); + static const uint32_t hashCode = 3747109621; // autogenerated + +private: + // Configuration + GraphConfiguration100118 _graphConfiguration; + + /* Outer Nodes */ + IsysDolWithCvOuterNode _isysDolWithCvOuterNode; + LbffDolSmoothOuterNode _lbffDolSmoothOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffDol3InputsNoGmvWithTnrWithSapOuterNode _lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100118 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[27]; +}; + +class imageSubGraphTopology100119 : public GraphTopology { + +public: + imageSubGraphTopology100119(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 32, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysDolWithCvOuterNode* isysDolWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffDolSmoothOuterNode* lbffDolSmoothOuterNode = nullptr; + LbffDol3InputsWithGmvWithTnrWithSapOuterNode* lbffDol3InputsWithGmvWithTnrWithSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[32]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100119 : public IStaticGraphConfig +{ +public: + StaticGraph100119(GraphConfiguration100119* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100119(); + static const uint32_t hashCode = 884100888; // autogenerated + +private: + // Configuration + GraphConfiguration100119 _graphConfiguration; + + /* Outer Nodes */ + IsysDolWithCvOuterNode _isysDolWithCvOuterNode; + LbffDolSmoothOuterNode _lbffDolSmoothOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffDol3InputsWithGmvWithTnrWithSapOuterNode _lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100119 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[32]; +}; + +class imageSubGraphTopology100120 : public GraphTopology { + +public: + imageSubGraphTopology100120(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 17, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffRgbIrNoGmvNoTnrWithSapOuterNode* lbffRgbIrNoGmvNoTnrWithSapOuterNode = nullptr; + GraphLink* subGraphLinks[17]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class irSubGraphTopology100120 : public GraphTopology { + +public: + irSubGraphTopology100120(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 24, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffRgbIrNoGmvNoTnrWithSapOuterNode* lbffRgbIrNoGmvNoTnrWithSapOuterNode = nullptr; + LbffRgbIrIrNoGmvNoTnrNoSapOuterNode* lbffRgbIrIrNoGmvNoTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[24]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class image_irSubGraphTopology100120 : public GraphTopology { + +public: + image_irSubGraphTopology100120(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 24, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffRgbIrNoGmvNoTnrWithSapOuterNode* lbffRgbIrNoGmvNoTnrWithSapOuterNode = nullptr; + LbffRgbIrIrNoGmvNoTnrNoSapOuterNode* lbffRgbIrIrNoGmvNoTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[24]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100120 : public IStaticGraphConfig +{ +public: + StaticGraph100120(GraphConfiguration100120* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100120(); + static const uint32_t hashCode = 2575276355; // autogenerated + +private: + // Configuration + GraphConfiguration100120 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffRgbIrNoGmvNoTnrWithSapOuterNode _lbffRgbIrNoGmvNoTnrWithSapOuterNode; + LbffRgbIrIrNoGmvNoTnrNoSapOuterNode _lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100120 _imageSubGraph; + irSubGraphTopology100120 _irSubGraph; + image_irSubGraphTopology100120 _image_irSubGraph; + + // All graph links + GraphLink _graphLinks[24]; +}; + +class imageSubGraphTopology100121 : public GraphTopology { + +public: + imageSubGraphTopology100121(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 22, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffRgbIrWithGmvNoTnrWithSapOuterNode* lbffRgbIrWithGmvNoTnrWithSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[22]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class irSubGraphTopology100121 : public GraphTopology { + +public: + irSubGraphTopology100121(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 26, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffRgbIrWithGmvNoTnrWithSapOuterNode* lbffRgbIrWithGmvNoTnrWithSapOuterNode = nullptr; + LbffRgbIrIrNoGmvNoTnrNoSapOuterNode* lbffRgbIrIrNoGmvNoTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[26]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class image_irSubGraphTopology100121 : public GraphTopology { + +public: + image_irSubGraphTopology100121(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 29, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffRgbIrWithGmvNoTnrWithSapOuterNode* lbffRgbIrWithGmvNoTnrWithSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + LbffRgbIrIrNoGmvNoTnrNoSapOuterNode* lbffRgbIrIrNoGmvNoTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[29]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100121 : public IStaticGraphConfig +{ +public: + StaticGraph100121(GraphConfiguration100121* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100121(); + static const uint32_t hashCode = 1182562082; // autogenerated + +private: + // Configuration + GraphConfiguration100121 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffRgbIrWithGmvNoTnrWithSapOuterNode _lbffRgbIrWithGmvNoTnrWithSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + LbffRgbIrIrNoGmvNoTnrNoSapOuterNode _lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100121 _imageSubGraph; + irSubGraphTopology100121 _irSubGraph; + image_irSubGraphTopology100121 _image_irSubGraph; + + // All graph links + GraphLink _graphLinks[29]; +}; + +class imageSubGraphTopology100122 : public GraphTopology { + +public: + imageSubGraphTopology100122(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 22, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffRgbIrNoGmvWithTnrWithSapOuterNode* lbffRgbIrNoGmvWithTnrWithSapOuterNode = nullptr; + GraphLink* subGraphLinks[22]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class irSubGraphTopology100122 : public GraphTopology { + +public: + irSubGraphTopology100122(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 32, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffRgbIrNoGmvWithTnrWithSapOuterNode* lbffRgbIrNoGmvWithTnrWithSapOuterNode = nullptr; + LbffRgbIrIrNoGmvWithTnrNoSapOuterNode* lbffRgbIrIrNoGmvWithTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[32]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class image_irSubGraphTopology100122 : public GraphTopology { + +public: + image_irSubGraphTopology100122(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 32, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffRgbIrNoGmvWithTnrWithSapOuterNode* lbffRgbIrNoGmvWithTnrWithSapOuterNode = nullptr; + LbffRgbIrIrNoGmvWithTnrNoSapOuterNode* lbffRgbIrIrNoGmvWithTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[32]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100122 : public IStaticGraphConfig +{ +public: + StaticGraph100122(GraphConfiguration100122* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100122(); + static const uint32_t hashCode = 1989256033; // autogenerated + +private: + // Configuration + GraphConfiguration100122 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffRgbIrNoGmvWithTnrWithSapOuterNode _lbffRgbIrNoGmvWithTnrWithSapOuterNode; + LbffRgbIrIrNoGmvWithTnrNoSapOuterNode _lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100122 _imageSubGraph; + irSubGraphTopology100122 _irSubGraph; + image_irSubGraphTopology100122 _image_irSubGraph; + + // All graph links + GraphLink _graphLinks[32]; +}; + +class imageSubGraphTopology100123 : public GraphTopology { + +public: + imageSubGraphTopology100123(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 27, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffRgbIrWithGmvWithTnrWithSapOuterNode* lbffRgbIrWithGmvWithTnrWithSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[27]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class irSubGraphTopology100123 : public GraphTopology { + +public: + irSubGraphTopology100123(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 34, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffRgbIrWithGmvWithTnrWithSapOuterNode* lbffRgbIrWithGmvWithTnrWithSapOuterNode = nullptr; + LbffRgbIrIrNoGmvWithTnrNoSapOuterNode* lbffRgbIrIrNoGmvWithTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[34]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class image_irSubGraphTopology100123 : public GraphTopology { + +public: + image_irSubGraphTopology100123(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 37, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffRgbIrWithGmvWithTnrWithSapOuterNode* lbffRgbIrWithGmvWithTnrWithSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + LbffRgbIrIrNoGmvWithTnrNoSapOuterNode* lbffRgbIrIrNoGmvWithTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[37]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100123 : public IStaticGraphConfig +{ +public: + StaticGraph100123(GraphConfiguration100123* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100123(); + static const uint32_t hashCode = 2996897520; // autogenerated + +private: + // Configuration + GraphConfiguration100123 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffRgbIrWithGmvWithTnrWithSapOuterNode _lbffRgbIrWithGmvWithTnrWithSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + LbffRgbIrIrNoGmvWithTnrNoSapOuterNode _lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100123 _imageSubGraph; + irSubGraphTopology100123 _irSubGraph; + image_irSubGraphTopology100123 _image_irSubGraph; + + // All graph links + GraphLink _graphLinks[37]; +}; + +class imageSubGraphTopology100127 : public GraphTopology { + +public: + imageSubGraphTopology100127(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 15, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffIrNoGmvNoTnrWithSapOuterNode* lbffIrNoGmvNoTnrWithSapOuterNode = nullptr; + GraphLink* subGraphLinks[15]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100127 : public IStaticGraphConfig +{ +public: + StaticGraph100127(GraphConfiguration100127* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100127(); + static const uint32_t hashCode = 665694580; // autogenerated + +private: + // Configuration + GraphConfiguration100127 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffIrNoGmvNoTnrWithSapOuterNode _lbffIrNoGmvNoTnrWithSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100127 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[15]; +}; + +class imageSubGraphTopology100128 : public GraphTopology { + +public: + imageSubGraphTopology100128(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 20, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffIrWithGmvNoTnrWithSapOuterNode* lbffIrWithGmvNoTnrWithSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[20]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100128 : public IStaticGraphConfig +{ +public: + StaticGraph100128(GraphConfiguration100128* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100128(); + static const uint32_t hashCode = 2853013665; // autogenerated + +private: + // Configuration + GraphConfiguration100128 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffIrWithGmvNoTnrWithSapOuterNode _lbffIrWithGmvNoTnrWithSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100128 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[20]; +}; + +class imageSubGraphTopology100129 : public GraphTopology { + +public: + imageSubGraphTopology100129(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 20, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffIrNoGmvWithTnrWithSapOuterNode* lbffIrNoGmvWithTnrWithSapOuterNode = nullptr; + GraphLink* subGraphLinks[20]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100129 : public IStaticGraphConfig +{ +public: + StaticGraph100129(GraphConfiguration100129* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100129(); + static const uint32_t hashCode = 4213662938; // autogenerated + +private: + // Configuration + GraphConfiguration100129 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffIrNoGmvWithTnrWithSapOuterNode _lbffIrNoGmvWithTnrWithSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100129 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[20]; +}; + +class imageSubGraphTopology100130 : public GraphTopology { + +public: + imageSubGraphTopology100130(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 25, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffIrWithGmvWithTnrWithSapOuterNode* lbffIrWithGmvWithTnrWithSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[25]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100130 : public IStaticGraphConfig +{ +public: + StaticGraph100130(GraphConfiguration100130* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100130(); + static const uint32_t hashCode = 869828371; // autogenerated + +private: + // Configuration + GraphConfiguration100130 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffIrWithGmvWithTnrWithSapOuterNode _lbffIrWithGmvWithTnrWithSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100130 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[25]; +}; + +class imageSubGraphTopology100131 : public GraphTopology { + +public: + imageSubGraphTopology100131(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 18, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode* lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode = nullptr; + GraphLink* subGraphLinks[18]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100131 : public IStaticGraphConfig +{ +public: + StaticGraph100131(GraphConfiguration100131* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100131(); + static const uint32_t hashCode = 2610800282; // autogenerated + +private: + // Configuration + GraphConfiguration100131 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode _lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100131 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[18]; +}; + +class imageSubGraphTopology100132 : public GraphTopology { + +public: + imageSubGraphTopology100132(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 23, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode* lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[23]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100132 : public IStaticGraphConfig +{ +public: + StaticGraph100132(GraphConfiguration100132* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100132(); + static const uint32_t hashCode = 3902911643; // autogenerated + +private: + // Configuration + GraphConfiguration100132 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode _lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100132 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[23]; +}; + +class imageSubGraphTopology100133 : public GraphTopology { + +public: + imageSubGraphTopology100133(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 23, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode* lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode = nullptr; + GraphLink* subGraphLinks[23]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100133 : public IStaticGraphConfig +{ +public: + StaticGraph100133(GraphConfiguration100133* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100133(); + static const uint32_t hashCode = 1466946020; // autogenerated + +private: + // Configuration + GraphConfiguration100133 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode _lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100133 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[23]; +}; + +class imageSubGraphTopology100134 : public GraphTopology { + +public: + imageSubGraphTopology100134(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 28, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode* lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[28]; + +private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100134 : public IStaticGraphConfig +{ +public: + StaticGraph100134(GraphConfiguration100134* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100134(); + static const uint32_t hashCode = 3934160849; // autogenerated + +private: + // Configuration + GraphConfiguration100134 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode _lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100134 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[28]; +}; + +class imageSubGraphTopology100235 : public GraphTopology { + +public: + imageSubGraphTopology100235(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 11, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + LbffBayerNoGmvNoTnrNoSapOuterNode* lbffBayerNoGmvNoTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[11]; + +}; + +class StaticGraph100235 : public IStaticGraphConfig +{ +public: + StaticGraph100235(GraphConfiguration100235* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100235(); + static const uint32_t hashCode = 2478418735; // autogenerated + +private: + // Configuration + GraphConfiguration100235 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + LbffBayerNoGmvNoTnrNoSapOuterNode _lbffBayerNoGmvNoTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100235 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[11]; +}; + +class imageSubGraphTopology100236 : public GraphTopology { + +public: + imageSubGraphTopology100236(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 16, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + LbffBayerWithGmvNoTnrNoSapOuterNode* lbffBayerWithGmvNoTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[16]; + +}; + +class StaticGraph100236 : public IStaticGraphConfig +{ +public: + StaticGraph100236(GraphConfiguration100236* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100236(); + static const uint32_t hashCode = 1051883122; // autogenerated + +private: + // Configuration + GraphConfiguration100236 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + LbffBayerWithGmvNoTnrNoSapOuterNode _lbffBayerWithGmvNoTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100236 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[16]; +}; + +class imageSubGraphTopology100202 : public GraphTopology { + +public: + imageSubGraphTopology100202(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 14, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + LbffBayerNoGmvWithTnrNoSapOuterNode* lbffBayerNoGmvWithTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[14]; + +}; + +class StaticGraph100202 : public IStaticGraphConfig +{ +public: + StaticGraph100202(GraphConfiguration100202* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100202(); + static const uint32_t hashCode = 3098003927; // autogenerated + +private: + // Configuration + GraphConfiguration100202 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + LbffBayerNoGmvWithTnrNoSapOuterNode _lbffBayerNoGmvWithTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100202 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[14]; +}; + +class imageSubGraphTopology100203 : public GraphTopology { + +public: + imageSubGraphTopology100203(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 19, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + LbffBayerWithGmvWithTnrNoSapOuterNode* lbffBayerWithGmvWithTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[19]; + +}; + +class StaticGraph100203 : public IStaticGraphConfig +{ +public: + StaticGraph100203(GraphConfiguration100203* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100203(); + static const uint32_t hashCode = 3620359798; // autogenerated + +private: + // Configuration + GraphConfiguration100203 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + LbffBayerWithGmvWithTnrNoSapOuterNode _lbffBayerWithGmvWithTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100203 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[19]; +}; + +class imageSubGraphTopology100279 : public GraphTopology { + +public: + imageSubGraphTopology100279(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 19, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + LbffBayerNoGmvWithTnrNoSapOuterNode* lbffBayerNoGmvWithTnrNoSapOuterNode = nullptr; + SwNntmOuterNode* swNntmOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[19]; + +}; + +class StaticGraph100279 : public IStaticGraphConfig +{ +public: + StaticGraph100279(GraphConfiguration100279* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100279(); + static const uint32_t hashCode = 2460009817; // autogenerated + +private: + // Configuration + GraphConfiguration100279 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + LbffBayerNoGmvWithTnrNoSapOuterNode _lbffBayerNoGmvWithTnrNoSapOuterNode; + SwNntmOuterNode _swNntmOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100279 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[19]; +}; + +class imageSubGraphTopology100280 : public GraphTopology { + +public: + imageSubGraphTopology100280(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 19, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + LbffBayerNoGmvWithTnrNoSapOuterNode* lbffBayerNoGmvWithTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[19]; + +}; + +class StaticGraph100280 : public IStaticGraphConfig +{ +public: + StaticGraph100280(GraphConfiguration100280* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100280(); + static const uint32_t hashCode = 1706839531; // autogenerated + +private: + // Configuration + GraphConfiguration100280 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + LbffBayerNoGmvWithTnrNoSapOuterNode _lbffBayerNoGmvWithTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100280 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[19]; +}; + +class imageSubGraphTopology100281 : public GraphTopology { + +public: + imageSubGraphTopology100281(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 21, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + LbffBayerWithGmvWithTnrNoSapOuterNode* lbffBayerWithGmvWithTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[21]; + +}; + +class StaticGraph100281 : public IStaticGraphConfig +{ +public: + StaticGraph100281(GraphConfiguration100281* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100281(); + static const uint32_t hashCode = 2869082619; // autogenerated + +private: + // Configuration + GraphConfiguration100281 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + LbffBayerWithGmvWithTnrNoSapOuterNode _lbffBayerWithGmvWithTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100281 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[21]; +}; + +class imageSubGraphTopology100204 : public GraphTopology { + +public: + imageSubGraphTopology100204(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 14, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysPdaf2WithCvOuterNode* isysPdaf2WithCvOuterNode = nullptr; + LbffBayerPdaf2NoGmvNoTnrNoSapOuterNode* lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[14]; + +}; + +class StaticGraph100204 : public IStaticGraphConfig +{ +public: + StaticGraph100204(GraphConfiguration100204* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100204(); + static const uint32_t hashCode = 1660669249; // autogenerated + +private: + // Configuration + GraphConfiguration100204 _graphConfiguration; + + /* Outer Nodes */ + IsysPdaf2WithCvOuterNode _isysPdaf2WithCvOuterNode; + LbffBayerPdaf2NoGmvNoTnrNoSapOuterNode _lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100204 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[14]; +}; + +class imageSubGraphTopology100205 : public GraphTopology { + +public: + imageSubGraphTopology100205(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 19, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysPdaf2WithCvOuterNode* isysPdaf2WithCvOuterNode = nullptr; + LbffBayerPdaf2WithGmvNoTnrNoSapOuterNode* lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[19]; + +}; + +class StaticGraph100205 : public IStaticGraphConfig +{ +public: + StaticGraph100205(GraphConfiguration100205* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100205(); + static const uint32_t hashCode = 1883478648; // autogenerated + +private: + // Configuration + GraphConfiguration100205 _graphConfiguration; + + /* Outer Nodes */ + IsysPdaf2WithCvOuterNode _isysPdaf2WithCvOuterNode; + LbffBayerPdaf2WithGmvNoTnrNoSapOuterNode _lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100205 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[19]; +}; + +class imageSubGraphTopology100206 : public GraphTopology { + +public: + imageSubGraphTopology100206(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 17, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysPdaf2WithCvOuterNode* isysPdaf2WithCvOuterNode = nullptr; + LbffBayerPdaf2NoGmvWithTnrNoSapOuterNode* lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[17]; + +}; + +class StaticGraph100206 : public IStaticGraphConfig +{ +public: + StaticGraph100206(GraphConfiguration100206* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100206(); + static const uint32_t hashCode = 518310241; // autogenerated + +private: + // Configuration + GraphConfiguration100206 _graphConfiguration; + + /* Outer Nodes */ + IsysPdaf2WithCvOuterNode _isysPdaf2WithCvOuterNode; + LbffBayerPdaf2NoGmvWithTnrNoSapOuterNode _lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100206 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[17]; +}; + +class imageSubGraphTopology100266 : public GraphTopology { + +public: + imageSubGraphTopology100266(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 22, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysPdaf2WithCvOuterNode* isysPdaf2WithCvOuterNode = nullptr; + LbffBayerPdaf2NoGmvWithTnrNoSapOuterNode* lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode = nullptr; + SwNntmOuterNode* swNntmOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[22]; + +}; + +class StaticGraph100266 : public IStaticGraphConfig +{ +public: + StaticGraph100266(GraphConfiguration100266* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100266(); + static const uint32_t hashCode = 1168531559; // autogenerated + +private: + // Configuration + GraphConfiguration100266 _graphConfiguration; + + /* Outer Nodes */ + IsysPdaf2WithCvOuterNode _isysPdaf2WithCvOuterNode; + LbffBayerPdaf2NoGmvWithTnrNoSapOuterNode _lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + SwNntmOuterNode _swNntmOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100266 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[22]; +}; + +class imageSubGraphTopology100207 : public GraphTopology { + +public: + imageSubGraphTopology100207(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 22, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysPdaf2WithCvOuterNode* isysPdaf2WithCvOuterNode = nullptr; + LbffBayerPdaf2WithGmvWithTnrNoSapOuterNode* lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[22]; + +}; + +class StaticGraph100207 : public IStaticGraphConfig +{ +public: + StaticGraph100207(GraphConfiguration100207* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100207(); + static const uint32_t hashCode = 3134985348; // autogenerated + +private: + // Configuration + GraphConfiguration100207 _graphConfiguration; + + /* Outer Nodes */ + IsysPdaf2WithCvOuterNode _isysPdaf2WithCvOuterNode; + LbffBayerPdaf2WithGmvWithTnrNoSapOuterNode _lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100207 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[22]; +}; + +class imageSubGraphTopology100267 : public GraphTopology { + +public: + imageSubGraphTopology100267(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 25, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysPdaf2WithCvOuterNode* isysPdaf2WithCvOuterNode = nullptr; + LbffBayerPdaf2WithGmvWithTnrNoSapOuterNode* lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + SwNntmOuterNode* swNntmOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[25]; + +}; + +class StaticGraph100267 : public IStaticGraphConfig +{ +public: + StaticGraph100267(GraphConfiguration100267* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100267(); + static const uint32_t hashCode = 1282030934; // autogenerated + +private: + // Configuration + GraphConfiguration100267 _graphConfiguration; + + /* Outer Nodes */ + IsysPdaf2WithCvOuterNode _isysPdaf2WithCvOuterNode; + LbffBayerPdaf2WithGmvWithTnrNoSapOuterNode _lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + SwNntmOuterNode _swNntmOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100267 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[25]; +}; + +class imageSubGraphTopology100208 : public GraphTopology { + +public: + imageSubGraphTopology100208(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 12, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + LbffBayerPdaf3NoGmvNoTnrNoSapOuterNode* lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[12]; + +}; + +class StaticGraph100208 : public IStaticGraphConfig +{ +public: + StaticGraph100208(GraphConfiguration100208* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100208(); + static const uint32_t hashCode = 1303928563; // autogenerated + +private: + // Configuration + GraphConfiguration100208 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + LbffBayerPdaf3NoGmvNoTnrNoSapOuterNode _lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100208 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[12]; +}; + +class imageSubGraphTopology100209 : public GraphTopology { + +public: + imageSubGraphTopology100209(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 17, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + LbffBayerPdaf3WithGmvNoTnrNoSapOuterNode* lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[17]; + +}; + +class StaticGraph100209 : public IStaticGraphConfig +{ +public: + StaticGraph100209(GraphConfiguration100209* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100209(); + static const uint32_t hashCode = 2222977298; // autogenerated + +private: + // Configuration + GraphConfiguration100209 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + LbffBayerPdaf3WithGmvNoTnrNoSapOuterNode _lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100209 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[17]; +}; + +class imageSubGraphTopology100210 : public GraphTopology { + +public: + imageSubGraphTopology100210(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 15, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + LbffBayerPdaf3NoGmvWithTnrNoSapOuterNode* lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[15]; + +}; + +class StaticGraph100210 : public IStaticGraphConfig +{ +public: + StaticGraph100210(GraphConfiguration100210* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100210(); + static const uint32_t hashCode = 3037692187; // autogenerated + +private: + // Configuration + GraphConfiguration100210 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + LbffBayerPdaf3NoGmvWithTnrNoSapOuterNode _lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100210 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[15]; +}; + +class imageSubGraphTopology100211 : public GraphTopology { + +public: + imageSubGraphTopology100211(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 20, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + LbffBayerPdaf3WithGmvWithTnrNoSapOuterNode* lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[20]; + +}; + +class StaticGraph100211 : public IStaticGraphConfig +{ +public: + StaticGraph100211(GraphConfiguration100211* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100211(); + static const uint32_t hashCode = 523724710; // autogenerated + +private: + // Configuration + GraphConfiguration100211 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + LbffBayerPdaf3WithGmvWithTnrNoSapOuterNode _lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100211 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[20]; +}; + +class imageSubGraphTopology100245 : public GraphTopology { + +public: + imageSubGraphTopology100245(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 20, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + LbffBayerPdaf3NoGmvWithTnrNoSapOuterNode* lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode = nullptr; + SwNntmOuterNode* swNntmOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[20]; + +}; + +class StaticGraph100245 : public IStaticGraphConfig +{ +public: + StaticGraph100245(GraphConfiguration100245* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100245(); + static const uint32_t hashCode = 1070431653; // autogenerated + +private: + // Configuration + GraphConfiguration100245 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + LbffBayerPdaf3NoGmvWithTnrNoSapOuterNode _lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + SwNntmOuterNode _swNntmOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100245 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[20]; +}; + +class imageSubGraphTopology100212 : public GraphTopology { + +public: + imageSubGraphTopology100212(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 19, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysDolWithCvOuterNode* isysDolWithCvOuterNode = nullptr; + LbffDol2InputsNoGmvNoTnrNoSapOuterNode* lbffDol2InputsNoGmvNoTnrNoSapOuterNode = nullptr; + SwNntmOuterNode* swNntmOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[19]; + +}; + +class StaticGraph100212 : public IStaticGraphConfig +{ +public: + StaticGraph100212(GraphConfiguration100212* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100212(); + static const uint32_t hashCode = 188186817; // autogenerated + +private: + // Configuration + GraphConfiguration100212 _graphConfiguration; + + /* Outer Nodes */ + IsysDolWithCvOuterNode _isysDolWithCvOuterNode; + LbffDol2InputsNoGmvNoTnrNoSapOuterNode _lbffDol2InputsNoGmvNoTnrNoSapOuterNode; + SwNntmOuterNode _swNntmOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100212 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[19]; +}; + +class imageSubGraphTopology100213 : public GraphTopology { + +public: + imageSubGraphTopology100213(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 19, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysDolWithCvOuterNode* isysDolWithCvOuterNode = nullptr; + LbffDol2InputsWithGmvNoTnrNoSapOuterNode* lbffDol2InputsWithGmvNoTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[19]; + +}; + +class StaticGraph100213 : public IStaticGraphConfig +{ +public: + StaticGraph100213(GraphConfiguration100213* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100213(); + static const uint32_t hashCode = 472923214; // autogenerated + +private: + // Configuration + GraphConfiguration100213 _graphConfiguration; + + /* Outer Nodes */ + IsysDolWithCvOuterNode _isysDolWithCvOuterNode; + LbffDol2InputsWithGmvNoTnrNoSapOuterNode _lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100213 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[19]; +}; + +class imageSubGraphTopology100214 : public GraphTopology { + +public: + imageSubGraphTopology100214(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 22, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysDolWithCvOuterNode* isysDolWithCvOuterNode = nullptr; + LbffDol2InputsNoGmvWithTnrNoSapOuterNode* lbffDol2InputsNoGmvWithTnrNoSapOuterNode = nullptr; + SwNntmOuterNode* swNntmOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[22]; + +}; + +class StaticGraph100214 : public IStaticGraphConfig +{ +public: + StaticGraph100214(GraphConfiguration100214* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100214(); + static const uint32_t hashCode = 622107393; // autogenerated + +private: + // Configuration + GraphConfiguration100214 _graphConfiguration; + + /* Outer Nodes */ + IsysDolWithCvOuterNode _isysDolWithCvOuterNode; + LbffDol2InputsNoGmvWithTnrNoSapOuterNode _lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + SwNntmOuterNode _swNntmOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100214 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[22]; +}; + +class imageSubGraphTopology100215 : public GraphTopology { + +public: + imageSubGraphTopology100215(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 22, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysDolWithCvOuterNode* isysDolWithCvOuterNode = nullptr; + LbffDol2InputsWithGmvWithTnrNoSapOuterNode* lbffDol2InputsWithGmvWithTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[22]; + +}; + +class StaticGraph100215 : public IStaticGraphConfig +{ +public: + StaticGraph100215(GraphConfiguration100215* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100215(); + static const uint32_t hashCode = 601786370; // autogenerated + +private: + // Configuration + GraphConfiguration100215 _graphConfiguration; + + /* Outer Nodes */ + IsysDolWithCvOuterNode _isysDolWithCvOuterNode; + LbffDol2InputsWithGmvWithTnrNoSapOuterNode _lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100215 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[22]; +}; + +class imageSubGraphTopology100216 : public GraphTopology { + +public: + imageSubGraphTopology100216(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 21, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysDolWithCvOuterNode* isysDolWithCvOuterNode = nullptr; + LbffDolSmoothOuterNode* lbffDolSmoothOuterNode = nullptr; + LbffDol3InputsNoGmvNoTnrNoSapOuterNode* lbffDol3InputsNoGmvNoTnrNoSapOuterNode = nullptr; + SwNntmOuterNode* swNntmOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[21]; + +}; + +class StaticGraph100216 : public IStaticGraphConfig +{ +public: + StaticGraph100216(GraphConfiguration100216* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100216(); + static const uint32_t hashCode = 2917059976; // autogenerated + +private: + // Configuration + GraphConfiguration100216 _graphConfiguration; + + /* Outer Nodes */ + IsysDolWithCvOuterNode _isysDolWithCvOuterNode; + LbffDolSmoothOuterNode _lbffDolSmoothOuterNode; + LbffDol3InputsNoGmvNoTnrNoSapOuterNode _lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + SwNntmOuterNode _swNntmOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100216 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[21]; +}; + +class imageSubGraphTopology100217 : public GraphTopology { + +public: + imageSubGraphTopology100217(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 21, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysDolWithCvOuterNode* isysDolWithCvOuterNode = nullptr; + LbffDolSmoothOuterNode* lbffDolSmoothOuterNode = nullptr; + LbffDol3InputsWithGmvNoTnrNoSapOuterNode* lbffDol3InputsWithGmvNoTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[21]; + +}; + +class StaticGraph100217 : public IStaticGraphConfig +{ +public: + StaticGraph100217(GraphConfiguration100217* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100217(); + static const uint32_t hashCode = 3566156067; // autogenerated + +private: + // Configuration + GraphConfiguration100217 _graphConfiguration; + + /* Outer Nodes */ + IsysDolWithCvOuterNode _isysDolWithCvOuterNode; + LbffDolSmoothOuterNode _lbffDolSmoothOuterNode; + LbffDol3InputsWithGmvNoTnrNoSapOuterNode _lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100217 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[21]; +}; + +class imageSubGraphTopology100218 : public GraphTopology { + +public: + imageSubGraphTopology100218(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 24, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysDolWithCvOuterNode* isysDolWithCvOuterNode = nullptr; + LbffDolSmoothOuterNode* lbffDolSmoothOuterNode = nullptr; + LbffDol3InputsNoGmvWithTnrNoSapOuterNode* lbffDol3InputsNoGmvWithTnrNoSapOuterNode = nullptr; + SwNntmOuterNode* swNntmOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[24]; + +}; + +class StaticGraph100218 : public IStaticGraphConfig +{ +public: + StaticGraph100218(GraphConfiguration100218* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100218(); + static const uint32_t hashCode = 959076628; // autogenerated + +private: + // Configuration + GraphConfiguration100218 _graphConfiguration; + + /* Outer Nodes */ + IsysDolWithCvOuterNode _isysDolWithCvOuterNode; + LbffDolSmoothOuterNode _lbffDolSmoothOuterNode; + LbffDol3InputsNoGmvWithTnrNoSapOuterNode _lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + SwNntmOuterNode _swNntmOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100218 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[24]; +}; + +class imageSubGraphTopology100219 : public GraphTopology { + +public: + imageSubGraphTopology100219(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 24, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysDolWithCvOuterNode* isysDolWithCvOuterNode = nullptr; + LbffDolSmoothOuterNode* lbffDolSmoothOuterNode = nullptr; + LbffDol3InputsWithGmvWithTnrNoSapOuterNode* lbffDol3InputsWithGmvWithTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[24]; + +}; + +class StaticGraph100219 : public IStaticGraphConfig +{ +public: + StaticGraph100219(GraphConfiguration100219* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100219(); + static const uint32_t hashCode = 1127650427; // autogenerated + +private: + // Configuration + GraphConfiguration100219 _graphConfiguration; + + /* Outer Nodes */ + IsysDolWithCvOuterNode _isysDolWithCvOuterNode; + LbffDolSmoothOuterNode _lbffDolSmoothOuterNode; + LbffDol3InputsWithGmvWithTnrNoSapOuterNode _lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100219 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[24]; +}; + +class imageSubGraphTopology100220 : public GraphTopology { + +public: + imageSubGraphTopology100220(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 12, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + LbffRgbIrNoGmvNoTnrNoSapOuterNode* lbffRgbIrNoGmvNoTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[12]; + +}; + +class irSubGraphTopology100220 : public GraphTopology { + +public: + irSubGraphTopology100220(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 19, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + LbffRgbIrNoGmvNoTnrNoSapOuterNode* lbffRgbIrNoGmvNoTnrNoSapOuterNode = nullptr; + LbffRgbIrIrNoGmvNoTnrNoSapOuterNode* lbffRgbIrIrNoGmvNoTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[19]; + +}; + +class image_irSubGraphTopology100220 : public GraphTopology { + +public: + image_irSubGraphTopology100220(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 19, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + LbffRgbIrNoGmvNoTnrNoSapOuterNode* lbffRgbIrNoGmvNoTnrNoSapOuterNode = nullptr; + LbffRgbIrIrNoGmvNoTnrNoSapOuterNode* lbffRgbIrIrNoGmvNoTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[19]; + +}; + +class StaticGraph100220 : public IStaticGraphConfig +{ +public: + StaticGraph100220(GraphConfiguration100220* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100220(); + static const uint32_t hashCode = 424044802; // autogenerated + +private: + // Configuration + GraphConfiguration100220 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + LbffRgbIrNoGmvNoTnrNoSapOuterNode _lbffRgbIrNoGmvNoTnrNoSapOuterNode; + LbffRgbIrIrNoGmvNoTnrNoSapOuterNode _lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100220 _imageSubGraph; + irSubGraphTopology100220 _irSubGraph; + image_irSubGraphTopology100220 _image_irSubGraph; + + // All graph links + GraphLink _graphLinks[19]; +}; + +class imageSubGraphTopology100221 : public GraphTopology { + +public: + imageSubGraphTopology100221(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 17, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + LbffRgbIrWithGmvNoTnrNoSapOuterNode* lbffRgbIrWithGmvNoTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[17]; + +}; + +class irSubGraphTopology100221 : public GraphTopology { + +public: + irSubGraphTopology100221(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 21, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + LbffRgbIrWithGmvNoTnrNoSapOuterNode* lbffRgbIrWithGmvNoTnrNoSapOuterNode = nullptr; + LbffRgbIrIrNoGmvNoTnrNoSapOuterNode* lbffRgbIrIrNoGmvNoTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[21]; + +}; + +class image_irSubGraphTopology100221 : public GraphTopology { + +public: + image_irSubGraphTopology100221(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 24, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + LbffRgbIrWithGmvNoTnrNoSapOuterNode* lbffRgbIrWithGmvNoTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + LbffRgbIrIrNoGmvNoTnrNoSapOuterNode* lbffRgbIrIrNoGmvNoTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[24]; + +}; + +class StaticGraph100221 : public IStaticGraphConfig +{ +public: + StaticGraph100221(GraphConfiguration100221* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100221(); + static const uint32_t hashCode = 324391743; // autogenerated + +private: + // Configuration + GraphConfiguration100221 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + LbffRgbIrWithGmvNoTnrNoSapOuterNode _lbffRgbIrWithGmvNoTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + LbffRgbIrIrNoGmvNoTnrNoSapOuterNode _lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100221 _imageSubGraph; + irSubGraphTopology100221 _irSubGraph; + image_irSubGraphTopology100221 _image_irSubGraph; + + // All graph links + GraphLink _graphLinks[24]; +}; + +class imageSubGraphTopology100222 : public GraphTopology { + +public: + imageSubGraphTopology100222(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 15, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + LbffRgbIrNoGmvWithTnrNoSapOuterNode* lbffRgbIrNoGmvWithTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[15]; + +}; + +class irSubGraphTopology100222 : public GraphTopology { + +public: + irSubGraphTopology100222(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 25, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + LbffRgbIrNoGmvWithTnrNoSapOuterNode* lbffRgbIrNoGmvWithTnrNoSapOuterNode = nullptr; + LbffRgbIrIrNoGmvWithTnrNoSapOuterNode* lbffRgbIrIrNoGmvWithTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[25]; + +}; + +class image_irSubGraphTopology100222 : public GraphTopology { + +public: + image_irSubGraphTopology100222(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 25, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + LbffRgbIrNoGmvWithTnrNoSapOuterNode* lbffRgbIrNoGmvWithTnrNoSapOuterNode = nullptr; + LbffRgbIrIrNoGmvWithTnrNoSapOuterNode* lbffRgbIrIrNoGmvWithTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[25]; + +}; + +class StaticGraph100222 : public IStaticGraphConfig +{ +public: + StaticGraph100222(GraphConfiguration100222* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100222(); + static const uint32_t hashCode = 2962422506; // autogenerated + +private: + // Configuration + GraphConfiguration100222 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + LbffRgbIrNoGmvWithTnrNoSapOuterNode _lbffRgbIrNoGmvWithTnrNoSapOuterNode; + LbffRgbIrIrNoGmvWithTnrNoSapOuterNode _lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100222 _imageSubGraph; + irSubGraphTopology100222 _irSubGraph; + image_irSubGraphTopology100222 _image_irSubGraph; + + // All graph links + GraphLink _graphLinks[25]; +}; + +class imageSubGraphTopology100223 : public GraphTopology { + +public: + imageSubGraphTopology100223(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 20, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + LbffRgbIrWithGmvWithTnrNoSapOuterNode* lbffRgbIrWithGmvWithTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[20]; + +}; + +class irSubGraphTopology100223 : public GraphTopology { + +public: + irSubGraphTopology100223(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 27, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + LbffRgbIrWithGmvWithTnrNoSapOuterNode* lbffRgbIrWithGmvWithTnrNoSapOuterNode = nullptr; + LbffRgbIrIrNoGmvWithTnrNoSapOuterNode* lbffRgbIrIrNoGmvWithTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[27]; + +}; + +class image_irSubGraphTopology100223 : public GraphTopology { + +public: + image_irSubGraphTopology100223(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 30, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + LbffRgbIrWithGmvWithTnrNoSapOuterNode* lbffRgbIrWithGmvWithTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + LbffRgbIrIrNoGmvWithTnrNoSapOuterNode* lbffRgbIrIrNoGmvWithTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[30]; + +}; + +class StaticGraph100223 : public IStaticGraphConfig +{ +public: + StaticGraph100223(GraphConfiguration100223* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100223(); + static const uint32_t hashCode = 996717983; // autogenerated + +private: + // Configuration + GraphConfiguration100223 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + LbffRgbIrWithGmvWithTnrNoSapOuterNode _lbffRgbIrWithGmvWithTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + LbffRgbIrIrNoGmvWithTnrNoSapOuterNode _lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100223 _imageSubGraph; + irSubGraphTopology100223 _irSubGraph; + image_irSubGraphTopology100223 _image_irSubGraph; + + // All graph links + GraphLink _graphLinks[30]; +}; + +class imageSubGraphTopology100224 : public GraphTopology { + +public: + imageSubGraphTopology100224(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 8, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + LbffBayerNoGmvNoTnrNoSapOuterNode* lbffBayerNoGmvNoTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[8]; + +}; + +class StaticGraph100224 : public IStaticGraphConfig +{ +public: + StaticGraph100224(GraphConfiguration100224* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100224(); + static const uint32_t hashCode = 345517015; // autogenerated + +private: + // Configuration + GraphConfiguration100224 _graphConfiguration; + + /* Outer Nodes */ + WithCvOuterNode _withCvOuterNode; + LbffBayerNoGmvNoTnrNoSapOuterNode _lbffBayerNoGmvNoTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100224 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[10]; +}; + +class imageSubGraphTopology100240 : public GraphTopology { + +public: + imageSubGraphTopology100240(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 13, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + LbffBayerWithGmvNoTnrNoSapOuterNode* lbffBayerWithGmvNoTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[13]; + +}; + +class StaticGraph100240 : public IStaticGraphConfig +{ +public: + StaticGraph100240(GraphConfiguration100240* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100240(); + static const uint32_t hashCode = 3849563206; // autogenerated + +private: + // Configuration + GraphConfiguration100240 _graphConfiguration; + + /* Outer Nodes */ + WithCvOuterNode _withCvOuterNode; + LbffBayerWithGmvNoTnrNoSapOuterNode _lbffBayerWithGmvNoTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100240 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[15]; +}; + +class imageSubGraphTopology100241 : public GraphTopology { + +public: + imageSubGraphTopology100241(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 16, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + LbffBayerWithGmvWithTnrNoSapOuterNode* lbffBayerWithGmvWithTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[16]; + +}; + +class StaticGraph100241 : public IStaticGraphConfig +{ +public: + StaticGraph100241(GraphConfiguration100241* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100241(); + static const uint32_t hashCode = 3912612986; // autogenerated + +private: + // Configuration + GraphConfiguration100241 _graphConfiguration; + + /* Outer Nodes */ + WithCvOuterNode _withCvOuterNode; + LbffBayerWithGmvWithTnrNoSapOuterNode _lbffBayerWithGmvWithTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100241 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[18]; +}; + +class imageSubGraphTopology100242 : public GraphTopology { + +public: + imageSubGraphTopology100242(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 11, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + LbffBayerNoGmvWithTnrNoSapOuterNode* lbffBayerNoGmvWithTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[11]; + +}; + +class StaticGraph100242 : public IStaticGraphConfig +{ +public: + StaticGraph100242(GraphConfiguration100242* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100242(); + static const uint32_t hashCode = 2667353983; // autogenerated + +private: + // Configuration + GraphConfiguration100242 _graphConfiguration; + + /* Outer Nodes */ + WithCvOuterNode _withCvOuterNode; + LbffBayerNoGmvWithTnrNoSapOuterNode _lbffBayerNoGmvWithTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100242 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[13]; +}; + +class imageSubGraphTopology100227 : public GraphTopology { + +public: + imageSubGraphTopology100227(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 11, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + LbffIrNoGmvNoTnrNoSapOuterNode* lbffIrNoGmvNoTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[11]; + +}; + +class StaticGraph100227 : public IStaticGraphConfig +{ +public: + StaticGraph100227(GraphConfiguration100227* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100227(); + static const uint32_t hashCode = 3291893363; // autogenerated + +private: + // Configuration + GraphConfiguration100227 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + LbffIrNoGmvNoTnrNoSapOuterNode _lbffIrNoGmvNoTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100227 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[11]; +}; + +class imageSubGraphTopology100228 : public GraphTopology { + +public: + imageSubGraphTopology100228(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 16, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + LbffIrWithGmvNoTnrNoSapOuterNode* lbffIrWithGmvNoTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[16]; + +}; + +class StaticGraph100228 : public IStaticGraphConfig +{ +public: + StaticGraph100228(GraphConfiguration100228* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100228(); + static const uint32_t hashCode = 2030580190; // autogenerated + +private: + // Configuration + GraphConfiguration100228 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + LbffIrWithGmvNoTnrNoSapOuterNode _lbffIrWithGmvNoTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100228 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[16]; +}; + +class imageSubGraphTopology100229 : public GraphTopology { + +public: + imageSubGraphTopology100229(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 14, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + LbffIrNoGmvWithTnrNoSapOuterNode* lbffIrNoGmvWithTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[14]; + +}; + +class StaticGraph100229 : public IStaticGraphConfig +{ +public: + StaticGraph100229(GraphConfiguration100229* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100229(); + static const uint32_t hashCode = 229162971; // autogenerated + +private: + // Configuration + GraphConfiguration100229 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + LbffIrNoGmvWithTnrNoSapOuterNode _lbffIrNoGmvWithTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100229 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[14]; +}; + +class imageSubGraphTopology100230 : public GraphTopology { + +public: + imageSubGraphTopology100230(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 19, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + LbffIrWithGmvWithTnrNoSapOuterNode* lbffIrWithGmvWithTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[19]; + +}; + +class StaticGraph100230 : public IStaticGraphConfig +{ +public: + StaticGraph100230(GraphConfiguration100230* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100230(); + static const uint32_t hashCode = 1293637986; // autogenerated + +private: + // Configuration + GraphConfiguration100230 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + LbffIrWithGmvWithTnrNoSapOuterNode _lbffIrWithGmvWithTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100230 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[19]; +}; + +class imageSubGraphTopology100231 : public GraphTopology { + +public: + imageSubGraphTopology100231(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 13, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode* lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[13]; + +}; + +class StaticGraph100231 : public IStaticGraphConfig +{ +public: + StaticGraph100231(GraphConfiguration100231* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100231(); + static const uint32_t hashCode = 284443579; // autogenerated + +private: + // Configuration + GraphConfiguration100231 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode _lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100231 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[13]; +}; + +class imageSubGraphTopology100232 : public GraphTopology { + +public: + imageSubGraphTopology100232(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 18, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode* lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[18]; + +}; + +class StaticGraph100232 : public IStaticGraphConfig +{ +public: + StaticGraph100232(GraphConfiguration100232* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100232(); + static const uint32_t hashCode = 1251767534; // autogenerated + +private: + // Configuration + GraphConfiguration100232 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode _lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100232 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[18]; +}; + +class imageSubGraphTopology100233 : public GraphTopology { + +public: + imageSubGraphTopology100233(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 16, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode* lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[16]; + +}; + +class StaticGraph100233 : public IStaticGraphConfig +{ +public: + StaticGraph100233(GraphConfiguration100233* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100233(); + static const uint32_t hashCode = 1788993219; // autogenerated + +private: + // Configuration + GraphConfiguration100233 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode _lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100233 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[16]; +}; + +class imageSubGraphTopology100234 : public GraphTopology { + +public: + imageSubGraphTopology100234(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 21, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes(SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode* lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[21]; + +}; + +class StaticGraph100234 : public IStaticGraphConfig +{ +public: + StaticGraph100234(GraphConfiguration100234* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100234(); + static const uint32_t hashCode = 3087090034; // autogenerated + +private: + // Configuration + GraphConfiguration100234 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode _lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100234 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[21]; +}; + +class rawSubGraphTopology100026 : public GraphTopology { + +public: + rawSubGraphTopology100026(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 2, sinkMappingConfiguration) {} + IsysOuterNode* isysOuterNode = nullptr; + GraphLink* subGraphLinks[2]; + +}; + +class StaticGraph100026 : public IStaticGraphConfig +{ +public: + StaticGraph100026(GraphConfiguration100026* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100026(); + static const uint32_t hashCode = 3403963292; // autogenerated + +private: + // Configuration + GraphConfiguration100026 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + + /* + Topology + */ + // Sub Graphs definition + rawSubGraphTopology100026 _rawSubGraph; + + // All graph links + GraphLink _graphLinks[2]; +}; + +class rawSubGraphTopology100059 : public GraphTopology { + +public: + rawSubGraphTopology100059(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 4, sinkMappingConfiguration) {} + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + GraphLink* subGraphLinks[4]; + +}; + +class StaticGraph100059 : public IStaticGraphConfig +{ +public: + StaticGraph100059(GraphConfiguration100059* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100059(); + static const uint32_t hashCode = 562421768; // autogenerated + +private: + // Configuration + GraphConfiguration100059 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + + /* + Topology + */ + // Sub Graphs definition + rawSubGraphTopology100059 _rawSubGraph; + + // All graph links + GraphLink _graphLinks[4]; +}; + +class rawSubGraphTopology100035 : public GraphTopology { + +public: + rawSubGraphTopology100035(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 4, sinkMappingConfiguration) {} + IsysDolOuterNode* isysDolOuterNode = nullptr; + GraphLink* subGraphLinks[4]; + +}; + +class StaticGraph100035 : public IStaticGraphConfig +{ +public: + StaticGraph100035(GraphConfiguration100035* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100035(); + static const uint32_t hashCode = 4053127082; // autogenerated + +private: + // Configuration + GraphConfiguration100035 _graphConfiguration; + + /* Outer Nodes */ + IsysDolOuterNode _isysDolOuterNode; + + /* + Topology + */ + // Sub Graphs definition + rawSubGraphTopology100035 _rawSubGraph; + + // All graph links + GraphLink _graphLinks[4]; +}; + +class rawSubGraphTopology100036 : public GraphTopology { + +public: + rawSubGraphTopology100036(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 4, sinkMappingConfiguration) {} + IsysPdaf2OuterNode* isysPdaf2OuterNode = nullptr; + GraphLink* subGraphLinks[4]; + +}; + +class StaticGraph100036 : public IStaticGraphConfig +{ +public: + StaticGraph100036(GraphConfiguration100036* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100036(); + static const uint32_t hashCode = 4053127082; // autogenerated + +private: + // Configuration + GraphConfiguration100036 _graphConfiguration; + + /* Outer Nodes */ + IsysPdaf2OuterNode _isysPdaf2OuterNode; + + /* + Topology + */ + // Sub Graphs definition + rawSubGraphTopology100036 _rawSubGraph; + + // All graph links + GraphLink _graphLinks[4]; +}; + +class rawSubGraphTopology100037 : public GraphTopology { + +public: + rawSubGraphTopology100037(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 4, sinkMappingConfiguration) {} + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + GraphLink* subGraphLinks[4]; + +}; + +class StaticGraph100037 : public IStaticGraphConfig +{ +public: + StaticGraph100037(GraphConfiguration100037* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100037(); + static const uint32_t hashCode = 562421768; // autogenerated + +private: + // Configuration + GraphConfiguration100037 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + + /* + Topology + */ + // Sub Graphs definition + rawSubGraphTopology100037 _rawSubGraph; + + // All graph links + GraphLink _graphLinks[4]; +}; + +class rawSubGraphTopology100058 : public GraphTopology { + +public: + rawSubGraphTopology100058(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 4, sinkMappingConfiguration) {} + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + GraphLink* subGraphLinks[4]; + +}; + +class StaticGraph100058 : public IStaticGraphConfig +{ +public: + StaticGraph100058(GraphConfiguration100058* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100058(); + static const uint32_t hashCode = 562421768; // autogenerated + +private: + // Configuration + GraphConfiguration100058 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + + /* + Topology + */ + // Sub Graphs definition + rawSubGraphTopology100058 _rawSubGraph; + + // All graph links + GraphLink _graphLinks[4]; +}; + +class rawSubGraphTopology100038 : public GraphTopology { + +public: + rawSubGraphTopology100038(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 6, sinkMappingConfiguration) {} + IsysDolWithCvOuterNode* isysDolWithCvOuterNode = nullptr; + GraphLink* subGraphLinks[6]; + +}; + +class StaticGraph100038 : public IStaticGraphConfig +{ +public: + StaticGraph100038(GraphConfiguration100038* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100038(); + static const uint32_t hashCode = 1915233574; // autogenerated + +private: + // Configuration + GraphConfiguration100038 _graphConfiguration; + + /* Outer Nodes */ + IsysDolWithCvOuterNode _isysDolWithCvOuterNode; + + /* + Topology + */ + // Sub Graphs definition + rawSubGraphTopology100038 _rawSubGraph; + + // All graph links + GraphLink _graphLinks[6]; +}; + +class rawSubGraphTopology100039 : public GraphTopology { + +public: + rawSubGraphTopology100039(VirtualSinkMapping* sinkMappingConfiguration) : GraphTopology(subGraphLinks, 6, sinkMappingConfiguration) {} + IsysPdaf2WithCvOuterNode* isysPdaf2WithCvOuterNode = nullptr; + GraphLink* subGraphLinks[6]; + +}; + +class StaticGraph100039 : public IStaticGraphConfig +{ +public: + StaticGraph100039(GraphConfiguration100039* selectedGraphConfiguration, VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, int32_t selectedSettingsId); + ~StaticGraph100039(); + static const uint32_t hashCode = 1915233574; // autogenerated + +private: + // Configuration + GraphConfiguration100039 _graphConfiguration; + + /* Outer Nodes */ + IsysPdaf2WithCvOuterNode _isysPdaf2WithCvOuterNode; + + /* + Topology + */ + // Sub Graphs definition + rawSubGraphTopology100039 _rawSubGraph; + + // All graph links + GraphLink _graphLinks[6]; +}; + +#endif \ No newline at end of file diff --git a/modules/ipu_desc/ipu8/Ipu8StaticGraphBinaryAutogen.h b/modules/ipu_desc/ipu8/Ipu8StaticGraphBinaryAutogen.h new file mode 100644 index 0000000..e162954 --- /dev/null +++ b/modules/ipu_desc/ipu8/Ipu8StaticGraphBinaryAutogen.h @@ -0,0 +1,104 @@ +/* +* INTEL CONFIDENTIAL +* Copyright (c) 2026 Intel Corporation +* All Rights Reserved. +* +* The source code contained or described herein and all documents related to +* the source code ("Material") are owned by Intel Corporation or its +* suppliers or licensors. Title to the Material remains with Intel +* Corporation or its suppliers and licensors. The Material may contain trade +* secrets and proprietary and confidential information of Intel Corporation +* and its suppliers and licensors, and is protected by worldwide copyright +* and trade secret laws and treaty provisions. No part of the Material may be +* used, copied, reproduced, modified, published, uploaded, posted, +* transmitted, distributed, or disclosed in any way without Intel's prior +* express written permission. +* +* No license under any patent, copyright, trade secret or other intellectual +* property right is granted to or conferred upon you by disclosure or +* delivery of the Materials, either expressly, by implication, inducement, +* estoppel or otherwise. Any license under such intellectual property rights +* must be express and approved by Intel in writing. +* +* Unless otherwise agreed by Intel in writing, you may not remove or alter +* this notice or any other notice embedded in Materials by Intel or Intels +* suppliers or licensors in any way. +*/ + +#ifndef STATIC_GRAPH_BINARY_H +#define STATIC_GRAPH_BINARY_H + +#include + +#pragma pack(push, 4) +struct SensorMode { + uint16_t horizontalCropOffset = 0; + uint16_t verticalCropOffset = 0; + uint16_t croppedImageWidth = 0; + uint16_t croppedImageHeight = 0; + uint16_t horizontalScalingNumerator = 0; + uint16_t horizontalScalingDenominator = 0; + uint16_t verticalScalingNumerator = 0; + uint16_t verticalScalingDenominator = 0; +}; + +struct StreamConfig { + uint32_t width = 0; + uint32_t height = 0; + uint32_t bpp = 0; +}; + +struct AutoCalibrationStreamConfig { + uint32_t depthOutputWidth = 0; + uint32_t depthOutputHeight = 0; + uint32_t sliceNumber = 0; +}; + +enum class GraphConfigurationKeyAttributes : uint32_t +{ + None = 0x00000000, + PdafType1 = 0x00000001, + PdafType2 = 0x00000002, + PdafType3 = 0x00000004, + Dol2Inputs = 0x00000008, + Dol3Inputs = 0x00000010, + DvsActive = 0x00000020, + PipelineLowLight = 0x00000040, + PipelineNormalLight = 0x00000080, + LowPowerActive = 0x00000100, + OpacityActive = 0x00000200, + StillsModeCpHdr = 0x00000400, +}; + +struct GraphConfigurationKey { + uint32_t fps = 0; + uint32_t attributes = 0; + StreamConfig preview; + StreamConfig video; + StreamConfig postProcessingVideo; + StreamConfig stills; + StreamConfig raw; + StreamConfig videoIr; + StreamConfig previewIr; +}; + +struct GraphConfigurationHeader { + uint32_t additonalFeaturesBit = 0; + GraphConfigurationKey settingsKey; + uint16_t settingId = 0; + int32_t graphId = 0; + uint8_t sensorModeIndex = 0; + int32_t resConfigDataOffset = 0; + uint32_t graphHashCode = 0; +}; + +struct BinaryHeader { + uint32_t sapAttributes = 0; + uint32_t binaryCommonHashCode = 0; + uint32_t numberOfResolutions = 0; + uint32_t numberOfSensorModes = 0; +}; + +#pragma pack(pop) + +#endif diff --git a/modules/ipu_desc/ipu8/Ipu8StaticGraphDataPreloadAutogen.c b/modules/ipu_desc/ipu8/Ipu8StaticGraphDataPreloadAutogen.c new file mode 100644 index 0000000..7e46b58 --- /dev/null +++ b/modules/ipu_desc/ipu8/Ipu8StaticGraphDataPreloadAutogen.c @@ -0,0 +1,183 @@ +/* +* INTEL CONFIDENTIAL +* Copyright (c) 2026 Intel Corporation +* All Rights Reserved. +* +* The source code contained or described herein and all documents related to +* the source code ("Material") are owned by Intel Corporation or its +* suppliers or licensors. Title to the Material remains with Intel +* Corporation or its suppliers and licensors. The Material may contain trade +* secrets and proprietary and confidential information of Intel Corporation +* and its suppliers and licensors, and is protected by worldwide copyright +* and trade secret laws and treaty provisions. No part of the Material may be +* used, copied, reproduced, modified, published, uploaded, posted, +* transmitted, distributed, or disclosed in any way without Intel's prior +* express written permission. +* +* No license under any patent, copyright, trade secret or other intellectual +* property right is granted to or conferred upon you by disclosure or +* delivery of the Materials, either expressly, by implication, inducement, +* estoppel or otherwise. Any license under such intellectual property rights +* must be express and approved by Intel in writing. +* +* Unless otherwise agreed by Intel in writing, you may not remove or alter +* this notice or any other notice embedded in Materials by Intel or Intels +* suppliers or licensors in any way. +*/ + +#include "Ipu8StaticGraphDataPreloadAutogen.h" + +void parseTable(char* binaryData, GraphHashCodesTable* table) +{ + char* fileOffset = binaryData; + uint32_t numOfAvailablePins = 0; + uint32_t i; + + table->hashCodes = 0; + + //Skipping BinaryHeader + + fileOffset += sizeof(BinaryHeader); + + //Skipping DataRange: + DataRangeHeader dataRangeHeader = *(DataRangeHeader*)fileOffset; + for (int j = 0; j < enNumOfOutPins; j++) + numOfAvailablePins += dataRangeHeader.NumberOfPinResolutions[j]; + fileOffset += sizeof(DataRangeHeader) + sizeof(DriverDesc) * numOfAvailablePins; + + //Parsing table: + table->numOfGraphs = *(uint32_t*)fileOffset; + table->hashCodes = (GraphHashCode*)malloc(sizeof(GraphHashCode) * (table->numOfGraphs)); + + fileOffset += sizeof(table->numOfGraphs); + for (i = 0; i < table->numOfGraphs; ++i) + { + table->hashCodes[i] = *(GraphHashCode*)fileOffset; + fileOffset += sizeof(GraphHashCode); + } +} + +int validateHashCodes_aux(GraphHashCodesTable* table) +{ + uint32_t tableIndex, lookupIndex; + int current; + int retVal = TRUE; + + for (tableIndex = 0, lookupIndex = 1; + tableIndex < table->numOfGraphs && lookupIndex < (uint32_t)distinctGraphsCount + 1;) + { + if (hashCodeLookup[lookupIndex].key == table->hashCodes[tableIndex].key) + { + current = hashCodeLookup[lookupIndex].value == table->hashCodes[tableIndex].value; + retVal = retVal && current; + if (!current) + { + //Graph exists in binary data & autogenerated code but hash keys don't match. + printf("FAILURE: graph %d has hash 0x%X in the generated lookup table, 0x%X in the binary data.\n", + hashCodeLookup[lookupIndex].key, hashCodeLookup[lookupIndex].value, table->hashCodes[tableIndex].value); + } + else + { + printf("SUCCESS: graph %d is identical in binary & generated code.\n", hashCodeLookup[lookupIndex].key); + } + ++lookupIndex; + ++tableIndex; + } + else if (table->hashCodes[tableIndex].key < hashCodeLookup[lookupIndex].key) + { + //Graph exists in binary data but not in autogenerated code. + printf("FAILURE: graph %d exists in the binary data but not in the generated lookup table.\n", table->hashCodes[tableIndex].key); + retVal = FALSE; + ++tableIndex; + } + else + { + //Graph exists in autogenerated code but not in binary data. + printf("FAILURE: graph %d exists in the generated lookup table but not in the binary data.\n", hashCodeLookup[lookupIndex].key); + retVal = FALSE; + ++lookupIndex; + } + } + for (; tableIndex < table->numOfGraphs; ++tableIndex) + { + //Graph exists in binary data but not in autogenerated code. + printf("FAILURE: graph %d exists in the binary data but not in the generated lookup table.\n", table->hashCodes[tableIndex].key); + retVal = FALSE; + } + for (; lookupIndex < (uint32_t)distinctGraphsCount + 1; ++lookupIndex) + { + //Graph exists in autogenerated code but not in binary data. + printf("FAILURE: graph %d exists in the generated lookup table but not in the binary data.\n", hashCodeLookup[lookupIndex].key); + retVal = FALSE; + } + return retVal; +} + +int validateHashCodes(char* binaryData) +{ + int retVal = TRUE; + GraphHashCodesTable table; + uint32_t commonHash = ((BinaryHeader*)binaryData)->binaryCommonHashCode; + + parseTable(binaryData, &table); + if (table.hashCodes == 0) + { + printf("Memory allocation error in validateHashCodes.\n"); + return FALSE; + } + + if (hashCodeLookup[0].value != commonHash) + { + retVal = FALSE; + printf("FAILURE: common hash differs between binary data and the generated code.\n"); + } + else + { + printf("SUCCESS: common hash is identical in binary data and the generated code.\n"); + } + + retVal = validateHashCodes_aux(&table) && retVal; + + free(table.hashCodes); + + return retVal; +} + +int GetDataRangeFromBin(char* binaryData, DataRange* dataRange) +{ + + char* fileOffset = NULL; + uint32_t numOfAvailablePins = 0; + uint32_t j = 0; + + fileOffset = binaryData; + //Skipping BinaryHeader + + fileOffset += sizeof(BinaryHeader); + + dataRange->dataRangeHeader = *(DataRangeHeader*)fileOffset; + + uint32_t* pinOffset = (uint32_t*)&dataRange->dataRangeHeader; + + for (j = 0; j< enNumOfOutPins; j++) + if (pinOffset[j]) + numOfAvailablePins++; + + fileOffset += sizeof(DataRangeHeader); + + dataRange->dataRangeMap = (DriverDesc**)malloc(sizeof(DriverDesc*) * numOfAvailablePins); + if (!dataRange->dataRangeMap) + return FALSE; + + for (j = 0; j < enNumOfOutPins; j++) + { + if (pinOffset[j]) + { + dataRange->dataRangeMap[j] = (DriverDesc*)malloc(sizeof(DriverDesc) * pinOffset[j]); + dataRange->dataRangeMap[j] = (DriverDesc*)fileOffset; + fileOffset += sizeof(DriverDesc) * pinOffset[j]; + } + } + + return TRUE; +} \ No newline at end of file diff --git a/modules/ipu_desc/ipu8/Ipu8StaticGraphDataPreloadAutogen.h b/modules/ipu_desc/ipu8/Ipu8StaticGraphDataPreloadAutogen.h new file mode 100644 index 0000000..4afc436 --- /dev/null +++ b/modules/ipu_desc/ipu8/Ipu8StaticGraphDataPreloadAutogen.h @@ -0,0 +1,446 @@ +/* +* INTEL CONFIDENTIAL +* Copyright (c) 2026 Intel Corporation +* All Rights Reserved. +* +* The source code contained or described herein and all documents related to +* the source code ("Material") are owned by Intel Corporation or its +* suppliers or licensors. Title to the Material remains with Intel +* Corporation or its suppliers and licensors. The Material may contain trade +* secrets and proprietary and confidential information of Intel Corporation +* and its suppliers and licensors, and is protected by worldwide copyright +* and trade secret laws and treaty provisions. No part of the Material may be +* used, copied, reproduced, modified, published, uploaded, posted, +* transmitted, distributed, or disclosed in any way without Intel's prior +* express written permission. +* +* No license under any patent, copyright, trade secret or other intellectual +* property right is granted to or conferred upon you by disclosure or +* delivery of the Materials, either expressly, by implication, inducement, +* estoppel or otherwise. Any license under such intellectual property rights +* must be express and approved by Intel in writing. +* +* Unless otherwise agreed by Intel in writing, you may not remove or alter +* this notice or any other notice embedded in Materials by Intel or Intels +* suppliers or licensors in any way. +*/ + +#ifndef DATA_RANGE_H_ +#define DATA_RANGE_H_ + +#include +#include +#include + +#define TRUE 1 +#define FALSE 0 + +typedef struct +{ + uint32_t key; + uint32_t value; +}GraphHashCode; + +typedef struct +{ + uint32_t numOfGraphs; + GraphHashCode* hashCodes; +}GraphHashCodesTable; + +typedef struct { + char* format; + char* subFormat; + unsigned long fourCC; + int Bpp; +} FrameFormatDesc; + +typedef enum +{ + enPreview, + enVideo, + enStills, + enRaw, + enIr, + enNumOfOutPins + +}DataRangePins; + +typedef struct { + + uint32_t sapAttributes; + uint32_t binaryCommonHashCode; + uint32_t numberOfResolutions; + uint32_t numberOfSensorModes; + +}BinaryHeader; + +typedef struct DriverDesc { + + uint32_t format; + uint32_t width; + uint32_t height; + uint32_t fps; + +}DriverDesc; + +typedef struct DataRangeHeader { + + uint32_t NumberOfPinResolutions[enNumOfOutPins]; + +}DataRangeHeader; + +typedef struct DataRange +{ + DataRangeHeader dataRangeHeader; + DriverDesc** dataRangeMap; + +}DataRange; + +static int distinctGraphsCount = 142; + +static GraphHashCode hashCodeLookup[] = { + {0, 0x4229ABEE}, + {100000, 0x274DFCAB}, + {100001, 0x513C5C0E}, + {100002, 0xDFF5303}, + {100003, 0xF1CDFFC2}, + {100004, 0x70DEA50D}, + {100005, 0x113D8DE4}, + {100006, 0x49A083FD}, + {100007, 0x897C7BC0}, + {100008, 0x7D0963A7}, + {100009, 0xAD054036}, + {100010, 0x49AB695F}, + {100011, 0x52A76E5A}, + {100012, 0x7304B1F5}, + {100013, 0xC01767C2}, + {100014, 0x1B86E725}, + {100015, 0xD849E6E6}, + {100016, 0xC7DF838C}, + {100017, 0xC5D56877}, + {100018, 0x79E8D648}, + {100019, 0x1584533F}, + {100020, 0xE4755386}, + {100021, 0x6DD04F23}, + {100022, 0x6656A3CE}, + {100023, 0xDD5FE263}, + {100024, 0x72B86072}, + {100026, 0xCAE45B9C}, + {100027, 0x1CF9C737}, + {100028, 0x4D910412}, + {100029, 0x20B9B42F}, + {100030, 0x6B1BD1A6}, + {100031, 0xA3184D5F}, + {100032, 0xF5E37182}, + {100033, 0xE1EBD877}, + {100034, 0xD0B0EF16}, + {100035, 0xF195CFAA}, + {100036, 0xF195CFAA}, + {100037, 0x2185E008}, + {100038, 0x72282526}, + {100039, 0x72282526}, + {100040, 0xB4DF03EB}, + {100041, 0xBB37A983}, + {100042, 0x7C4EE476}, + {100045, 0xB2139259}, + {100058, 0x2185E008}, + {100059, 0x2185E008}, + {100066, 0xE2462673}, + {100067, 0x13B71B02}, + {100079, 0x1FBFBDB5}, + {100080, 0x8FE2FDB7}, + {100081, 0xEECE4A7}, + {100100, 0x3A619A16}, + {100101, 0x6E21DB67}, + {100102, 0x9237750}, + {100103, 0x9C19F4AD}, + {100104, 0x3F7B1354}, + {100105, 0xFC0DC1B1}, + {100106, 0x74EB66E2}, + {100107, 0xCBB2C27B}, + {100108, 0xAA8CF966}, + {100109, 0x8450111B}, + {100110, 0xA0A1E120}, + {100111, 0xF3242241}, + {100112, 0xC90E28E6}, + {100113, 0x2E3F7547}, + {100114, 0xB78BDD52}, + {100115, 0xF1F392CD}, + {100116, 0x647BC377}, + {100117, 0x96CFE776}, + {100118, 0xDF585AF5}, + {100119, 0x34B24F18}, + {100120, 0x997F9943}, + {100121, 0x467C7722}, + {100122, 0x7691A361}, + {100123, 0xB2A106F0}, + {100127, 0x27ADB174}, + {100128, 0xAA0D88A1}, + {100129, 0xFB2764DA}, + {100130, 0x33D88713}, + {100131, 0x9B9DA69A}, + {100132, 0xE8A1B49B}, + {100133, 0x576FD1E4}, + {100134, 0xEA7E87D1}, + {100135, 0xC8271562}, + {100136, 0x64F939BA}, + {100137, 0x4545E450}, + {100138, 0xC77E7A18}, + {100139, 0x7B895C1A}, + {100140, 0x9AE28560}, + {100141, 0x54222F24}, + {100142, 0x916CAAF2}, + {100143, 0x770C7E68}, + {100144, 0x11B9A10C}, + {100145, 0x8AFD0DF5}, + {100146, 0x782FB5A8}, + {100157, 0x49262A9A}, + {100162, 0x17DB7D62}, + {100166, 0xA455C810}, + {100169, 0x17DB7D62}, + {100200, 0x7DCF6206}, + {100201, 0x9FE3E955}, + {100202, 0xB8A7C9D7}, + {100203, 0xD7CA4E76}, + {100204, 0x62FBCD41}, + {100205, 0x70439A78}, + {100206, 0x1EE4C961}, + {100207, 0xBADC1484}, + {100208, 0x4DB85EF3}, + {100209, 0x847FF112}, + {100210, 0xB50F811B}, + {100211, 0x1F3767A6}, + {100212, 0xB3780C1}, + {100213, 0x1C303C4E}, + {100214, 0x25149B01}, + {100215, 0x23DE8802}, + {100216, 0xADDECD88}, + {100217, 0xD48F3923}, + {100218, 0x392A5914}, + {100219, 0x4336947B}, + {100220, 0x19466902}, + {100221, 0x1355D33F}, + {100222, 0xB092FAEA}, + {100223, 0x3B68B59F}, + {100224, 0x14982BD7}, + {100227, 0xC4364E73}, + {100228, 0x790831DE}, + {100229, 0xDA8BFDB}, + {100230, 0x4D1B5962}, + {100231, 0x10F443BB}, + {100232, 0x4A9C74EE}, + {100233, 0x6AA1DEC3}, + {100234, 0xB8014172}, + {100235, 0x93B9AB2F}, + {100236, 0x3EB27672}, + {100240, 0xE573AC46}, + {100241, 0xE935BC7A}, + {100242, 0x9EFC977F}, + {100245, 0x3FCD7DA5}, + {100266, 0x45A66067}, + {100267, 0x4C6A3D56}, + {100279, 0x92A0C559}, + {100280, 0x65BC4DEB}, + {100281, 0xAB02B9FB} + }; + +static FrameFormatDesc formatsDB[] = { + {"YUV", "NV12", 0x3231564E, 8}, + {"YUV", "P010", 0x30313050, 10}, + {"YUV", "P012", 0x32313050, 12}, + {"YUV", "P016", 0x36313050, 16}, + {"BGGR", "BGGR", 0x52474742, 8}, + {"BGGR", "BG10", 0x30314742, 10}, + {"BGGR", "BG12", 0x32314742, 12}, + {"BGGR", "BG16", 0x36314742, 16}, + {"BGGRP", "BG0P", 0x50304742, 8}, + {"BGGRP", "BG1P", 0x50314742, 10}, + {"BGGRP", "BG2P", 0x50324742, 12}, + {"BGGRP", "BG3P", 0x50334742, 16}, + {"BGGRD", "BG0D", 0x44304742, 8}, + {"BGGRD", "BG1D", 0x44314742, 10}, + {"BGGRD", "BG2D", 0x44324742, 12}, + {"BGGRD", "BG3D", 0x44334742, 16}, + {"GBRG", "GBRG", 0x47524247, 8}, + {"GBRG", "GB10", 0x30314247, 10}, + {"GBRG", "GB12", 0x32314247, 12}, + {"GBRG", "GB16", 0x36314247, 16}, + {"GBRGP", "GB0P", 0x50304247, 8}, + {"GBRGP", "GB1P", 0x50314247, 10}, + {"GBRGP", "GB2P", 0x50324247, 12}, + {"GBRGP", "GB3P", 0x50334247, 16}, + {"GBRGD", "GB0D", 0x44304247, 8}, + {"GBRGD", "GB1D", 0x44314247, 10}, + {"GBRGD", "GB2D", 0x44324247, 12}, + {"GBRGD", "GB3D", 0x44334247, 16}, + {"GRBG", "GRBG", 0x47425247, 8}, + {"GRBG", "GR10", 0x30315247, 10}, + {"GRBG", "GR12", 0x32315247, 12}, + {"GRBG", "GR16", 0x36315247, 16}, + {"GRBGP", "GR0P", 0x50305247, 8}, + {"GRBGP", "GR1P", 0x50315247, 10}, + {"GRBGP", "GR2P", 0x50325247, 12}, + {"GRBGP", "GR3P", 0x50335247, 16}, + {"GRBGD", "GR0D", 0x44305247, 8}, + {"GRBGD", "GR1D", 0x44315247, 10}, + {"GRBGD", "GR2D", 0x44325247, 12}, + {"GRBGD", "GR3D", 0x44335247, 16}, + {"RGGB", "RGGB", 0x42474752, 8}, + {"RGGB", "RG10", 0x30314752, 10}, + {"RGGB", "RG12", 0x32314752, 12}, + {"RGGB", "RG16", 0x36314752, 16}, + {"RGGBP", "RG0P", 0x50304752, 8}, + {"RGGBP", "RG1P", 0x50314752, 10}, + {"RGGBP", "RG2P", 0x50324752, 12}, + {"RGGBP", "RG3P", 0x50334752, 16}, + {"RGGBD", "RG0D", 0x44304752, 8}, + {"RGGBD", "RG1D", 0x44314752, 10}, + {"RGGBD", "RG2D", 0x44324752, 12}, + {"RGGBD", "RG3D", 0x44334752, 16}, + {"BGIR", "BGI0", 0x30494742, 8}, + {"BGIR", "BGI1", 0x31494742, 10}, + {"BGIR", "BGI2", 0x32494742, 12}, + {"BGIR", "BGI3", 0x33494742, 16}, + {"BGIRP", "BGP0", 0x30504742, 8}, + {"BGIRP", "BGP1", 0x31504742, 10}, + {"BGIRP", "BGP2", 0x32504742, 12}, + {"BGIRP", "BGP3", 0x33504742, 16}, + {"GRBI", "GRI0", 0x30495247, 8}, + {"GRBI", "GRI1", 0x31495247, 10}, + {"GRBI", "GRI2", 0x32495247, 12}, + {"GRBI", "GRI3", 0x33495247, 16}, + {"GRBIP", "GRP0", 0x30505247, 8}, + {"GRBIP", "GRP1", 0x31505247, 10}, + {"GRBIP", "GRP2", 0x32505247, 12}, + {"GRBIP", "GRP3", 0x33505247, 16}, + {"IRBG", "IRB0", 0x30425249, 8}, + {"IRBG", "IRB1", 0x31425249, 10}, + {"IRBG", "IRB2", 0x32425249, 12}, + {"IRBG", "IRB3", 0x33425249, 16}, + {"IRBGP", "IRP0", 0x30505249, 8}, + {"IRBGP", "IRP1", 0x31505249, 10}, + {"IRBGP", "IRP2", 0x32505249, 12}, + {"IRBGP", "IRP3", 0x33505249, 16}, + {"RGIB", "RGI0", 0x30494752, 8}, + {"RGIB", "RGI1", 0x31494752, 10}, + {"RGIB", "RGI2", 0x32494752, 12}, + {"RGIB", "RGI3", 0x33494752, 16}, + {"RGIBP", "RGP0", 0x30504752, 8}, + {"RGIBP", "RGP1", 0x31504752, 10}, + {"RGIBP", "RGP2", 0x32504752, 12}, + {"RGIBP", "RGP3", 0x33504752, 16}, + {"RIGB", "RIG0", 0x30474952, 8}, + {"RIGB", "RIG1", 0x31474952, 10}, + {"RIGB", "RIG2", 0x32474952, 12}, + {"RIGB", "RIG3", 0x33474952, 16}, + {"RIGBP", "RIP0", 0x30504952, 8}, + {"RIGBP", "RIP1", 0x31504952, 10}, + {"RIGBP", "RIP2", 0x32504952, 12}, + {"RIGBP", "RIP3", 0x33504952, 16}, + {"BIGR", "BIG0", 0x30474942, 8}, + {"BIGR", "BIG1", 0x31474942, 10}, + {"BIGR", "BIG2", 0x32474942, 12}, + {"BIGR", "BIG3", 0x33474942, 16}, + {"BIGRP", "BIP0", 0x30504942, 8}, + {"BIGRP", "BIP1", 0x31504942, 10}, + {"BIGRP", "BIP2", 0x32504942, 12}, + {"BIGRP", "BIP3", 0x33504942, 16}, + {"GBRI", "GBI0", 0x30494247, 8}, + {"GBRI", "GBI1", 0x31494247, 10}, + {"GBRI", "GBI2", 0x32494247, 12}, + {"GBRI", "GBI3", 0x33494247, 16}, + {"GBRIP", "GBP0", 0x30504247, 8}, + {"GBRIP", "GBP1", 0x31504247, 10}, + {"GBRIP", "GBP2", 0x32504247, 12}, + {"GBRIP", "GBP3", 0x33504247, 16}, + {"IBRG", "IBR0", 0x30524249, 8}, + {"IBRG", "IBR1", 0x31524249, 10}, + {"IBRG", "IBR2", 0x32524249, 12}, + {"IBRG", "IBR3", 0x33524249, 16}, + {"IBRGP", "IBP0", 0x30504249, 8}, + {"IBRGP", "IBP1", 0x31504249, 10}, + {"IBRGP", "IBP2", 0x32504249, 12}, + {"IBRGP", "IBP3", 0x33504249, 16}, + {"BGRG_GIGI_RGBG_GIGI", "BG0I", 0x49304742, 8}, + {"BGRG_GIGI_RGBG_GIGI", "BG1I", 0x49314742, 10}, + {"BGRG_GIGI_RGBG_GIGI", "BG2I", 0x49324742, 12}, + {"BGRG_GIGI_RGBG_GIGI", "BG3I", 0x49334742, 16}, + {"BGRG_GIGI_RGBG_GIGIP", "PG0I", 0x49304750, 8}, + {"BGRG_GIGI_RGBG_GIGIP", "PG1I", 0x49314750, 10}, + {"BGRG_GIGI_RGBG_GIGIP", "PG2I", 0x49324750, 12}, + {"BGRG_GIGI_RGBG_GIGIP", "PG3I", 0x49334750, 16}, + {"GRGB_IGIG_GBGR_IGIG", "GR0I", 0x49305247, 8}, + {"GRGB_IGIG_GBGR_IGIG", "GR1I", 0x49315247, 10}, + {"GRGB_IGIG_GBGR_IGIG", "GR2I", 0x49325247, 12}, + {"GRGB_IGIG_GBGR_IGIG", "GR3I", 0x49335247, 16}, + {"GRGB_IGIG_GBGR_IGIGP", "PR0I", 0x49305250, 8}, + {"GRGB_IGIG_GBGR_IGIGP", "PR1I", 0x49315250, 10}, + {"GRGB_IGIG_GBGR_IGIGP", "PR2I", 0x49325250, 12}, + {"GRGB_IGIG_GBGR_IGIGP", "PR3I", 0x49335250, 16}, + {"RGBG_GIGI_BGRG_GIGI", "RG0I", 0x49304752, 8}, + {"RGBG_GIGI_BGRG_GIGI", "RG1I", 0x49314752, 10}, + {"RGBG_GIGI_BGRG_GIGI", "RG2I", 0x49324752, 12}, + {"RGBG_GIGI_BGRG_GIGI", "RG3I", 0x49334752, 16}, + {"RGBG_GIGI_BGRG_GIGIP", "RP0I", 0x49305052, 8}, + {"RGBG_GIGI_BGRG_GIGIP", "RP1I", 0x49315052, 10}, + {"RGBG_GIGI_BGRG_GIGIP", "RP2I", 0x49325052, 12}, + {"RGBG_GIGI_BGRG_GIGIP", "RP3I", 0x49335052, 16}, + {"GBGR_IGIG_GRGB_IGIG", "GB0I", 0x49304247, 8}, + {"GBGR_IGIG_GRGB_IGIG", "GB1I", 0x49314247, 10}, + {"GBGR_IGIG_GRGB_IGIG", "GB2I", 0x49324247, 12}, + {"GBGR_IGIG_GRGB_IGIG", "GB3I", 0x49334247, 16}, + {"GBGR_IGIG_GRGB_IGIGP", "GP0I", 0x49305047, 8}, + {"GBGR_IGIG_GRGB_IGIGP", "GP1I", 0x49315047, 10}, + {"GBGR_IGIG_GRGB_IGIGP", "GP2I", 0x49325047, 12}, + {"GBGR_IGIG_GRGB_IGIGP", "GP3I", 0x49335047, 16}, + {"GIGI_RGBG_GIGI_BGRG", "GIR0", 0x30524947, 8}, + {"GIGI_RGBG_GIGI_BGRG", "GIR1", 0x31524947, 10}, + {"GIGI_RGBG_GIGI_BGRG", "GIR2", 0x32524947, 12}, + {"GIGI_RGBG_GIGI_BGRG", "GIR3", 0x33524947, 16}, + {"GIGI_RGBG_GIGI_BGRGP", "GPR0", 0x30525047, 8}, + {"GIGI_RGBG_GIGI_BGRGP", "GPR1", 0x31525047, 10}, + {"GIGI_RGBG_GIGI_BGRGP", "GPR2", 0x32525047, 12}, + {"GIGI_RGBG_GIGI_BGRGP", "GPR3", 0x33525047, 16}, + {"IGIG_GBGR_IGIG_GRGB", "IGG0", 0x30474749, 8}, + {"IGIG_GBGR_IGIG_GRGB", "IGG1", 0x31474749, 10}, + {"IGIG_GBGR_IGIG_GRGB", "IGG2", 0x32474749, 12}, + {"IGIG_GBGR_IGIG_GRGB", "IGG3", 0x33474749, 16}, + {"IGIG_GBGR_IGIG_GRGBP", "IPG0", 0x30475049, 8}, + {"IGIG_GBGR_IGIG_GRGBP", "IPG1", 0x31475049, 10}, + {"IGIG_GBGR_IGIG_GRGBP", "IPG2", 0x32475049, 12}, + {"IGIG_GBGR_IGIG_GRGBP", "IPG3", 0x33475049, 16}, + {"GIGI_BGRG_GIGI_RGBG", "GIB0", 0x30424947, 8}, + {"GIGI_BGRG_GIGI_RGBG", "GIB1", 0x31424947, 10}, + {"GIGI_BGRG_GIGI_RGBG", "GIB2", 0x32424947, 12}, + {"GIGI_BGRG_GIGI_RGBG", "GIB3", 0x33424947, 16}, + {"GIGI_BGRG_GIGI_RGBGP", "GIP0", 0x30504947, 8}, + {"GIGI_BGRG_GIGI_RGBGP", "GIP1", 0x31504947, 10}, + {"GIGI_BGRG_GIGI_RGBGP", "GIP2", 0x32504947, 12}, + {"GIGI_BGRG_GIGI_RGBGP", "GIP3", 0x33504947, 16}, + {"IGIG_GRGB_IGIG_GBGR", "IGR0", 0x30524749, 8}, + {"IGIG_GRGB_IGIG_GBGR", "IGR1", 0x31524749, 10}, + {"IGIG_GRGB_IGIG_GBGR", "IGR2", 0x32524749, 12}, + {"IGIG_GRGB_IGIG_GBGR", "IGR3", 0x33524749, 16}, + {"IGIG_GRGB_IGIG_GBGRP", "IGP0", 0x30504749, 8}, + {"IGIG_GRGB_IGIG_GBGRP", "IGP1", 0x31504749, 10}, + {"IGIG_GRGB_IGIG_GBGRP", "IGP2", 0x32504749, 12}, + {"IGIG_GRGB_IGIG_GBGRP", "IGP3", 0x33504749, 16}, + {"RGGBPD", "RG0B", 0x42304752, 8}, + {"RGGBPD", "RG1B", 0x42314752, 10}, + {"RGGBPD", "RG2B", 0x42324752, 12}, + {"RGGBPD", "RG3B", 0x42334752, 16}, + {"BGGRPD", "BG0B", 0x42304742, 8}, + {"BGGRPD", "BG1B", 0x42314742, 10}, + {"BGGRPD", "BG2B", 0x42324742, 12}, + {"BGGRPD", "BG3B", 0x42334742, 16}, + {"GBRGPD", "GB0B", 0x42304247, 8}, + {"GBRGPD", "GB1B", 0x42314247, 10}, + {"GBRGPD", "GB2B", 0x42324247, 12}, + {"GBRGPD", "GB3B", 0x42334247, 16}, + {"GRBGPD", "GR0B", 0x42305247, 8}, + {"GRBGPD", "GR1B", 0x42315247, 10}, + {"GRBGPD", "GR2B", 0x42325247, 12}, + {"GRBGPD", "GR3B", 0x42335247, 16} +}; + +#endif/*DATA_RANGE_H_*/ diff --git a/modules/ipu_desc/ipu8/Ipu8StaticGraphReaderAutogen.cpp b/modules/ipu_desc/ipu8/Ipu8StaticGraphReaderAutogen.cpp new file mode 100644 index 0000000..768d1e3 --- /dev/null +++ b/modules/ipu_desc/ipu8/Ipu8StaticGraphReaderAutogen.cpp @@ -0,0 +1,1595 @@ +/* +* INTEL CONFIDENTIAL +* Copyright (c) 2026 Intel Corporation +* All Rights Reserved. +* +* The source code contained or described herein and all documents related to +* the source code ("Material") are owned by Intel Corporation or its +* suppliers or licensors. Title to the Material remains with Intel +* Corporation or its suppliers and licensors. The Material may contain trade +* secrets and proprietary and confidential information of Intel Corporation +* and its suppliers and licensors, and is protected by worldwide copyright +* and trade secret laws and treaty provisions. No part of the Material may be +* used, copied, reproduced, modified, published, uploaded, posted, +* transmitted, distributed, or disclosed in any way without Intel's prior +* express written permission. +* +* No license under any patent, copyright, trade secret or other intellectual +* property right is granted to or conferred upon you by disclosure or +* delivery of the Materials, either expressly, by implication, inducement, +* estoppel or otherwise. Any license under such intellectual property rights +* must be express and approved by Intel in writing. +* +* Unless otherwise agreed by Intel in writing, you may not remove or alter +* this notice or any other notice embedded in Materials by Intel or Intels +* suppliers or licensors in any way. +*/ + +#include "Ipu8StaticGraphReaderAutogen.h" +#include + +StaticGraphStatus StaticGraphReader::Init(StaticReaderBinaryData& binaryGraphSettings) { + if (!binaryGraphSettings.data) + { + STATIC_GRAPH_LOG("Binary settings is empty."); + return StaticGraphStatus::SG_ERROR; + } + + int8_t* currOffset = static_cast(binaryGraphSettings.data); + _binaryHeader = *reinterpret_cast(currOffset); + + if (_binaryHeader.binaryCommonHashCode != staticGraphCommonHashCode) + { + STATIC_GRAPH_LOG("Binary hash code is not matching the static graph structure hash code. Binary should be re-created."); + return StaticGraphStatus::SG_ERROR; + } + + //Skipping BinaryHeader + + currOffset += sizeof(BinaryHeader); + + uint32_t numOfAvailablePins = 0; + DataRangeHeader dataRangeHeader = *(DataRangeHeader*)currOffset; + + for (int j = 0; j < enNumOfOutPins; j++) + numOfAvailablePins+= dataRangeHeader.NumberOfPinResolutions[j]; + + currOffset += sizeof(DataRangeHeader) + sizeof(DriverDesc) * numOfAvailablePins; + + uint32_t numOfGraphs = *(uint32_t*)currOffset; + currOffset += sizeof(numOfGraphs) + numOfGraphs * sizeof(GraphHashCode); + + _graphConfigurationHeaders = reinterpret_cast(currOffset); + currOffset += sizeof(GraphConfigurationHeader)*_binaryHeader.numberOfResolutions; + _sensorModes = reinterpret_cast(currOffset); + currOffset += sizeof(SensorMode)*_binaryHeader.numberOfSensorModes; + _configurationData = currOffset; + + return StaticGraphStatus::SG_OK; +} + +std::pair StaticGraphReader::GetGraphConfigurationHeaders() const +{ + return std::make_pair(_binaryHeader.numberOfResolutions, _graphConfigurationHeaders); +} + +GraphConfigurationKey* StaticGraphReader::GetFdGraphConfigurationKey(GraphConfigurationKey& settingsKey) const +{ + for (uint32_t i = 0; i < _binaryHeader.numberOfResolutions; i++) + { + if (settingsKey.attributes == _graphConfigurationHeaders[i].settingsKey.attributes && + (((settingsKey.preview.width != 0 && _graphConfigurationHeaders[i].settingsKey.preview.width == settingsKey.preview.width && _graphConfigurationHeaders[i].settingsKey.preview.height == settingsKey.preview.height) || + (settingsKey.video.width != 0 && _graphConfigurationHeaders[i].settingsKey.video.width == settingsKey.video.width && _graphConfigurationHeaders[i].settingsKey.video.height == settingsKey.video.height)) && + _graphConfigurationHeaders[i].settingsKey.postProcessingVideo.width != 0)) + { + return &_graphConfigurationHeaders[i].settingsKey; + } + } + return NULL; +} + +StaticGraphStatus StaticGraphReader::GetStaticGraphConfig(GraphConfigurationKey& settingsKey, IStaticGraphConfig** graph) +{ + if (!_graphConfigurationHeaders || !_sensorModes || !_configurationData) + { + STATIC_GRAPH_LOG("Static graph reader was not initialized properly."); + return StaticGraphStatus::SG_ERROR; + } + + if (!graph) + { + STATIC_GRAPH_LOG("Cannot get graph configuration into null parameter"); + return StaticGraphStatus::SG_ERROR; + } + + GraphConfigurationHeader* selectedGraphConfigurationHeader = nullptr; + + for (uint32_t i=0; i < _binaryHeader.numberOfResolutions; i++) + { + if (memcmp ( &_graphConfigurationHeaders[i].settingsKey, + &settingsKey, + sizeof(GraphConfigurationKey)) == 0) + { + selectedGraphConfigurationHeader = &_graphConfigurationHeaders[i]; + STATIC_GRAPH_LOG("Static graph selected setting id - %d", selectedGraphConfigurationHeader->settingId); + + break; + + } + } + + if (!selectedGraphConfigurationHeader ) + { + STATIC_GRAPH_LOG("Resolution settings was not found for the given key."); + return StaticGraphStatus::SG_ERROR; + } + + int8_t* selectedConfigurationData = _configurationData + selectedGraphConfigurationHeader->resConfigDataOffset; + + GraphConfigurationHeader* baseGraphConfigurationHeader = nullptr; + + for (uint32_t i = 0; i < _binaryHeader.numberOfResolutions; i++) + { + if (_graphConfigurationHeaders[i].resConfigDataOffset == selectedGraphConfigurationHeader->resConfigDataOffset) + { + if (selectedGraphConfigurationHeader != &_graphConfigurationHeaders[i]) + { + baseGraphConfigurationHeader = &_graphConfigurationHeaders[i]; + } + break; + } + } + + VirtualSinkMapping* baseSinkMappingConfiguration = reinterpret_cast(selectedConfigurationData); + + VirtualSinkMapping selectedSinkMappingConfiguration; + GetSinkMappingConfiguration(baseGraphConfigurationHeader, baseSinkMappingConfiguration, selectedGraphConfigurationHeader, &selectedSinkMappingConfiguration); + + // fetching the graph + switch (selectedGraphConfigurationHeader->graphId) + { + case 100000: + if (StaticGraph100000::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100000( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100001: + if (StaticGraph100001::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100001( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100002: + if (StaticGraph100002::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100002( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100003: + if (StaticGraph100003::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100003( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100137: + if (StaticGraph100137::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100137( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100079: + if (StaticGraph100079::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100079( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100080: + if (StaticGraph100080::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100080( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100138: + if (StaticGraph100138::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100138( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100142: + if (StaticGraph100142::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100142( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100162: + if (StaticGraph100162::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100162( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100143: + if (StaticGraph100143::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100143( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100144: + if (StaticGraph100144::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100144( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100081: + if (StaticGraph100081::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100081( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100004: + if (StaticGraph100004::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100004( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100005: + if (StaticGraph100005::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100005( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100006: + if (StaticGraph100006::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100006( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100066: + if (StaticGraph100066::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100066( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100007: + if (StaticGraph100007::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100007( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100067: + if (StaticGraph100067::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100067( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100139: + if (StaticGraph100139::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100139( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100169: + if (StaticGraph100169::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100169( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100008: + if (StaticGraph100008::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100008( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100009: + if (StaticGraph100009::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100009( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100010: + if (StaticGraph100010::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100010( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100011: + if (StaticGraph100011::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100011( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100140: + if (StaticGraph100140::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100140( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100045: + if (StaticGraph100045::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100045( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100012: + if (StaticGraph100012::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100012( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100013: + if (StaticGraph100013::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100013( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100014: + if (StaticGraph100014::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100014( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100015: + if (StaticGraph100015::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100015( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100016: + if (StaticGraph100016::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100016( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100017: + if (StaticGraph100017::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100017( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100018: + if (StaticGraph100018::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100018( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100019: + if (StaticGraph100019::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100019( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100020: + if (StaticGraph100020::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100020( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100021: + if (StaticGraph100021::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100021( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100022: + if (StaticGraph100022::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100022( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100023: + if (StaticGraph100023::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100023( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100024: + if (StaticGraph100024::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100024( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100040: + if (StaticGraph100040::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100040( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100041: + if (StaticGraph100041::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100041( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100042: + if (StaticGraph100042::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100042( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100027: + if (StaticGraph100027::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100027( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100028: + if (StaticGraph100028::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100028( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100029: + if (StaticGraph100029::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100029( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100030: + if (StaticGraph100030::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100030( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100031: + if (StaticGraph100031::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100031( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100032: + if (StaticGraph100032::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100032( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100033: + if (StaticGraph100033::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100033( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100034: + if (StaticGraph100034::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100034( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100141: + if (StaticGraph100141::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100141( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100100: + if (StaticGraph100100::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100100( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100101: + if (StaticGraph100101::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100101( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100102: + if (StaticGraph100102::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100102( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100157: + if (StaticGraph100157::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100157( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100103: + if (StaticGraph100103::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100103( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100135: + if (StaticGraph100135::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100135( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100104: + if (StaticGraph100104::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100104( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100105: + if (StaticGraph100105::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100105( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100106: + if (StaticGraph100106::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100106( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100166: + if (StaticGraph100166::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100166( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100107: + if (StaticGraph100107::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100107( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100145: + if (StaticGraph100145::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100145( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100108: + if (StaticGraph100108::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100108( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100109: + if (StaticGraph100109::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100109( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100110: + if (StaticGraph100110::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100110( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100111: + if (StaticGraph100111::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100111( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100136: + if (StaticGraph100136::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100136( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100200: + if (StaticGraph100200::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100200( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100201: + if (StaticGraph100201::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100201( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100112: + if (StaticGraph100112::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100112( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100113: + if (StaticGraph100113::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100113( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100114: + if (StaticGraph100114::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100114( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100146: + if (StaticGraph100146::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100146( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100115: + if (StaticGraph100115::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100115( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100116: + if (StaticGraph100116::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100116( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100117: + if (StaticGraph100117::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100117( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100118: + if (StaticGraph100118::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100118( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100119: + if (StaticGraph100119::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100119( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100120: + if (StaticGraph100120::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100120( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100121: + if (StaticGraph100121::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100121( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100122: + if (StaticGraph100122::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100122( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100123: + if (StaticGraph100123::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100123( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100127: + if (StaticGraph100127::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100127( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100128: + if (StaticGraph100128::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100128( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100129: + if (StaticGraph100129::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100129( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100130: + if (StaticGraph100130::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100130( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100131: + if (StaticGraph100131::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100131( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100132: + if (StaticGraph100132::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100132( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100133: + if (StaticGraph100133::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100133( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100134: + if (StaticGraph100134::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100134( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100235: + if (StaticGraph100235::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100235( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100236: + if (StaticGraph100236::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100236( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100202: + if (StaticGraph100202::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100202( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100203: + if (StaticGraph100203::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100203( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100279: + if (StaticGraph100279::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100279( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100280: + if (StaticGraph100280::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100280( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100281: + if (StaticGraph100281::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100281( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100204: + if (StaticGraph100204::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100204( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100205: + if (StaticGraph100205::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100205( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100206: + if (StaticGraph100206::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100206( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100266: + if (StaticGraph100266::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100266( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100207: + if (StaticGraph100207::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100207( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100267: + if (StaticGraph100267::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100267( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100208: + if (StaticGraph100208::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100208( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100209: + if (StaticGraph100209::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100209( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100210: + if (StaticGraph100210::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100210( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100211: + if (StaticGraph100211::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100211( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100245: + if (StaticGraph100245::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100245( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100212: + if (StaticGraph100212::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100212( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100213: + if (StaticGraph100213::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100213( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100214: + if (StaticGraph100214::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100214( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100215: + if (StaticGraph100215::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100215( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100216: + if (StaticGraph100216::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100216( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100217: + if (StaticGraph100217::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100217( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100218: + if (StaticGraph100218::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100218( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100219: + if (StaticGraph100219::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100219( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100220: + if (StaticGraph100220::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100220( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100221: + if (StaticGraph100221::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100221( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100222: + if (StaticGraph100222::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100222( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100223: + if (StaticGraph100223::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100223( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100224: + if (StaticGraph100224::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100224( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100240: + if (StaticGraph100240::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100240( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100241: + if (StaticGraph100241::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100241( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100242: + if (StaticGraph100242::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100242( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100227: + if (StaticGraph100227::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100227( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100228: + if (StaticGraph100228::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100228( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100229: + if (StaticGraph100229::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100229( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100230: + if (StaticGraph100230::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100230( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100231: + if (StaticGraph100231::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100231( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100232: + if (StaticGraph100232::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100232( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100233: + if (StaticGraph100233::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100233( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100234: + if (StaticGraph100234::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100234( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100026: + if (StaticGraph100026::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100026( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100059: + if (StaticGraph100059::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100059( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100035: + if (StaticGraph100035::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100035( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100036: + if (StaticGraph100036::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100036( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100037: + if (StaticGraph100037::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100037( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100058: + if (StaticGraph100058::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100058( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100038: + if (StaticGraph100038::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100038( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + case 100039: + if (StaticGraph100039::hashCode != selectedGraphConfigurationHeader->graphHashCode) + { + STATIC_GRAPH_LOG("Graph %d hash code is not matching the settings. Binary should be re-created.", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100039( + reinterpret_cast(selectedConfigurationData), &selectedSinkMappingConfiguration, &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], selectedGraphConfigurationHeader->settingId); + break; + default: + STATIC_GRAPH_LOG("Graph %d was not found", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + + return StaticGraphStatus::SG_OK; +} + +void StaticGraphReader::GetSinkMappingConfiguration(GraphConfigurationHeader* baseGraphConfigurationHeader, VirtualSinkMapping* baseSinkMappingConfiguration, GraphConfigurationHeader* selectedGraphConfigurationHeader, VirtualSinkMapping* selectedSinkMappingConfiguration) { + if (baseGraphConfigurationHeader == nullptr) + { + memcpy(selectedSinkMappingConfiguration, baseSinkMappingConfiguration, sizeof(VirtualSinkMapping)); + } + else + { + if (selectedGraphConfigurationHeader->settingsKey.preview.bpp == baseGraphConfigurationHeader->settingsKey.preview.bpp && + selectedGraphConfigurationHeader->settingsKey.preview.width == baseGraphConfigurationHeader->settingsKey.preview.width && + selectedGraphConfigurationHeader->settingsKey.preview.height == baseGraphConfigurationHeader->settingsKey.preview.height + ) + { + selectedSinkMappingConfiguration->preview = baseSinkMappingConfiguration->preview; + } + else + if (selectedGraphConfigurationHeader->settingsKey.preview.bpp == baseGraphConfigurationHeader->settingsKey.video.bpp && + selectedGraphConfigurationHeader->settingsKey.preview.width == baseGraphConfigurationHeader->settingsKey.video.width && + selectedGraphConfigurationHeader->settingsKey.preview.height == baseGraphConfigurationHeader->settingsKey.video.height + ) + { + selectedSinkMappingConfiguration->preview = baseSinkMappingConfiguration->video; + } + else + if (selectedGraphConfigurationHeader->settingsKey.preview.bpp == baseGraphConfigurationHeader->settingsKey.postProcessingVideo.bpp && + selectedGraphConfigurationHeader->settingsKey.preview.width == baseGraphConfigurationHeader->settingsKey.postProcessingVideo.width && + selectedGraphConfigurationHeader->settingsKey.preview.height == baseGraphConfigurationHeader->settingsKey.postProcessingVideo.height + ) + { + selectedSinkMappingConfiguration->preview = baseSinkMappingConfiguration->postProcessingVideo; + } + else + { + STATIC_GRAPH_LOG("Did not find correct mapping for preview sink."); + } + + if (selectedGraphConfigurationHeader->settingsKey.video.bpp == baseGraphConfigurationHeader->settingsKey.preview.bpp && + selectedGraphConfigurationHeader->settingsKey.video.width == baseGraphConfigurationHeader->settingsKey.preview.width && + selectedGraphConfigurationHeader->settingsKey.video.height == baseGraphConfigurationHeader->settingsKey.preview.height + && selectedSinkMappingConfiguration->preview != baseSinkMappingConfiguration->preview + ) + { + selectedSinkMappingConfiguration->video = baseSinkMappingConfiguration->preview; + } + else + if (selectedGraphConfigurationHeader->settingsKey.video.bpp == baseGraphConfigurationHeader->settingsKey.video.bpp && + selectedGraphConfigurationHeader->settingsKey.video.width == baseGraphConfigurationHeader->settingsKey.video.width && + selectedGraphConfigurationHeader->settingsKey.video.height == baseGraphConfigurationHeader->settingsKey.video.height + && selectedSinkMappingConfiguration->preview != baseSinkMappingConfiguration->video + ) + { + selectedSinkMappingConfiguration->video = baseSinkMappingConfiguration->video; + } + else + if (selectedGraphConfigurationHeader->settingsKey.video.bpp == baseGraphConfigurationHeader->settingsKey.postProcessingVideo.bpp && + selectedGraphConfigurationHeader->settingsKey.video.width == baseGraphConfigurationHeader->settingsKey.postProcessingVideo.width && + selectedGraphConfigurationHeader->settingsKey.video.height == baseGraphConfigurationHeader->settingsKey.postProcessingVideo.height + && selectedSinkMappingConfiguration->preview != baseSinkMappingConfiguration->postProcessingVideo + ) + { + selectedSinkMappingConfiguration->video = baseSinkMappingConfiguration->postProcessingVideo; + } + else + { + STATIC_GRAPH_LOG("Did not find correct mapping for video sink."); + } + + if (selectedGraphConfigurationHeader->settingsKey.postProcessingVideo.bpp == baseGraphConfigurationHeader->settingsKey.preview.bpp && + selectedGraphConfigurationHeader->settingsKey.postProcessingVideo.width == baseGraphConfigurationHeader->settingsKey.preview.width && + selectedGraphConfigurationHeader->settingsKey.postProcessingVideo.height == baseGraphConfigurationHeader->settingsKey.preview.height + && selectedSinkMappingConfiguration->preview != baseSinkMappingConfiguration->preview + && selectedSinkMappingConfiguration->video != baseSinkMappingConfiguration->preview + ) + { + selectedSinkMappingConfiguration->postProcessingVideo = baseSinkMappingConfiguration->preview; + } + else + if (selectedGraphConfigurationHeader->settingsKey.postProcessingVideo.bpp == baseGraphConfigurationHeader->settingsKey.video.bpp && + selectedGraphConfigurationHeader->settingsKey.postProcessingVideo.width == baseGraphConfigurationHeader->settingsKey.video.width && + selectedGraphConfigurationHeader->settingsKey.postProcessingVideo.height == baseGraphConfigurationHeader->settingsKey.video.height + && selectedSinkMappingConfiguration->preview != baseSinkMappingConfiguration->video + && selectedSinkMappingConfiguration->video != baseSinkMappingConfiguration->video + ) + { + selectedSinkMappingConfiguration->postProcessingVideo = baseSinkMappingConfiguration->video; + } + else + if (selectedGraphConfigurationHeader->settingsKey.postProcessingVideo.bpp == baseGraphConfigurationHeader->settingsKey.postProcessingVideo.bpp && + selectedGraphConfigurationHeader->settingsKey.postProcessingVideo.width == baseGraphConfigurationHeader->settingsKey.postProcessingVideo.width && + selectedGraphConfigurationHeader->settingsKey.postProcessingVideo.height == baseGraphConfigurationHeader->settingsKey.postProcessingVideo.height + && selectedSinkMappingConfiguration->preview != baseSinkMappingConfiguration->postProcessingVideo + && selectedSinkMappingConfiguration->video != baseSinkMappingConfiguration->postProcessingVideo + ) + { + selectedSinkMappingConfiguration->postProcessingVideo = baseSinkMappingConfiguration->postProcessingVideo; + } + else + { + STATIC_GRAPH_LOG("Did not find correct mapping for postProcessingVideo sink."); + } + + if (selectedGraphConfigurationHeader->settingsKey.stills.bpp == baseGraphConfigurationHeader->settingsKey.stills.bpp && + selectedGraphConfigurationHeader->settingsKey.stills.width == baseGraphConfigurationHeader->settingsKey.stills.width && + selectedGraphConfigurationHeader->settingsKey.stills.height == baseGraphConfigurationHeader->settingsKey.stills.height + && selectedSinkMappingConfiguration->preview != baseSinkMappingConfiguration->stills + && selectedSinkMappingConfiguration->video != baseSinkMappingConfiguration->stills + && selectedSinkMappingConfiguration->postProcessingVideo != baseSinkMappingConfiguration->stills + ) + { + selectedSinkMappingConfiguration->stills = baseSinkMappingConfiguration->stills; + } + else + { + STATIC_GRAPH_LOG("Did not find correct mapping for stills sink."); + } + + if (selectedGraphConfigurationHeader->settingsKey.videoIr.bpp == baseGraphConfigurationHeader->settingsKey.videoIr.bpp && + selectedGraphConfigurationHeader->settingsKey.videoIr.width == baseGraphConfigurationHeader->settingsKey.videoIr.width && + selectedGraphConfigurationHeader->settingsKey.videoIr.height == baseGraphConfigurationHeader->settingsKey.videoIr.height + ) + { + selectedSinkMappingConfiguration->videoIr = baseSinkMappingConfiguration->videoIr; + } + else + if (selectedGraphConfigurationHeader->settingsKey.videoIr.bpp == baseGraphConfigurationHeader->settingsKey.previewIr.bpp && + selectedGraphConfigurationHeader->settingsKey.videoIr.width == baseGraphConfigurationHeader->settingsKey.previewIr.width && + selectedGraphConfigurationHeader->settingsKey.videoIr.height == baseGraphConfigurationHeader->settingsKey.previewIr.height + ) + { + selectedSinkMappingConfiguration->videoIr = baseSinkMappingConfiguration->previewIr; + } + else + { + STATIC_GRAPH_LOG("Did not find correct mapping for videoIr sink."); + } + + if (selectedGraphConfigurationHeader->settingsKey.previewIr.bpp == baseGraphConfigurationHeader->settingsKey.videoIr.bpp && + selectedGraphConfigurationHeader->settingsKey.previewIr.width == baseGraphConfigurationHeader->settingsKey.videoIr.width && + selectedGraphConfigurationHeader->settingsKey.previewIr.height == baseGraphConfigurationHeader->settingsKey.videoIr.height + && selectedSinkMappingConfiguration->videoIr != baseSinkMappingConfiguration->videoIr + ) + { + selectedSinkMappingConfiguration->previewIr = baseSinkMappingConfiguration->videoIr; + } + else + if (selectedGraphConfigurationHeader->settingsKey.previewIr.bpp == baseGraphConfigurationHeader->settingsKey.previewIr.bpp && + selectedGraphConfigurationHeader->settingsKey.previewIr.width == baseGraphConfigurationHeader->settingsKey.previewIr.width && + selectedGraphConfigurationHeader->settingsKey.previewIr.height == baseGraphConfigurationHeader->settingsKey.previewIr.height + && selectedSinkMappingConfiguration->videoIr != baseSinkMappingConfiguration->previewIr + ) + { + selectedSinkMappingConfiguration->previewIr = baseSinkMappingConfiguration->previewIr; + } + else + { + STATIC_GRAPH_LOG("Did not find correct mapping for previewIr sink."); + } + + } +} diff --git a/modules/ipu_desc/ipu8/Ipu8StaticGraphReaderAutogen.h b/modules/ipu_desc/ipu8/Ipu8StaticGraphReaderAutogen.h new file mode 100644 index 0000000..9f6ead1 --- /dev/null +++ b/modules/ipu_desc/ipu8/Ipu8StaticGraphReaderAutogen.h @@ -0,0 +1,96 @@ +/* +* INTEL CONFIDENTIAL +* Copyright (c) 2026 Intel Corporation +* All Rights Reserved. +* +* The source code contained or described herein and all documents related to +* the source code ("Material") are owned by Intel Corporation or its +* suppliers or licensors. Title to the Material remains with Intel +* Corporation or its suppliers and licensors. The Material may contain trade +* secrets and proprietary and confidential information of Intel Corporation +* and its suppliers and licensors, and is protected by worldwide copyright +* and trade secret laws and treaty provisions. No part of the Material may be +* used, copied, reproduced, modified, published, uploaded, posted, +* transmitted, distributed, or disclosed in any way without Intel's prior +* express written permission. +* +* No license under any patent, copyright, trade secret or other intellectual +* property right is granted to or conferred upon you by disclosure or +* delivery of the Materials, either expressly, by implication, inducement, +* estoppel or otherwise. Any license under such intellectual property rights +* must be express and approved by Intel in writing. +* +* Unless otherwise agreed by Intel in writing, you may not remove or alter +* this notice or any other notice embedded in Materials by Intel or Intels +* suppliers or licensors in any way. +*/ + +#ifndef STATIC_GRAPH_READER_H +#define STATIC_GRAPH_READER_H + +#include +#include "Ipu8StaticGraphBinaryAutogen.h" +#include "Ipu8StaticGraphAutogen.h" + +struct StaticReaderBinaryData { + void* data = nullptr; + uint32_t size = 0; +}; + +typedef enum +{ + enPreview, + enVideo, + enStills, + enRaw, + enIr, + enNumOfOutPins + +} DataRangePins; + +typedef struct DriverDesc { + + uint32_t format; + uint32_t width; + uint32_t height; + uint32_t fps; + +} DriverDesc; + +typedef struct DataRangeHeader { + + uint32_t NumberOfPinResolutions[enNumOfOutPins]; + +} DataRangeHeader; + +typedef struct +{ + uint32_t key; + uint32_t value; +}GraphHashCode; + +typedef struct +{ + uint32_t numOfGraphs; + GraphHashCode* hashCodes; +}GraphHashCodesTable; + +class StaticGraphReader +{ +public: + StaticGraphReader() = default; + StaticGraphStatus Init(StaticReaderBinaryData& binaryGraphSettings); + StaticGraphStatus GetStaticGraphConfig(GraphConfigurationKey& settingsKey, IStaticGraphConfig** graph); + std::pair GetGraphConfigurationHeaders() const; + GraphConfigurationKey* GetFdGraphConfigurationKey(GraphConfigurationKey& settingsKey) const; + static const uint32_t staticGraphCommonHashCode = 1110027246; // autogenerated +private: + void GetSinkMappingConfiguration(GraphConfigurationHeader* baseGraphConfigurationHeader, VirtualSinkMapping* baseSinkMappingConfiguration, + GraphConfigurationHeader* selectedGraphConfigurationHeader, VirtualSinkMapping* selectedSinkMappingConfiguration); + BinaryHeader _binaryHeader; + GraphConfigurationHeader* _graphConfigurationHeaders = nullptr; + SensorMode* _sensorModes = nullptr; + int8_t* _configurationData = nullptr; +}; + +#endif \ No newline at end of file diff --git a/modules/ipu_desc/ipu8/Ipu8StaticGraphTypesAutogen.h b/modules/ipu_desc/ipu8/Ipu8StaticGraphTypesAutogen.h new file mode 100644 index 0000000..da22968 --- /dev/null +++ b/modules/ipu_desc/ipu8/Ipu8StaticGraphTypesAutogen.h @@ -0,0 +1,487 @@ +/* +* INTEL CONFIDENTIAL +* Copyright (c) 2026 Intel Corporation +* All Rights Reserved. +* +* The source code contained or described herein and all documents related to +* the source code ("Material") are owned by Intel Corporation or its +* suppliers or licensors. Title to the Material remains with Intel +* Corporation or its suppliers and licensors. The Material may contain trade +* secrets and proprietary and confidential information of Intel Corporation +* and its suppliers and licensors, and is protected by worldwide copyright +* and trade secret laws and treaty provisions. No part of the Material may be +* used, copied, reproduced, modified, published, uploaded, posted, +* transmitted, distributed, or disclosed in any way without Intel's prior +* express written permission. +* +* No license under any patent, copyright, trade secret or other intellectual +* property right is granted to or conferred upon you by disclosure or +* delivery of the Materials, either expressly, by implication, inducement, +* estoppel or otherwise. Any license under such intellectual property rights +* must be express and approved by Intel in writing. +* +* Unless otherwise agreed by Intel in writing, you may not remove or alter +* this notice or any other notice embedded in Materials by Intel or Intels +* suppliers or licensors in any way. +*/ + +#ifndef STATIC_GRAPH_TYPES_H +#define STATIC_GRAPH_TYPES_H + +#ifdef STATIC_GRAPH_USE_IA_AIC_TYPES +#define STATIC_GRAPH_USE_IA_LEGACY_TYPES +#include "ia_aic_types.h" +typedef aic::ImagingKernelGroup StaticGraphNodeKernels; +typedef aic::ia_pac_kernel_info StaticGraphPacRunKernel; +typedef aic::IaAicFragmentDesc StaticGraphFragmentDesc; +typedef aic::IaAicUpscalerFragDesc StaticGraphUpscalerFragmentDesc; +#endif + +#ifdef STATIC_GRAPH_USE_IA_LEGACY_TYPES +#include "ia_isp_bxt_types.h" +#include "ia_pal_types_isp_parameters_autogen.h" +#if (IA_RESOLUTION_STATIC_GRAPH_PACK != 4) + #error "Static graph resulution structs packing alignment is defferent than defined in ia_types.h" +#endif +typedef ia_binary_data StaticGraphKernelSystemApi; +typedef ia_rectangle StaticGraphKernelResCrop; +typedef ia_isp_bxt_resolution_info StaticGraphKernelRes; +typedef ia_isp_bxt_bpp_info_t StaticGraphCompKernelBpp; +typedef ia_isp_bxt_run_kernels StaticGraphRunKernel; +typedef ia_pal_system_api_io_buffer_1_4_t StaticGraphKernelSystemApiIoBuffer1_4; +typedef ia_pal_system_api_b2i_ds_1_1_t StaticGraphKernelSystemApiB2iDs1_1; +#endif + +#ifdef STATIC_GRAPH_LOG +#define SG_PRINTF(fmt, ...) do { printf(fmt, ##__VA_ARGS__); printf("\n"); } while ((void)0, 0) +#define STATIC_GRAPH_LOG(...) SG_PRINTF(__VA_ARGS__) +#else +#define STATIC_GRAPH_LOG(...) ((void)0) +#endif + +enum class NodeResourceId : uint8_t { + Lbff = 0, + SwIsys = 2, + SwSegnet = 3, + SwGdc = 4, + SwScaler = 5, + SwNntm = 6, +}; + +enum class StaticGraphStatus : uint8_t +{ + SG_OK = 0, + SG_ERROR = 1 +}; + +enum class VirtualSink : uint8_t +{ + PreviewSink, + VideoSink, + PostProcessingVideoSink, + StillsSink, + ThumbnailSink, + RawSink, + RawPdafSink, + RawDolLongSink, + RawCvSink, + VideoIrSink, + PreviewIrSink, +}; + +enum class HwSink : uint8_t +{ + Disconnected, + AeOutSink, + AfStdOutSink, + AwbStdOutSink, + AwbSatOutSink, + ImageMpSink, + ImageDpSink, + GmvMatchOutSink, + ProcessedMainSink, + CvOutputSink, + ProcessedSecondarySink, + PdafOutSink, + AwbSveOutSink, + IrAeOutSink, + IrAfStdOutSink, + IrAwbStdOutSink, + IrAwbSatOutSink, + IrMpSink, + RawIsysSink, + RawIsysCvSink, + RawIsysDolLongSink, + RawIsysPdafSink, +}; + +enum class VanishOption : uint8_t { + Full, + AfterStats, + AfterTnr, +}; +enum class SapAttributeValues { + None = 0, + SapAttribute = 1, + LongInputAttribute = 2, + ShortInputAttribute = 4, +}; +#pragma pack(push, 4) + +#ifndef STATIC_GRAPH_USE_IA_LEGACY_TYPES +// ia_isp_bxt_bpp_info_t +struct StaticGraphCompKernelBpp { + uint8_t input_bpp = 0; + uint8_t output_bpp = 0; +}; + +// ia_rectangle +struct StaticGraphKernelResCrop { + int32_t left = 0; + int32_t top = 0; + int32_t right = 0; + int32_t bottom = 0; +}; + +// ia_isp_bxt_resolution_info +struct StaticGraphKernelRes { + int32_t input_width = 0; + int32_t input_height = 0; + StaticGraphKernelResCrop input_crop; + int32_t output_width = 0; + int32_t output_height = 0; + StaticGraphKernelResCrop output_crop; +}; + +// ia_pal_system_api_io_buffer_1_4_t; +// We add only the fields that are used by tests +struct StaticGraphKernelSystemApiIoBuffer1_4 { + uint32_t x_output_offset_per_stripe[4]; + uint32_t plane_start_address_per_stripe[12]; +}; + +// ia_pal_system_api_b2i_ds_1_1_t; +struct StaticGraphKernelSystemApiB2iDs1_1 { + uint8_t is_striping; +}; + +#endif +struct StaticGraphKernelBppConfiguration { + uint8_t input_bpp = 0; + uint8_t output_bpp = 0; +}; + +struct StaticGraphPlaneCompressionConfiguration { + uint8_t isEnabled = 0; + uint8_t tsAlignInterval = 0; + uint16_t rowsOfTiles = 0; + uint32_t pixelsOffset = 0; + uint32_t tsOffset = 0; + uint32_t rowOfTilesStride = 0; + uint8_t bpp = 0; + uint8_t encoderPlaneId = 0; + uint8_t decoderPlaneId = 0; + uint8_t isLossy = 0; + uint8_t isFootprint = 0; + uint8_t footprintCompressionRatio = 0; + uint8_t lossyRatioPlus = 0; + uint8_t lossyRatioMins = 0; + uint8_t lossyInstUpper = 0; + uint8_t lossyInstLower = 0; + uint8_t initHistory = 0; + uint8_t initQp = 0; + uint8_t maxQp = 0; + uint8_t minQp = 0; + uint8_t windowSize = 0; + uint8_t maxQpInc = 0; + uint8_t maxQpDec = 0; + uint8_t qpIncReset = 0; + uint8_t logFootprintGuardBand = 0; +}; + +struct StaticGraphLinkCompressionConfiguration { + uint8_t isEnabled = 0; + StaticGraphPlaneCompressionConfiguration lumaCompressionConfiguration; + StaticGraphPlaneCompressionConfiguration chromaCompressionConfiguration; +}; + +struct StaticGraphLinkConfiguration { + uint32_t bufferSize = 0; + uint8_t streamingMode = 0; +}; + +struct VirtualSinkMapping { + uint8_t preview = 0; + uint8_t video = 0; + uint8_t postProcessingVideo = 0; + uint8_t stills = 0; + uint8_t thumbnail = 0; + uint8_t raw = 0; + uint8_t rawPdaf = 0; + uint8_t rawDolLong = 0; + uint8_t rawCv = 0; + uint8_t videoIr = 0; + uint8_t previewIr = 0; +}; + +struct SystemApiRecordHeader { + uint16_t systemApiUuid = 0; +}; + +#pragma pack(pop) + +#ifndef STATIC_GRAPH_USE_IA_LEGACY_TYPES + +// ia_binary_data +struct StaticGraphKernelSystemApi { + void *data; + uint32_t size; +}; + +// ia_isp_bxt_run_kernels +struct StaticGraphRunKernel { + uint32_t stream_id; + uint32_t kernel_uuid; + int32_t enable; + StaticGraphKernelRes *resolution_info; + StaticGraphKernelRes *resolution_history; + uint32_t metadata[4]; + StaticGraphCompKernelBpp bpp_info; + uint32_t output_count; + StaticGraphKernelSystemApi system_api; +}; +#endif + +#ifndef STATIC_GRAPH_USE_IA_AIC_TYPES + +struct StaticGraphUpscalerFragmentDesc { + uint16_t fragmentInputCropLeft = 0; + uint16_t fragmentInputCropRight = 0; +}; + +struct StaticGraphFragmentDesc { + uint16_t fragmentInputWidth = 0; + uint16_t fragmentOutputWidth = 0; + uint16_t fragmentStartX = 0; + union + { + StaticGraphUpscalerFragmentDesc upscalerFragDesc; + }; +}; + +// ia_pac_kernel_info +struct StaticGraphPacRunKernel { + StaticGraphRunKernel run_kernel; + StaticGraphFragmentDesc* fragment_descs; + bool fragments_defined; +}; + +// ImagingKernelGroup +struct StaticGraphNodeKernels +{ + uint32_t kernelCount; + StaticGraphPacRunKernel *kernelList; + uint32_t operationMode; + uint32_t streamId; +}; + +#endif +struct HwBitmaps { + uint32_t rbm[4] = {}; + uint32_t deb[4] = {}; + uint32_t teb[2] = {}; + uint32_t reb[4] = {}; +}; + +enum class NodeTypes : uint8_t { + Isys, + Cb, + Sw, +}; + +enum class GraphElementType : uint8_t { + // Sources + Sensor, + LscBuffer, + PdafBuffer, + SensorDolLongExposure, + LscBufferIr, + // Sinks + AeOut, + AfStdOut, + AwbStdOut, + AwbSatOut, + ImageMp, + ImageDp, + GmvMatchOut, + ProcessedMain, + CvOutput, + ProcessedSecondary, + PdafOut, + AwbSveOut, + IrAeOut, + IrAfStdOut, + IrAwbStdOut, + IrAwbSatOut, + IrMp, + RawIsys, + RawIsysCv, + RawIsysDolLong, + RawIsysPdaf, + // Outer Nodes + Isys, + LbffBayerNoGmvNoTnrNoSap, + LbffBayerWithGmvNoTnrNoSap, + SwGdc, + LbffBayerNoGmvWithTnrNoSap, + LbffBayerWithGmvWithTnrNoSap, + IsysWithCv, + SwSegnet, + LbffBayerWithGmvWithTnrWithSap, + SwScaler, + SwNntm, + LbffBayerNoGmvWithTnrWithSap, + IsysPdaf2WithCv, + LbffBayerPdaf2NoGmvWithTnrWithSap, + LbffBayerPdaf2WithTnrWithSap, + LbffBayerPdaf3NoGmvWithTnrWithSap, + LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap, + IsysPdaf2, + LbffBayerPdaf2NoGmvNoTnrNoSap, + LbffBayerPdaf2WithGmvNoTnrNoSap, + LbffBayerPdaf2NoGmvWithTnrNoSap, + LbffBayerPdaf2WithGmvWithTnrNoSap, + LbffBayerPdaf2WithGmvWithTnrWithSap, + LbffBayerPdaf3NoGmvNoTnrNoSap, + LbffBayerPdaf3WithGmvNoTnrNoSap, + LbffBayerPdaf3NoGmvWithTnrNoSap, + LbffBayerPdaf3WithGmvWithTnrNoSap, + LbffBayerPdaf3WithGmvWithTnrWithSap, + IsysDol, + LbffDol2InputsNoGmvNoTnrNoSap, + LbffDol2InputsWithGmvNoTnrNoSap, + LbffDol2InputsNoGmvWithTnrNoSap, + LbffDol2InputsWithGmvWithTnrNoSap, + LbffDolSmooth, + LbffDol3InputsNoGmvNoTnrNoSap, + LbffDol3InputsWithGmvNoTnrNoSap, + LbffDol3InputsNoGmvWithTnrNoSap, + LbffDol3InputsWithGmvWithTnrNoSap, + LbffRgbIrNoGmvNoTnrNoSap, + LbffRgbIrIrNoGmvNoTnrNoSap, + LbffRgbIrWithGmvNoTnrNoSap, + LbffRgbIrNoGmvWithTnrNoSap, + LbffRgbIrIrNoGmvWithTnrNoSap, + LbffRgbIrWithGmvWithTnrNoSap, + LbffIrNoGmvNoTnrNoSap, + LbffIrWithGmvNoTnrNoSap, + LbffIrNoGmvWithTnrNoSap, + LbffIrWithGmvWithTnrNoSap, + LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSap, + LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap, + LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap, + LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap, + LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap, + LbffBayerNoGmvNoTnrWithSap, + LbffBayerWithGmvNoTnrWithSap, + LbffBayerNoGmvWithTnrWithOpacity, + LbffBayerPdaf2NoGmvNoTnrWithSap, + LbffBayerPdaf2WithGmvNoTnrWithSap, + LbffBayerPdaf3NoGmvNoTnrWithSap, + LbffBayerPdaf3WithGmvNoTnrWithSap, + IsysDolWithCv, + LbffDol2InputsNoGmvNoTnrWithSap, + LbffDol2InputsWithGmvNoTnrWithSap, + LbffDol2InputsNoGmvWithTnrWithSap, + LbffDol2InputsWithGmvWithTnrWithSap, + LbffDol3InputsNoGmvNoTnrWithSap, + LbffDol3InputsWithGmvNoTnrWithSap, + LbffDol3InputsNoGmvWithTnrWithSap, + LbffDol3InputsWithGmvWithTnrWithSap, + LbffRgbIrNoGmvNoTnrWithSap, + LbffRgbIrWithGmvNoTnrWithSap, + LbffRgbIrNoGmvWithTnrWithSap, + LbffRgbIrWithGmvWithTnrWithSap, + LbffIrNoGmvNoTnrWithSap, + LbffIrWithGmvNoTnrWithSap, + LbffIrNoGmvWithTnrWithSap, + LbffIrWithGmvWithTnrWithSap, + LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSap, + LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap, + WithCv, +}; + +enum class LinkType : uint8_t { + Source2Node, + Node2Node, + Node2Sink, + Node2Self, +}; + +enum class FormatType : uint8_t { + SINGLE_PL_8_P, + SINGLE_PL_8, + SINGLE_PL_8_MSB, + SINGLE_PL_10_P, + SINGLE_PL_10, + SINGLE_PL_10_MSB, + SINGLE_PL_12_P, + SINGLE_PL_12, + SINGLE_PL_12_MSB, + SINGLE_PL_16, + YUV420_8_SP_P, + YUV420_8_SP_P_REV, + YUV420_8_SP_MSB, + YUV420_8_SP_REV_MSB, + YUV420_8_SP_LSB, + YUV420_8_SP_REV_LSB, + YUV420_10_SP_P, + YUV420_10_SP_P_REV, + YUV420_10_SP_MSB, + YUV420_10_SP_REV_MSB, + YUV420_10_SP_LSB, + YUV420_10_SP_REV_LSB, + YUV420_12_SP_P, + YUV420_12_SP_P_REV, + YUV420_12_SP_MSB, + YUV420_12_SP_REV_MSB, + YUV420_12_SP_LSB, + YUV420_12_SP_REV_LSB, + YUV420_16_SP, + YUV420_16_SP_REV, + YUV420_8_FP_P, + YUV420_8_FP_P_REV, + YUV420_8_FP_MSB, + YUV420_8_FP_REV_MSB, + YUV420_8_FP_LSB, + YUV420_8_FP_REV_LSB, + YUV420_10_FP_P, + YUV420_10_FP_P_REV, + YUV420_10_FP_MSB, + YUV420_10_FP_REV_MSB, + YUV420_10_FP_LSB, + YUV420_10_FP_REV_LSB, + YUV420_12_FP_P, + YUV420_12_FP_P_REV, + YUV420_12_FP_MSB, + YUV420_12_FP_REV_MSB, + YUV420_12_FP_LSB, + YUV420_12_FP_REV_LSB, + YUV420_16_FP, + YUV420_16_FP_REV, + META_16, + YUV420_8_SP_P_GFX, + YUV420_10_SP_MSB_GFX, + YUV420_8_1P_P, + YUV422_YUYV_8_1P_P, + YUV422_8_SP_P, + YUV422_8_SP_P_REV, + META_8, + YUVRGB444_8_FP_P, + Y_8_1P_P, + RGBA_8_1P_P, + SINGLE_PL_10_MP, + SINGLE_PL_12_MP, +}; + +#endif \ No newline at end of file diff --git a/modules/ipu_desc/ipu8/Ipu8TerminalDescriptorAutogen.cpp b/modules/ipu_desc/ipu8/Ipu8TerminalDescriptorAutogen.cpp new file mode 100644 index 0000000..bb09b07 --- /dev/null +++ b/modules/ipu_desc/ipu8/Ipu8TerminalDescriptorAutogen.cpp @@ -0,0 +1,581 @@ +/* +* INTEL CONFIDENTIAL +* Copyright (c) 2026 Intel Corporation +* All Rights Reserved. +* +* The source code contained or described herein and all documents related to +* the source code ("Material") are owned by Intel Corporation or its +* suppliers or licensors. Title to the Material remains with Intel +* Corporation or its suppliers and licensors. The Material may contain trade +* secrets and proprietary and confidential information of Intel Corporation +* and its suppliers and licensors, and is protected by worldwide copyright +* and trade secret laws and treaty provisions. No part of the Material may be +* used, copied, reproduced, modified, published, uploaded, posted, +* transmitted, distributed, or disclosed in any way without Intel's prior +* express written permission. +* +* No license under any patent, copyright, trade secret or other intellectual +* property right is granted to or conferred upon you by disclosure or +* delivery of the Materials, either expressly, by implication, inducement, +* estoppel or otherwise. Any license under such intellectual property rights +* must be express and approved by Intel in writing. +* +* Unless otherwise agreed by Intel in writing, you may not remove or alter +* this notice or any other notice embedded in Materials by Intel or Intels +* suppliers or licensors in any way. +*/ + +#include "Ipu8TerminalDescriptorAutogen.h" + +TerminalDescriptor SW_ISYSTerminalDesc[] = +{ + { + SW_ISYS_TERMINAL_LOAD_ALGO_FRAME_IN, + TERMINAL_TYPE_LOAD, + "TERMINAL_LOAD_ALGO_FRAME_IN", + PAC_BUFFER_TYPE_PARAM_IN, + TERMINAL_BUFFER_TYPE_METADATA, + TERMINAL_DIR_IN, + 0, + }, + { + SW_ISYS_TERMINAL_LOAD_ALGO_STREAM_IN, + TERMINAL_TYPE_LOAD, + "TERMINAL_LOAD_ALGO_STREAM_IN", + PAC_BUFFER_TYPE_PROGRAM, + TERMINAL_BUFFER_TYPE_METADATA, + TERMINAL_DIR_IN, + 0, + }, + { + SW_ISYS_TERMINAL_CONNECT_INPUT_UPIPE, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_INPUT_UPIPE", + PAC_BUFFER_TYPE_NONE, + TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_IN, + 36280, // crop_bpp_adjust_1_0 + }, + { + SW_ISYS_TERMINAL_CONNECT_OUTPUT_CV, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_OUTPUT_CV", + PAC_BUFFER_TYPE_NONE, + TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_OUT, + 26150, // isys_drainer_1_0 + }, + { + SW_ISYS_TERMINAL_CONNECT_INPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_INPUT", + PAC_BUFFER_TYPE_NONE, + TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_IN, + 11470, // is_odr_a + }, + { + SW_ISYS_TERMINAL_CONNECT_OUTPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_OUTPUT", + PAC_BUFFER_TYPE_NONE, + TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_OUT, + 11470, // is_odr_a + }, + { + SW_ISYS_TERMINAL_CONNECT_INPUT_PDAF, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_INPUT_PDAF", + PAC_BUFFER_TYPE_NONE, + TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_IN, + 55449, // is_odr_b + }, + { + SW_ISYS_TERMINAL_CONNECT_OUTPUT_PDAF, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_OUTPUT_PDAF", + PAC_BUFFER_TYPE_NONE, + TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_OUT, + 55449, // is_odr_b + }, + { + SW_ISYS_TERMINAL_CONNECT_INPUT_DOL_LONG, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_INPUT_DOL_LONG", + PAC_BUFFER_TYPE_NONE, + TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_IN, + 50407, // is_odr_c + }, + { + SW_ISYS_TERMINAL_CONNECT_OUTPUT_DOL_LONG, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_OUTPUT_DOL_LONG", + PAC_BUFFER_TYPE_NONE, + TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_OUT, + 50407, // is_odr_c + }, +}; + +TerminalDescriptor LBFFTerminalDesc[] = +{ + { + LBFF_TERMINAL_LOAD_ALGO_CACHED, + TERMINAL_TYPE_LOAD, + "TERMINAL_LOAD_ALGO_CACHED", + PAC_BUFFER_TYPE_PARAM_IN, + TERMINAL_BUFFER_TYPE_METADATA, + TERMINAL_DIR_IN, + 0, + }, + { + LBFF_TERMINAL_LOAD_ALGO_FRAG_SEQ, + TERMINAL_TYPE_LOAD, + "TERMINAL_LOAD_ALGO_FRAG_SEQ", + PAC_BUFFER_TYPE_PROGRAM, + TERMINAL_BUFFER_TYPE_METADATA, + TERMINAL_DIR_IN, + 0, + }, + { + LBFF_TERMINAL_LOAD_SYSTEM, + TERMINAL_TYPE_LOAD, + "TERMINAL_LOAD_SYSTEM", + PAC_BUFFER_TYPE_SYS_FRAG_SEQUENCER, + TERMINAL_BUFFER_TYPE_METADATA, + TERMINAL_DIR_IN, + 0, + }, + { + LBFF_TERMINAL_LOAD_SR_FRAME_IN, + TERMINAL_TYPE_LOAD, + "TERMINAL_LOAD_SR_FRAME_IN", + PAC_BUFFER_TYPE_SR_FRAME_IN, + TERMINAL_BUFFER_TYPE_METADATA, + TERMINAL_DIR_IN_OUT, + 0, + }, + { + LBFF_TERMINAL_CONNECT_MAIN_DATA_INPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_MAIN_DATA_INPUT", + PAC_BUFFER_TYPE_NONE, + TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_IN, + 52446, // ifd_pipe_1_4 + }, + { + LBFF_TERMINAL_CONNECT_DOL_LONG_INPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_DOL_LONG_INPUT", + PAC_BUFFER_TYPE_NONE, + TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_IN, + 24678, // ifd_pipe_long_1_4 + }, + { + LBFF_TERMINAL_CONNECT_DOL_SHORT_SMTH_INPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_DOL_SHORT_SMTH_INPUT", + PAC_BUFFER_TYPE_NONE, + TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_IN, + 4386, // ifd_pipe_short_smth_1_4 + }, + { + LBFF_TERMINAL_CONNECT_LSC_INPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_LSC_INPUT", + PAC_BUFFER_TYPE_SPATIAL_IN, + TERMINAL_BUFFER_TYPE_METADATA, + TERMINAL_DIR_IN, + 29313, // ifd_lsc_1_4 + }, + { + LBFF_TERMINAL_CONNECT_PDAF_DATA_INPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_PDAF_DATA_INPUT", + PAC_BUFFER_TYPE_NONE, + TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_IN, + 22427, // ifd_pdaf_1_4 + }, + { + LBFF_TERMINAL_CONNECT_AE_OUTPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_AE_OUTPUT", + PAC_BUFFER_TYPE_SPATIAL_OUT, + TERMINAL_BUFFER_TYPE_METADATA, + TERMINAL_DIR_OUT, + 62556, // odr_ae_1_4 + }, + { + LBFF_TERMINAL_CONNECT_AF_STD_OUTPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_AF_STD_OUTPUT", + PAC_BUFFER_TYPE_SPATIAL_OUT, + TERMINAL_BUFFER_TYPE_METADATA, + TERMINAL_DIR_OUT, + 59136, // odr_af_std_1_4 + }, + { + LBFF_TERMINAL_CONNECT_AWB_STD_OUTPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_AWB_STD_OUTPUT", + PAC_BUFFER_TYPE_SPATIAL_OUT, + TERMINAL_BUFFER_TYPE_METADATA, + TERMINAL_DIR_OUT, + 38544, // odr_awb_std_1_4 + }, + { + LBFF_TERMINAL_CONNECT_AWB_SAT_OUTPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_AWB_SAT_OUTPUT", + PAC_BUFFER_TYPE_SPATIAL_OUT, + TERMINAL_BUFFER_TYPE_METADATA, + TERMINAL_DIR_OUT, + 1248, // odr_awb_sat_1_4 + }, + { + LBFF_TERMINAL_CONNECT_PDAF_OUTPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_PDAF_OUTPUT", + PAC_BUFFER_TYPE_SPATIAL_OUT, + TERMINAL_BUFFER_TYPE_METADATA, + TERMINAL_DIR_OUT, + 26892, // odr_pdaf_1_4 + }, + { + LBFF_TERMINAL_CONNECT_IR_OUTPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_IR_OUTPUT", + PAC_BUFFER_TYPE_NONE, + TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_OUT, + 60297, // odr_ir_1_4 + }, + { + LBFF_TERMINAL_CONNECT_BURST_ISP_OUTPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_BURST_ISP_OUTPUT", + PAC_BUFFER_TYPE_NONE, + TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_OUT, + 0, // No graphs found + }, + { + LBFF_TERMINAL_CONNECT_BNLM_OUTPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_BNLM_OUTPUT", + PAC_BUFFER_TYPE_NONE, + TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_OUT, + 53535, // odr_bnlm_1_4 + }, + { + LBFF_TERMINAL_CONNECT_GMV_INPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_GMV_INPUT", + PAC_BUFFER_TYPE_SPATIAL_IN, + TERMINAL_BUFFER_TYPE_METADATA, + TERMINAL_DIR_IN, + 51073, // ifd_gmv_1_4 + }, + { + LBFF_TERMINAL_CONNECT_AWB_SVE_OUTPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_AWB_SVE_OUTPUT", + PAC_BUFFER_TYPE_SPATIAL_OUT, + TERMINAL_BUFFER_TYPE_METADATA, + TERMINAL_DIR_OUT, + 53430, // odr_awb_sve_1_4 + }, + { + LBFF_TERMINAL_CONNECT_DPC_PDAF_OUTPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_DPC_PDAF_OUTPUT", + PAC_BUFFER_TYPE_SPATIAL_OUT, + TERMINAL_BUFFER_TYPE_METADATA, + TERMINAL_DIR_OUT, + 54812, // odr_dpc_pdaf_1_4 + }, + { + LBFF_TERMINAL_CONNECT_GMV_MATCH_OUTPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_GMV_MATCH_OUTPUT", + PAC_BUFFER_TYPE_SPATIAL_OUT, + TERMINAL_BUFFER_TYPE_METADATA, + TERMINAL_DIR_OUT, + 41148, // odr_gmv_match_1_4 + }, + { + LBFF_TERMINAL_CONNECT_GMV_FEATURE_OUTPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_GMV_FEATURE_OUTPUT", + PAC_BUFFER_TYPE_SPATIAL_OUT, + TERMINAL_BUFFER_TYPE_METADATA, + TERMINAL_DIR_OUT, + 7416, // odr_gmv_feature_1_4 + }, + { + LBFF_TERMINAL_CONNECT_BC_YUV_INPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_BC_YUV_INPUT", + PAC_BUFFER_TYPE_NONE, + TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_IN, + 7357, // ifd_tnr_sp_bc_yuv4nm1_1_4 + }, + { + LBFF_TERMINAL_CONNECT_BC_RS_INPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_BC_RS_INPUT", + PAC_BUFFER_TYPE_SPATIAL_IN, + TERMINAL_BUFFER_TYPE_METADATA, + TERMINAL_DIR_IN, + 62054, // ifd_tnr_sp_bc_rs4nm1_1_4 + }, + { + LBFF_TERMINAL_CONNECT_BC_OUTPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_BC_OUTPUT", + PAC_BUFFER_TYPE_SPATIAL_OUT, + TERMINAL_BUFFER_TYPE_METADATA, + TERMINAL_DIR_OUT, + 63731, // odr_tnr_sp_bc_rs4n_1_4 + }, + { + LBFF_TERMINAL_CONNECT_BLEND_YUV_INPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_BLEND_YUV_INPUT", + PAC_BUFFER_TYPE_NONE, + TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_IN, + 16295, // ifd_tnr_fp_blend_yuvnm1_1_4 + }, + { + LBFF_TERMINAL_CONNECT_BLEND_OUTPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_BLEND_OUTPUT", + PAC_BUFFER_TYPE_NONE, + TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_OUT, + 5215, // odr_tnr_fp_yuvn_1_4 + }, + { + LBFF_TERMINAL_CONNECT_TNR_SCALER_OUTPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_TNR_SCALER_OUTPUT", + PAC_BUFFER_TYPE_NONE, + TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_OUT, + 65437, // odr_tnr_scale_fp_yuv4n_1_4 + }, + { + LBFF_TERMINAL_CONNECT_OFS_MP_OUTPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_OFS_MP_OUTPUT", + PAC_BUFFER_TYPE_NONE, + TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_OUT, + 16460, // odr_ofs_mp_1_4 + }, + { + LBFF_TERMINAL_CONNECT_OFS_DP_OUTPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_OFS_DP_OUTPUT", + PAC_BUFFER_TYPE_NONE, + TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_OUT, + 37951, // odr_ofs_dp_1_4 + }, + { + LBFF_TERMINAL_CONNECT_BNLM_SM_INPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_BNLM_SM_INPUT", + PAC_BUFFER_TYPE_SPATIAL_IN, + TERMINAL_BUFFER_TYPE_METADATA, + TERMINAL_DIR_IN, + 35263, // ifd_segmap_bnlm_1_4 + }, + { + LBFF_TERMINAL_CONNECT_XNR_SM_INPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_XNR_SM_INPUT", + PAC_BUFFER_TYPE_SPATIAL_IN, + TERMINAL_BUFFER_TYPE_METADATA, + TERMINAL_DIR_IN, + 9241, // ifd_segmap_xnr_1_4 + }, + { + LBFF_TERMINAL_CONNECT_ACM_SM_INPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_ACM_SM_INPUT", + PAC_BUFFER_TYPE_SPATIAL_IN, + TERMINAL_BUFFER_TYPE_METADATA, + TERMINAL_DIR_IN, + 51914, // ifd_segmap_acm_1_4 + }, + { + LBFF_TERMINAL_CONNECT_BC_SM_INPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_BC_SM_INPUT", + PAC_BUFFER_TYPE_SPATIAL_IN, + TERMINAL_BUFFER_TYPE_METADATA, + TERMINAL_DIR_IN, + 47873, // ifd_segmap_tnr_bc_1_4 + }, + { + LBFF_TERMINAL_CONNECT_BLEND_SM_INPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_BLEND_SM_INPUT", + PAC_BUFFER_TYPE_SPATIAL_IN, + TERMINAL_BUFFER_TYPE_METADATA, + TERMINAL_DIR_IN, + 14619, // ifd_segmap_tnr_blend_1_4 + }, + { + LBFF_TERMINAL_CONNECT_CAS_SM_INPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_CAS_SM_INPUT", + PAC_BUFFER_TYPE_SPATIAL_IN, + TERMINAL_BUFFER_TYPE_METADATA, + TERMINAL_DIR_IN, + 20893, // ifd_segmap_cas_1_4 + }, + { + LBFF_TERMINAL_CONNECT_BGB_BM_INPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_BGB_BM_INPUT", + PAC_BUFFER_TYPE_SPATIAL_IN, + TERMINAL_BUFFER_TYPE_METADATA, + TERMINAL_DIR_IN, + 0, // No graphs found + }, + { + LBFF_TERMINAL_CONNECT_BGB_YUV_INPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_BGB_YUV_INPUT", + PAC_BUFFER_TYPE_NONE, + TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_IN, + 0, // No graphs found + }, +}; + +TerminalDescriptor SW_SEGNETTerminalDesc[] = +{ + { + SW_SEGNET_TERMINAL_CONNECT_CV_DATA_INPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_CV_DATA_INPUT", + PAC_BUFFER_TYPE_NONE, + TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_IN, + 0, // sw_segnet + }, + { + SW_SEGNET_TERMINAL_CONNECT_CV_DATA_OUTPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_CV_DATA_OUTPUT", + PAC_BUFFER_TYPE_SPATIAL_OUT, + TERMINAL_BUFFER_TYPE_METADATA, + TERMINAL_DIR_OUT, + 0, // sw_segnet + }, +}; + +TerminalDescriptor SW_GDCTerminalDesc[] = +{ + { + SW_GDC_TERMINAL_CONNECT_INPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_INPUT", + PAC_BUFFER_TYPE_NONE, + TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_IN, + 5637, // gdc7_1 + }, + { + SW_GDC_TERMINAL_CONNECT_OUTPUT_1, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_OUTPUT_1", + PAC_BUFFER_TYPE_NONE, + TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_OUT, + 0, // + }, + { + SW_GDC_TERMINAL_CONNECT_OUTPUT_2, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_OUTPUT_2", + PAC_BUFFER_TYPE_NONE, + TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_OUT, + 0, // + }, +}; + +TerminalDescriptor SW_SCALERTerminalDesc[] = +{ + { + SW_SCALER_TERMINAL_CONNECT_INPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_INPUT", + PAC_BUFFER_TYPE_NONE, + TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_IN, + 19706, // sw_scaler + }, + { + SW_SCALER_TERMINAL_CONNECT_OUTPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_OUTPUT", + PAC_BUFFER_TYPE_NONE, + TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_OUT, + 19706, // sw_scaler + }, +}; + +TerminalDescriptor SW_NNTMTerminalDesc[] = +{ + { + SW_NNTM_TERMINAL_CONNECT_INPUT, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_INPUT", + PAC_BUFFER_TYPE_NONE, + TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_IN, + 46539, // nntm_1_0 + }, + { + SW_NNTM_TERMINAL_CONNECT_OUTPUT_1, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_OUTPUT_1", + PAC_BUFFER_TYPE_NONE, + TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_OUT, + 0, // + }, + { + SW_NNTM_TERMINAL_CONNECT_OUTPUT_2, + TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_OUTPUT_2", + PAC_BUFFER_TYPE_NONE, + TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_OUT, + 0, // + }, +}; + +int CountOfSW_ISYSTerminalDesc = sizeof(SW_ISYSTerminalDesc) / sizeof(SW_ISYSTerminalDesc[0]); +int CountOfLBFFTerminalDesc = sizeof(LBFFTerminalDesc) / sizeof(LBFFTerminalDesc[0]); +int CountOfSW_SEGNETTerminalDesc = sizeof(SW_SEGNETTerminalDesc) / sizeof(SW_SEGNETTerminalDesc[0]); +int CountOfSW_GDCTerminalDesc = sizeof(SW_GDCTerminalDesc) / sizeof(SW_GDCTerminalDesc[0]); +int CountOfSW_SCALERTerminalDesc = sizeof(SW_SCALERTerminalDesc) / sizeof(SW_SCALERTerminalDesc[0]); +int CountOfSW_NNTMTerminalDesc = sizeof(SW_NNTMTerminalDesc) / sizeof(SW_NNTMTerminalDesc[0]); diff --git a/modules/ipu_desc/ipu8/Ipu8TerminalDescriptorAutogen.h b/modules/ipu_desc/ipu8/Ipu8TerminalDescriptorAutogen.h new file mode 100644 index 0000000..1ee05e7 --- /dev/null +++ b/modules/ipu_desc/ipu8/Ipu8TerminalDescriptorAutogen.h @@ -0,0 +1,171 @@ +/* +* INTEL CONFIDENTIAL +* Copyright (c) 2026 Intel Corporation +* All Rights Reserved. +* +* The source code contained or described herein and all documents related to +* the source code ("Material") are owned by Intel Corporation or its +* suppliers or licensors. Title to the Material remains with Intel +* Corporation or its suppliers and licensors. The Material may contain trade +* secrets and proprietary and confidential information of Intel Corporation +* and its suppliers and licensors, and is protected by worldwide copyright +* and trade secret laws and treaty provisions. No part of the Material may be +* used, copied, reproduced, modified, published, uploaded, posted, +* transmitted, distributed, or disclosed in any way without Intel's prior +* express written permission. +* +* No license under any patent, copyright, trade secret or other intellectual +* property right is granted to or conferred upon you by disclosure or +* delivery of the Materials, either expressly, by implication, inducement, +* estoppel or otherwise. Any license under such intellectual property rights +* must be express and approved by Intel in writing. +* +* Unless otherwise agreed by Intel in writing, you may not remove or alter +* this notice or any other notice embedded in Materials by Intel or Intels +* suppliers or licensors in any way. +*/ +#pragma once + +typedef enum _TerminalType +{ + TERMINAL_TYPE_LOAD, + TERMINAL_TYPE_CONNECT, + TERMINAL_TYPE_N +} TerminalType; + +typedef enum _PacBufferType +{ + PAC_BUFFER_TYPE_PARAM_IN, + PAC_BUFFER_TYPE_PARAM_OUT, + PAC_BUFFER_TYPE_PROGRAM, + PAC_BUFFER_TYPE_SPATIAL_IN, + PAC_BUFFER_TYPE_SPATIAL_OUT, + PAC_BUFFER_TYPE_FRAME_IN, + PAC_BUFFER_TYPE_FRAME_OUT, + PAC_BUFFER_TYPE_SYS_FRAG_SEQUENCER, + PAC_BUFFER_TYPE_SR_FRAME_IN, + PAC_BUFFER_TYPE_SR_FRAG_SEQUENCER, + PAC_BUFFER_TYPE_NONE, +} PacBufferType; + +typedef enum _TerminalBufferType +{ + TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_BUFFER_TYPE_METADATA, + TERMINAL_BUFFER_TYPE_N +} TerminalBufferType; + +typedef enum _TerminalDirection +{ + TERMINAL_DIR_IN, + TERMINAL_DIR_OUT, + TERMINAL_DIR_IN_OUT, + TERMINAL_DIR_N +} TerminalDirection; + +typedef struct _TerminalDescriptor +{ + int TerminalId; + TerminalType TerminalType; + const char *TerminalName; + PacBufferType PacBufferType; + TerminalBufferType TerminalBufferType; + TerminalDirection TerminalDirection; + int TerminalLinkedKernel; +} TerminalDescriptor; + +enum SW_ISYSTerminalID +{ + SW_ISYS_TERMINAL_LOAD_ALGO_FRAME_IN, + SW_ISYS_TERMINAL_LOAD_ALGO_STREAM_IN, + SW_ISYS_TERMINAL_CONNECT_INPUT_UPIPE, + SW_ISYS_TERMINAL_CONNECT_OUTPUT_CV, + SW_ISYS_TERMINAL_CONNECT_INPUT, + SW_ISYS_TERMINAL_CONNECT_OUTPUT, + SW_ISYS_TERMINAL_CONNECT_INPUT_PDAF, + SW_ISYS_TERMINAL_CONNECT_OUTPUT_PDAF, + SW_ISYS_TERMINAL_CONNECT_INPUT_DOL_LONG, + SW_ISYS_TERMINAL_CONNECT_OUTPUT_DOL_LONG, +}; + +enum LBFFTerminalID +{ + LBFF_TERMINAL_LOAD_ALGO_CACHED, + LBFF_TERMINAL_LOAD_ALGO_FRAG_SEQ, + LBFF_TERMINAL_LOAD_SYSTEM, + LBFF_TERMINAL_LOAD_SR_FRAME_IN, + LBFF_TERMINAL_CONNECT_MAIN_DATA_INPUT, + LBFF_TERMINAL_CONNECT_DOL_LONG_INPUT, + LBFF_TERMINAL_CONNECT_DOL_SHORT_SMTH_INPUT, + LBFF_TERMINAL_CONNECT_LSC_INPUT, + LBFF_TERMINAL_CONNECT_PDAF_DATA_INPUT, + LBFF_TERMINAL_CONNECT_AE_OUTPUT, + LBFF_TERMINAL_CONNECT_AF_STD_OUTPUT, + LBFF_TERMINAL_CONNECT_AWB_STD_OUTPUT, + LBFF_TERMINAL_CONNECT_AWB_SAT_OUTPUT, + LBFF_TERMINAL_CONNECT_PDAF_OUTPUT, + LBFF_TERMINAL_CONNECT_IR_OUTPUT, + LBFF_TERMINAL_CONNECT_BURST_ISP_OUTPUT, + LBFF_TERMINAL_CONNECT_BNLM_OUTPUT, + LBFF_TERMINAL_CONNECT_GMV_INPUT, + LBFF_TERMINAL_CONNECT_AWB_SVE_OUTPUT, + LBFF_TERMINAL_CONNECT_DPC_PDAF_OUTPUT, + LBFF_TERMINAL_CONNECT_GMV_MATCH_OUTPUT, + LBFF_TERMINAL_CONNECT_GMV_FEATURE_OUTPUT, + LBFF_TERMINAL_CONNECT_BC_YUV_INPUT, + LBFF_TERMINAL_CONNECT_BC_RS_INPUT, + LBFF_TERMINAL_CONNECT_BC_OUTPUT, + LBFF_TERMINAL_CONNECT_BLEND_YUV_INPUT, + LBFF_TERMINAL_CONNECT_BLEND_OUTPUT, + LBFF_TERMINAL_CONNECT_TNR_SCALER_OUTPUT, + LBFF_TERMINAL_CONNECT_OFS_MP_OUTPUT, + LBFF_TERMINAL_CONNECT_OFS_DP_OUTPUT, + LBFF_TERMINAL_CONNECT_BNLM_SM_INPUT, + LBFF_TERMINAL_CONNECT_XNR_SM_INPUT, + LBFF_TERMINAL_CONNECT_ACM_SM_INPUT, + LBFF_TERMINAL_CONNECT_BC_SM_INPUT, + LBFF_TERMINAL_CONNECT_BLEND_SM_INPUT, + LBFF_TERMINAL_CONNECT_CAS_SM_INPUT, + LBFF_TERMINAL_CONNECT_BGB_BM_INPUT, + LBFF_TERMINAL_CONNECT_BGB_YUV_INPUT, +}; + +enum SW_SEGNETTerminalID +{ + SW_SEGNET_TERMINAL_CONNECT_CV_DATA_INPUT, + SW_SEGNET_TERMINAL_CONNECT_CV_DATA_OUTPUT, +}; + +enum SW_GDCTerminalID +{ + SW_GDC_TERMINAL_CONNECT_INPUT, + SW_GDC_TERMINAL_CONNECT_OUTPUT_1, + SW_GDC_TERMINAL_CONNECT_OUTPUT_2, +}; + +enum SW_SCALERTerminalID +{ + SW_SCALER_TERMINAL_CONNECT_INPUT, + SW_SCALER_TERMINAL_CONNECT_OUTPUT, +}; + +enum SW_NNTMTerminalID +{ + SW_NNTM_TERMINAL_CONNECT_INPUT, + SW_NNTM_TERMINAL_CONNECT_OUTPUT_1, + SW_NNTM_TERMINAL_CONNECT_OUTPUT_2, +}; + +extern TerminalDescriptor SW_ISYSTerminalDesc[]; +extern TerminalDescriptor LBFFTerminalDesc[]; +extern TerminalDescriptor SW_SEGNETTerminalDesc[]; +extern TerminalDescriptor SW_GDCTerminalDesc[]; +extern TerminalDescriptor SW_SCALERTerminalDesc[]; +extern TerminalDescriptor SW_NNTMTerminalDesc[]; + +extern int CountOfSW_ISYSTerminalDesc; +extern int CountOfLBFFTerminalDesc; +extern int CountOfSW_SEGNETTerminalDesc; +extern int CountOfSW_GDCTerminalDesc; +extern int CountOfSW_SCALERTerminalDesc; +extern int CountOfSW_NNTMTerminalDesc; diff --git a/modules/ipu_desc/ipu8/StaticGraphAutogen.cpp b/modules/ipu_desc/ipu8/StaticGraphAutogen.cpp new file mode 100644 index 0000000..66e1638 --- /dev/null +++ b/modules/ipu_desc/ipu8/StaticGraphAutogen.cpp @@ -0,0 +1,59503 @@ +/* + * Copyright (C) 2025 Intel Corporation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "StaticGraphAutogen.h" +#define CHECK_BITMAP128_BIT(bitmap, index) \ + ((bitmap[(index) / 64]) & ((uint64_t)1 << ((index) % 64))) + +/* + * External Interfaces + */ +IStaticGraphConfig::IStaticGraphConfig(SensorMode* selectedSensorMode, + VirtualSinkMapping* sinkMappingConfiguration, + int32_t graphId, int32_t settingsId) + : _selectedSensorMode(selectedSensorMode), + _graphId(graphId), + _settingsId(settingsId) { + memcpy(_sinkMappingConfiguration, sinkMappingConfiguration, sizeof(VirtualSinkMapping)); +} + +StaticGraphStatus IStaticGraphConfig::getSensorMode(SensorMode** sensorMode) { + if (!sensorMode) { + STATIC_GRAPH_LOG("Sensor mode does not exist for this setting."); + return StaticGraphStatus::SG_OK; + } + *sensorMode = _selectedSensorMode; + return StaticGraphStatus::SG_OK; +}; + +StaticGraphStatus IStaticGraphConfig::getGraphTopology(GraphTopology** topology) { + *topology = _selectedGraphTopology; + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus IStaticGraphConfig::getGraphId(int32_t* graphId) { + if (graphId == nullptr) { + return StaticGraphStatus::SG_ERROR; + } + + *graphId = _graphId; + return StaticGraphStatus::SG_OK; +}; + +StaticGraphStatus IStaticGraphConfig::getSettingsId(int32_t* settingsId) { + if (settingsId == nullptr) { + return StaticGraphStatus::SG_ERROR; + } + + *settingsId = _settingsId; + return StaticGraphStatus::SG_OK; +}; + +StaticGraphStatus IStaticGraphConfig::getVirtualSinkConnection(VirtualSink& virtualSink, + HwSink* hwSink) { + switch (virtualSink) { + case VirtualSink::PreviewSink: + *hwSink = static_cast(_sinkMappingConfiguration->preview); + break; + case VirtualSink::VideoSink: + *hwSink = static_cast(_sinkMappingConfiguration->video); + break; + case VirtualSink::PostProcessingVideoSink: + *hwSink = static_cast(_sinkMappingConfiguration->postProcessingVideo); + break; + case VirtualSink::StillsSink: + *hwSink = static_cast(_sinkMappingConfiguration->stills); + break; + case VirtualSink::ThumbnailSink: + *hwSink = static_cast(_sinkMappingConfiguration->thumbnail); + break; + case VirtualSink::RawSink: + *hwSink = static_cast(_sinkMappingConfiguration->raw); + break; + case VirtualSink::RawPdafSink: + *hwSink = static_cast(_sinkMappingConfiguration->rawPdaf); + break; + case VirtualSink::RawDolLongSink: + *hwSink = static_cast(_sinkMappingConfiguration->rawDolLong); + break; + case VirtualSink::RawCvSink: + *hwSink = static_cast(_sinkMappingConfiguration->rawCv); + break; + case VirtualSink::VideoIrSink: + *hwSink = static_cast(_sinkMappingConfiguration->videoIr); + break; + case VirtualSink::PreviewIrSink: + *hwSink = static_cast(_sinkMappingConfiguration->previewIr); + break; + default: + STATIC_GRAPH_LOG("Failed to get virtual sink mapping for virtual sink %d", + static_cast(virtualSink)); + return StaticGraphStatus::SG_ERROR; + } + + return StaticGraphStatus::SG_OK; +} + +GraphTopology::GraphTopology(GraphLink** links, int32_t numOfLinks, + VirtualSinkMapping* sinkMappingConfiguration) + : links(links), + numOfLinks(numOfLinks), + _sinkMappingConfiguration(sinkMappingConfiguration) {} + +StaticGraphStatus GraphTopology::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + // Default impl. No inner nodes in the sub-graph nodes. + (void)subGraphInnerNodeConfiguration; + return StaticGraphStatus::SG_OK; +}; + +InnerNodeOptionsFlags GraphTopology::GetInnerOptions( + SubGraphPublicInnerNodeConfiguration* publicInnerOptions) { + InnerNodeOptionsFlags res = None; + + if (publicInnerOptions) { + res |= no3A & (publicInnerOptions->no3A ? -1 : 0); + res |= noMp & (publicInnerOptions->noMp ? -1 : 0); + res |= noDp & (publicInnerOptions->noDp ? -1 : 0); + res |= noPdaf & (publicInnerOptions->noPdaf ? -1 : 0); + } + + return res; +} + +/* + * Outer Nodes + */ + +void OuterNode::Init(uint8_t nodeResourceId, NodeTypes nodeType, uint32_t kernelCount, + uint32_t operationMode, uint32_t streamId, uint8_t nodeNumberOfFragments) { + resourceId = nodeResourceId; + type = nodeType; + nodeKernels.kernelCount = kernelCount; + numberOfFragments = nodeNumberOfFragments; + if (kernelCount > 0) { + nodeKernels.kernelList = new StaticGraphPacRunKernel[kernelCount]; + for (uint32_t j = 0; j < kernelCount; j++) { + nodeKernels.kernelList[j].fragment_descs = nullptr; + } + } else { + nodeKernels.kernelList = nullptr; + } + nodeKernels.operationMode = operationMode; + nodeKernels.streamId = streamId; +} +OuterNode::~OuterNode() { + delete[] nodeKernels.kernelList; +} +void OuterNode::InitRunKernels( + uint16_t* kernelsUuids, uint64_t kernelsRcbBitmap[2], StaticGraphKernelRes* resolutionInfos, + uint64_t kernelsResolutionHistoryGroupBitmap[2], uint64_t fragmentDescriptorsGroupBitmap[2], + StaticGraphKernelRes* resolutionHistories, StaticGraphKernelBppConfiguration* bppInfos, + uint8_t* systemApisSizes, uint8_t* systemApiData, KernelFragments* fragmentDescriptors) { + uint8_t* systemApiDataCurrentPtr = systemApiData; + uint32_t currentResolutionHistoryIndex = 0; + uint32_t currentRcbIndex = 0; + int32_t currentFragmentsDescriptorIndex = -1; + + for (uint32_t i = 0; i < nodeKernels.kernelCount; ++i) { + auto& runKernel = nodeKernels.kernelList[i].run_kernel; + runKernel.kernel_uuid = kernelsUuids[i]; + runKernel.stream_id = nodeKernels.streamId; + runKernel.enable = 1; + runKernel.output_count = 1; + if (CHECK_BITMAP128_BIT(kernelsRcbBitmap, i)) { + // RCB + runKernel.resolution_info = &resolutionInfos[currentRcbIndex]; + currentRcbIndex++; + } else { + runKernel.resolution_info = nullptr; + } + + if (CHECK_BITMAP128_BIT(kernelsResolutionHistoryGroupBitmap, i)) { + // Next resolution history group + currentResolutionHistoryIndex++; + } + runKernel.resolution_history = &resolutionHistories[currentResolutionHistoryIndex]; + + runKernel.bpp_info.input_bpp = bppInfos[i].input_bpp; + runKernel.bpp_info.output_bpp = bppInfos[i].output_bpp; + + // system API + uint32_t systemApiSize = systemApisSizes[i]; + runKernel.system_api.size = systemApiSize; + runKernel.system_api.data = systemApiSize != 0 ? systemApiDataCurrentPtr : nullptr; + + if (systemApiDataCurrentPtr) { + systemApiDataCurrentPtr = systemApiDataCurrentPtr + systemApiSize; + } + + // Metadata + runKernel.metadata[0] = 0; + runKernel.metadata[1] = 0; + runKernel.metadata[2] = 0; + runKernel.metadata[3] = 0; + + // Init fragments information + if (CHECK_BITMAP128_BIT(fragmentDescriptorsGroupBitmap, i)) { + // New group + currentFragmentsDescriptorIndex++; + } + + nodeKernels.kernelList[i].fragment_descs = + &fragmentDescriptors[currentFragmentsDescriptorIndex].fragmentDescriptors[0]; + nodeKernels.kernelList[i].fragments_defined = (numberOfFragments > 0); + } +} + +void OuterNode::SetDisabledKernels(uint64_t disabledRunKernelsBitmap[2]) { + for (uint32_t i = 0; i < nodeKernels.kernelCount; ++i) { + // check the i'th bit in the bitmap + if (CHECK_BITMAP128_BIT(disabledRunKernelsBitmap, i)) { + nodeKernels.kernelList[i].run_kernel.enable = 2; // disabled + } + } +} + +uint8_t OuterNode::GetNumberOfFragments() { + return numberOfFragments; +} + +void IsysOuterNode::Init(IsysOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(2, NodeTypes::Isys, 1, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[1] = {11470 /*is_odr_a*/}; + uint64_t kernelsRcbBitmap[] = {0x1, 0x0}; // { is_odr_a[0] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x0, 0x0}; // {{is_odr_a}[0] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x1, 0x0}; // {{is_odr_a}[0] } + + uint8_t systemApisSizes[1] = {0 /*is_odr_a*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, nullptr, + selectedGraphConfiguration->fragmentConfigurations); + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerNoGmvNoTnrNoSapOuterNode::Init( + LbffBayerNoGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 34, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[34] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 14488 /*rgb_ir_2_0*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 28787 /*image_upscaler_1_1*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/, + 38544 /*odr_awb_std_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x3FDF80031, + 0x0}; // { ifd_pipe_1_4[0], rgb_ir_2_0[4], ifd_lsc_1_4[5], rgbs_grid_1_1[19], + // ccm_3a_2_0[20], fr_grid_1_0[21], b2i_ds_1_1[22], lbff_crop_espa_1_4[23], + // image_upscaler_1_1[24], odr_ofs_mp_1_4[26], b2i_ds_output_1_1[27], + // odr_ofs_dp_1_4[28], odr_awb_std_1_4[29], odr_awb_sat_1_4[30], + // aestatistics_2_1[31], odr_ae_1_4[32], odr_af_std_1_4[33] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x3F3800062, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgb_ir_2_0}[1], + // {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, + // gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, rgbs_grid_1_1, + // ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[3], {lbff_crop_espa_1_4}[4], + // {image_upscaler_1_1}[5], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[6], + // {odr_ofs_dp_1_4}[7], {odr_awb_std_1_4}[8], {odr_awb_sat_1_4}[9], + // {aestatistics_2_1}[10], {odr_ae_1_4}[11], {odr_af_std_1_4}[12] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x3FFF80073, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgb_ir_2_0}[2], + // {ifd_lsc_1_4}[3], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, + // gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[4], + // {rgbs_grid_1_1}[5], {ccm_3a_2_0}[6], {fr_grid_1_0}[7], {b2i_ds_1_1}[8], + // {lbff_crop_espa_1_4}[9], {image_upscaler_1_1}[10], {cas_1_1}[11], + // {odr_ofs_mp_1_4}[12], {b2i_ds_output_1_1}[13], {odr_ofs_dp_1_4}[14], + // {odr_awb_std_1_4}[15], {odr_awb_sat_1_4}[16], {aestatistics_2_1}[17], + // {odr_ae_1_4}[18], {odr_af_std_1_4}[19] } + + uint8_t systemApisSizes[34] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 0 /*rgb_ir_2_0*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*image_upscaler_1_1*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[9].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerWithGmvNoTnrNoSapOuterNode::Init( + LbffBayerWithGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 38, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[38] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 14488 /*rgb_ir_2_0*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 28787 /*image_upscaler_1_1*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/, + 38544 /*odr_awb_std_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 51073 /*ifd_gmv_1_4*/, + 40280 /*gmv_statistics_1_1*/, + 7416 /*odr_gmv_feature_1_4*/, + 41148 /*odr_gmv_match_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x3FFDF80031, + 0x0}; // { ifd_pipe_1_4[0], rgb_ir_2_0[4], ifd_lsc_1_4[5], rgbs_grid_1_1[19], + // ccm_3a_2_0[20], fr_grid_1_0[21], b2i_ds_1_1[22], lbff_crop_espa_1_4[23], + // image_upscaler_1_1[24], odr_ofs_mp_1_4[26], b2i_ds_output_1_1[27], + // odr_ofs_dp_1_4[28], odr_awb_std_1_4[29], odr_awb_sat_1_4[30], + // aestatistics_2_1[31], odr_ae_1_4[32], odr_af_std_1_4[33], ifd_gmv_1_4[34], + // gmv_statistics_1_1[35], odr_gmv_feature_1_4[36], odr_gmv_match_1_4[37] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x3FF3800062, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgb_ir_2_0}[1], + // {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, + // gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, rgbs_grid_1_1, + // ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[3], {lbff_crop_espa_1_4}[4], + // {image_upscaler_1_1}[5], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[6], + // {odr_ofs_dp_1_4}[7], {odr_awb_std_1_4}[8], {odr_awb_sat_1_4}[9], + // {aestatistics_2_1}[10], {odr_ae_1_4}[11], {odr_af_std_1_4}[12], {ifd_gmv_1_4}[13], + // {gmv_statistics_1_1}[14], {odr_gmv_feature_1_4}[15], {odr_gmv_match_1_4}[16] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x3FFFF80073, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgb_ir_2_0}[2], + // {ifd_lsc_1_4}[3], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, + // gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[4], + // {rgbs_grid_1_1}[5], {ccm_3a_2_0}[6], {fr_grid_1_0}[7], {b2i_ds_1_1}[8], + // {lbff_crop_espa_1_4}[9], {image_upscaler_1_1}[10], {cas_1_1}[11], + // {odr_ofs_mp_1_4}[12], {b2i_ds_output_1_1}[13], {odr_ofs_dp_1_4}[14], + // {odr_awb_std_1_4}[15], {odr_awb_sat_1_4}[16], {aestatistics_2_1}[17], + // {odr_ae_1_4}[18], {odr_af_std_1_4}[19], {ifd_gmv_1_4}[20], + // {gmv_statistics_1_1}[21], {odr_gmv_feature_1_4}[22], {odr_gmv_match_1_4}[23] } + + uint8_t systemApisSizes[38] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 0 /*rgb_ir_2_0*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*image_upscaler_1_1*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_gmv_1_4*/, + 20 /*gmv_statistics_1_1*/, + 220 /*odr_gmv_feature_1_4*/, + 220 /*odr_gmv_match_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[9].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void SwGdcOuterNode::Init(SwGdcOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(4, NodeTypes::Sw, 1, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[1] = {5637 /*gdc7_1*/}; + uint64_t kernelsRcbBitmap[] = {0x1, 0x0}; // { gdc7_1[0] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x0, 0x0}; // {{gdc7_1}[0] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x1, 0x0}; // {{gdc7_1}[0] } + + uint8_t systemApisSizes[1] = {0 /*gdc7_1*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, nullptr, + selectedGraphConfiguration->fragmentConfigurations); + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerNoGmvWithTnrNoSapOuterNode::Init( + LbffBayerNoGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 46, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[46] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 14488 /*rgb_ir_2_0*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 2495 /*tnr7_spatial_1_1*/, + 29996 /*tnr_scaler_lb_1_1*/, + 38544 /*odr_awb_std_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 23639 /*tnr7_ims_1_2*/, + 1502 /*tnr7_bc_1_2*/, + 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, + 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 20119 /*tnr7_blend_1_1*/, + 5215 /*odr_tnr_fp_yuvn_1_4*/, + 20623 /*tnr_scaler_fp_1_1*/, + 28787 /*image_upscaler_1_1*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/, + 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x3DD9FEF80031, + 0x0}; // { ifd_pipe_1_4[0], rgb_ir_2_0[4], ifd_lsc_1_4[5], rgbs_grid_1_1[19], + // ccm_3a_2_0[20], fr_grid_1_0[21], b2i_ds_1_1[22], lbff_crop_espa_1_4[23], + // tnr_scaler_lb_1_1[25], odr_awb_std_1_4[26], odr_awb_sat_1_4[27], + // aestatistics_2_1[28], odr_ae_1_4[29], odr_af_std_1_4[30], + // ifd_tnr_sp_bc_yuv4nm1_1_4[31], ifd_tnr_sp_bc_rs4nm1_1_4[32], + // odr_tnr_sp_bc_rs4n_1_4[35], ifd_tnr_fp_blend_yuvnm1_1_4[36], + // odr_tnr_fp_yuvn_1_4[38], tnr_scaler_fp_1_1[39], image_upscaler_1_1[40], + // odr_ofs_mp_1_4[42], b2i_ds_output_1_1[43], odr_ofs_dp_1_4[44], + // odr_tnr_scale_fp_yuv4n_1_4[45] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x3233FD800062, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgb_ir_2_0}[1], + // {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, + // gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, rgbs_grid_1_1, + // ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[3], {lbff_crop_espa_1_4}[4], + // {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[5], {odr_awb_std_1_4}[6], + // {odr_awb_sat_1_4}[7], {aestatistics_2_1}[8], {odr_ae_1_4}[9], + // {odr_af_std_1_4}[10], {ifd_tnr_sp_bc_yuv4nm1_1_4}[11], + // {ifd_tnr_sp_bc_rs4nm1_1_4}[12], {tnr7_ims_1_2, tnr7_bc_1_2, + // odr_tnr_sp_bc_rs4n_1_4}[13], {ifd_tnr_fp_blend_yuvnm1_1_4}[14], {tnr7_blend_1_1, + // odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[15], {cas_1_1, + // odr_ofs_mp_1_4, b2i_ds_output_1_1}[16], {odr_ofs_dp_1_4}[17], + // {odr_tnr_scale_fp_yuv4n_1_4}[18] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x3FFBFFF80073, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgb_ir_2_0}[2], + // {ifd_lsc_1_4}[3], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, + // gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[4], + // {rgbs_grid_1_1}[5], {ccm_3a_2_0}[6], {fr_grid_1_0}[7], {b2i_ds_1_1}[8], + // {lbff_crop_espa_1_4}[9], {tnr7_spatial_1_1}[10], {tnr_scaler_lb_1_1}[11], + // {odr_awb_std_1_4}[12], {odr_awb_sat_1_4}[13], {aestatistics_2_1}[14], + // {odr_ae_1_4}[15], {odr_af_std_1_4}[16], {ifd_tnr_sp_bc_yuv4nm1_1_4}[17], + // {ifd_tnr_sp_bc_rs4nm1_1_4}[18], {tnr7_ims_1_2, tnr7_bc_1_2}[19], + // {odr_tnr_sp_bc_rs4n_1_4}[20], {ifd_tnr_fp_blend_yuvnm1_1_4}[21], + // {tnr7_blend_1_1}[22], {odr_tnr_fp_yuvn_1_4}[23], {tnr_scaler_fp_1_1}[24], + // {image_upscaler_1_1}[25], {cas_1_1}[26], {odr_ofs_mp_1_4}[27], + // {b2i_ds_output_1_1}[28], {odr_ofs_dp_1_4}[29], {odr_tnr_scale_fp_yuv4n_1_4}[30] } + + uint8_t systemApisSizes[46] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 0 /*rgb_ir_2_0*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*tnr7_spatial_1_1*/, + 0 /*tnr_scaler_lb_1_1*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 0 /*tnr7_ims_1_2*/, + 5 /*tnr7_bc_1_2*/, + 220 /*odr_tnr_sp_bc_rs4n_1_4*/, + 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 5 /*tnr7_blend_1_1*/, + 220 /*odr_tnr_fp_yuvn_1_4*/, + 0 /*tnr_scaler_fp_1_1*/, + 0 /*image_upscaler_1_1*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/, + 220 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[9].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerWithGmvWithTnrNoSapOuterNode::Init( + LbffBayerWithGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 50, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[50] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 14488 /*rgb_ir_2_0*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 2495 /*tnr7_spatial_1_1*/, + 29996 /*tnr_scaler_lb_1_1*/, + 38544 /*odr_awb_std_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 51073 /*ifd_gmv_1_4*/, + 40280 /*gmv_statistics_1_1*/, + 7416 /*odr_gmv_feature_1_4*/, + 41148 /*odr_gmv_match_1_4*/, + 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 23639 /*tnr7_ims_1_2*/, + 1502 /*tnr7_bc_1_2*/, + 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, + 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 20119 /*tnr7_blend_1_1*/, + 5215 /*odr_tnr_fp_yuvn_1_4*/, + 20623 /*tnr_scaler_fp_1_1*/, + 28787 /*image_upscaler_1_1*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/, + 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x3DD9FFEF80031, + 0x0}; // { ifd_pipe_1_4[0], rgb_ir_2_0[4], ifd_lsc_1_4[5], rgbs_grid_1_1[19], + // ccm_3a_2_0[20], fr_grid_1_0[21], b2i_ds_1_1[22], lbff_crop_espa_1_4[23], + // tnr_scaler_lb_1_1[25], odr_awb_std_1_4[26], odr_awb_sat_1_4[27], + // aestatistics_2_1[28], odr_ae_1_4[29], odr_af_std_1_4[30], ifd_gmv_1_4[31], + // gmv_statistics_1_1[32], odr_gmv_feature_1_4[33], odr_gmv_match_1_4[34], + // ifd_tnr_sp_bc_yuv4nm1_1_4[35], ifd_tnr_sp_bc_rs4nm1_1_4[36], + // odr_tnr_sp_bc_rs4n_1_4[39], ifd_tnr_fp_blend_yuvnm1_1_4[40], + // odr_tnr_fp_yuvn_1_4[42], tnr_scaler_fp_1_1[43], image_upscaler_1_1[44], + // odr_ofs_mp_1_4[46], b2i_ds_output_1_1[47], odr_ofs_dp_1_4[48], + // odr_tnr_scale_fp_yuv4n_1_4[49] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x3233FFD800062, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgb_ir_2_0}[1], + // {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, + // gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, rgbs_grid_1_1, + // ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[3], {lbff_crop_espa_1_4}[4], + // {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[5], {odr_awb_std_1_4}[6], + // {odr_awb_sat_1_4}[7], {aestatistics_2_1}[8], {odr_ae_1_4}[9], + // {odr_af_std_1_4}[10], {ifd_gmv_1_4}[11], {gmv_statistics_1_1}[12], + // {odr_gmv_feature_1_4}[13], {odr_gmv_match_1_4}[14], + // {ifd_tnr_sp_bc_yuv4nm1_1_4}[15], {ifd_tnr_sp_bc_rs4nm1_1_4}[16], {tnr7_ims_1_2, + // tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[17], {ifd_tnr_fp_blend_yuvnm1_1_4}[18], + // {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[19], + // {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[20], {odr_ofs_dp_1_4}[21], + // {odr_tnr_scale_fp_yuv4n_1_4}[22] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x3FFBFFFF80073, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgb_ir_2_0}[2], + // {ifd_lsc_1_4}[3], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, + // gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[4], + // {rgbs_grid_1_1}[5], {ccm_3a_2_0}[6], {fr_grid_1_0}[7], {b2i_ds_1_1}[8], + // {lbff_crop_espa_1_4}[9], {tnr7_spatial_1_1}[10], {tnr_scaler_lb_1_1}[11], + // {odr_awb_std_1_4}[12], {odr_awb_sat_1_4}[13], {aestatistics_2_1}[14], + // {odr_ae_1_4}[15], {odr_af_std_1_4}[16], {ifd_gmv_1_4}[17], + // {gmv_statistics_1_1}[18], {odr_gmv_feature_1_4}[19], {odr_gmv_match_1_4}[20], + // {ifd_tnr_sp_bc_yuv4nm1_1_4}[21], {ifd_tnr_sp_bc_rs4nm1_1_4}[22], {tnr7_ims_1_2, + // tnr7_bc_1_2}[23], {odr_tnr_sp_bc_rs4n_1_4}[24], {ifd_tnr_fp_blend_yuvnm1_1_4}[25], + // {tnr7_blend_1_1}[26], {odr_tnr_fp_yuvn_1_4}[27], {tnr_scaler_fp_1_1}[28], + // {image_upscaler_1_1}[29], {cas_1_1}[30], {odr_ofs_mp_1_4}[31], + // {b2i_ds_output_1_1}[32], {odr_ofs_dp_1_4}[33], {odr_tnr_scale_fp_yuv4n_1_4}[34] } + + uint8_t systemApisSizes[50] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 0 /*rgb_ir_2_0*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*tnr7_spatial_1_1*/, + 0 /*tnr_scaler_lb_1_1*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_gmv_1_4*/, + 20 /*gmv_statistics_1_1*/, + 220 /*odr_gmv_feature_1_4*/, + 220 /*odr_gmv_match_1_4*/, + 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 0 /*tnr7_ims_1_2*/, + 5 /*tnr7_bc_1_2*/, + 220 /*odr_tnr_sp_bc_rs4n_1_4*/, + 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 5 /*tnr7_blend_1_1*/, + 220 /*odr_tnr_fp_yuvn_1_4*/, + 0 /*tnr_scaler_fp_1_1*/, + 0 /*image_upscaler_1_1*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/, + 220 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[9].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void SwNntmOuterNode::Init(SwNntmOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(6, NodeTypes::Sw, 1, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[1] = {46539 /*nntm_1_0*/}; + uint64_t kernelsRcbBitmap[] = {0x0, 0x0}; // { } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x0, 0x0}; // {{nntm_1_0}[0] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x1, 0x0}; // {{nntm_1_0}[0] } + + uint8_t systemApisSizes[1] = {5 /*nntm_1_0*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, nullptr, kernelsResolutionHistoryGroupBitmap, + kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // set default inner Node + setInnerNode(None); +} + +void SwScalerOuterNode::Init(SwScalerOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(5, NodeTypes::Sw, 1, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[1] = {19706 /*sw_scaler*/}; + uint64_t kernelsRcbBitmap[] = {0x1, 0x0}; // { sw_scaler[0] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x0, 0x0}; // {{sw_scaler}[0] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x1, 0x0}; // {{sw_scaler}[0] } + + uint8_t systemApisSizes[1] = {0 /*sw_scaler*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, nullptr, + selectedGraphConfiguration->fragmentConfigurations); + + // set default inner Node + setInnerNode(None); +} + +void IsysPdaf2OuterNode::Init(IsysPdaf2OuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(2, NodeTypes::Isys, 2, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[2] = {11470 /*is_odr_a*/, 55449 /*is_odr_b*/}; + uint64_t kernelsRcbBitmap[] = {0x3, 0x0}; // { is_odr_a[0], is_odr_b[1] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x2, 0x0}; // {{is_odr_a}[0], {is_odr_b}[1] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x3, + 0x0}; // {{is_odr_a}[0], {is_odr_b}[1] } + + uint8_t systemApisSizes[2] = {0 /*is_odr_a*/, 0 /*is_odr_b*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, nullptr, + selectedGraphConfiguration->fragmentConfigurations); + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf2NoGmvNoTnrNoSapOuterNode::Init( + LbffBayerPdaf2NoGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 38, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[38] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 14488 /*rgb_ir_2_0*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 28787 /*image_upscaler_1_1*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/, + 38544 /*odr_awb_std_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 22427 /*ifd_pdaf_1_4*/, + 43213 /*pext_1_0*/, + 44308 /*pafstatistics_1_2*/, + 26892 /*odr_pdaf_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x3FFDF80031, + 0x0}; // { ifd_pipe_1_4[0], rgb_ir_2_0[4], ifd_lsc_1_4[5], rgbs_grid_1_1[19], + // ccm_3a_2_0[20], fr_grid_1_0[21], b2i_ds_1_1[22], lbff_crop_espa_1_4[23], + // image_upscaler_1_1[24], odr_ofs_mp_1_4[26], b2i_ds_output_1_1[27], + // odr_ofs_dp_1_4[28], odr_awb_std_1_4[29], odr_awb_sat_1_4[30], + // aestatistics_2_1[31], odr_ae_1_4[32], odr_af_std_1_4[33], ifd_pdaf_1_4[34], + // pext_1_0[35], pafstatistics_1_2[36], odr_pdaf_1_4[37] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x3FF3800062, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgb_ir_2_0}[1], + // {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, + // gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, rgbs_grid_1_1, + // ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[3], {lbff_crop_espa_1_4}[4], + // {image_upscaler_1_1}[5], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[6], + // {odr_ofs_dp_1_4}[7], {odr_awb_std_1_4}[8], {odr_awb_sat_1_4}[9], + // {aestatistics_2_1}[10], {odr_ae_1_4}[11], {odr_af_std_1_4}[12], + // {ifd_pdaf_1_4}[13], {pext_1_0}[14], {pafstatistics_1_2}[15], {odr_pdaf_1_4}[16] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x3FFFF80073, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgb_ir_2_0}[2], + // {ifd_lsc_1_4}[3], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, + // gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[4], + // {rgbs_grid_1_1}[5], {ccm_3a_2_0}[6], {fr_grid_1_0}[7], {b2i_ds_1_1}[8], + // {lbff_crop_espa_1_4}[9], {image_upscaler_1_1}[10], {cas_1_1}[11], + // {odr_ofs_mp_1_4}[12], {b2i_ds_output_1_1}[13], {odr_ofs_dp_1_4}[14], + // {odr_awb_std_1_4}[15], {odr_awb_sat_1_4}[16], {aestatistics_2_1}[17], + // {odr_ae_1_4}[18], {odr_af_std_1_4}[19], {ifd_pdaf_1_4}[20], {pext_1_0}[21], + // {pafstatistics_1_2}[22], {odr_pdaf_1_4}[23] } + + uint8_t systemApisSizes[38] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 0 /*rgb_ir_2_0*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*image_upscaler_1_1*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_pdaf_1_4*/, + 24 /*pext_1_0*/, + 8 /*pafstatistics_1_2*/, + 220 /*odr_pdaf_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[9].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf2WithGmvNoTnrNoSapOuterNode::Init( + LbffBayerPdaf2WithGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 42, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[42] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 14488 /*rgb_ir_2_0*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 28787 /*image_upscaler_1_1*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/, + 38544 /*odr_awb_std_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 22427 /*ifd_pdaf_1_4*/, + 43213 /*pext_1_0*/, + 44308 /*pafstatistics_1_2*/, + 26892 /*odr_pdaf_1_4*/, + 51073 /*ifd_gmv_1_4*/, + 40280 /*gmv_statistics_1_1*/, + 7416 /*odr_gmv_feature_1_4*/, + 41148 /*odr_gmv_match_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x3FFFDF80031, + 0x0}; // { ifd_pipe_1_4[0], rgb_ir_2_0[4], ifd_lsc_1_4[5], rgbs_grid_1_1[19], + // ccm_3a_2_0[20], fr_grid_1_0[21], b2i_ds_1_1[22], lbff_crop_espa_1_4[23], + // image_upscaler_1_1[24], odr_ofs_mp_1_4[26], b2i_ds_output_1_1[27], + // odr_ofs_dp_1_4[28], odr_awb_std_1_4[29], odr_awb_sat_1_4[30], + // aestatistics_2_1[31], odr_ae_1_4[32], odr_af_std_1_4[33], ifd_pdaf_1_4[34], + // pext_1_0[35], pafstatistics_1_2[36], odr_pdaf_1_4[37], ifd_gmv_1_4[38], + // gmv_statistics_1_1[39], odr_gmv_feature_1_4[40], odr_gmv_match_1_4[41] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x3FFF3800062, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgb_ir_2_0}[1], + // {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, + // gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, rgbs_grid_1_1, + // ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[3], {lbff_crop_espa_1_4}[4], + // {image_upscaler_1_1}[5], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[6], + // {odr_ofs_dp_1_4}[7], {odr_awb_std_1_4}[8], {odr_awb_sat_1_4}[9], + // {aestatistics_2_1}[10], {odr_ae_1_4}[11], {odr_af_std_1_4}[12], + // {ifd_pdaf_1_4}[13], {pext_1_0}[14], {pafstatistics_1_2}[15], {odr_pdaf_1_4}[16], + // {ifd_gmv_1_4}[17], {gmv_statistics_1_1}[18], {odr_gmv_feature_1_4}[19], + // {odr_gmv_match_1_4}[20] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x3FFFFF80073, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgb_ir_2_0}[2], + // {ifd_lsc_1_4}[3], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, + // gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[4], + // {rgbs_grid_1_1}[5], {ccm_3a_2_0}[6], {fr_grid_1_0}[7], {b2i_ds_1_1}[8], + // {lbff_crop_espa_1_4}[9], {image_upscaler_1_1}[10], {cas_1_1}[11], + // {odr_ofs_mp_1_4}[12], {b2i_ds_output_1_1}[13], {odr_ofs_dp_1_4}[14], + // {odr_awb_std_1_4}[15], {odr_awb_sat_1_4}[16], {aestatistics_2_1}[17], + // {odr_ae_1_4}[18], {odr_af_std_1_4}[19], {ifd_pdaf_1_4}[20], {pext_1_0}[21], + // {pafstatistics_1_2}[22], {odr_pdaf_1_4}[23], {ifd_gmv_1_4}[24], + // {gmv_statistics_1_1}[25], {odr_gmv_feature_1_4}[26], {odr_gmv_match_1_4}[27] } + + uint8_t systemApisSizes[42] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 0 /*rgb_ir_2_0*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*image_upscaler_1_1*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_pdaf_1_4*/, + 24 /*pext_1_0*/, + 8 /*pafstatistics_1_2*/, + 220 /*odr_pdaf_1_4*/, + 220 /*ifd_gmv_1_4*/, + 20 /*gmv_statistics_1_1*/, + 220 /*odr_gmv_feature_1_4*/, + 220 /*odr_gmv_match_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[9].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf2NoGmvWithTnrNoSapOuterNode::Init( + LbffBayerPdaf2NoGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 50, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[50] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 14488 /*rgb_ir_2_0*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 2495 /*tnr7_spatial_1_1*/, + 29996 /*tnr_scaler_lb_1_1*/, + 38544 /*odr_awb_std_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 22427 /*ifd_pdaf_1_4*/, + 43213 /*pext_1_0*/, + 44308 /*pafstatistics_1_2*/, + 26892 /*odr_pdaf_1_4*/, + 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 23639 /*tnr7_ims_1_2*/, + 1502 /*tnr7_bc_1_2*/, + 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, + 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 20119 /*tnr7_blend_1_1*/, + 5215 /*odr_tnr_fp_yuvn_1_4*/, + 20623 /*tnr_scaler_fp_1_1*/, + 28787 /*image_upscaler_1_1*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/, + 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x3DD9FFEF80031, + 0x0}; // { ifd_pipe_1_4[0], rgb_ir_2_0[4], ifd_lsc_1_4[5], rgbs_grid_1_1[19], + // ccm_3a_2_0[20], fr_grid_1_0[21], b2i_ds_1_1[22], lbff_crop_espa_1_4[23], + // tnr_scaler_lb_1_1[25], odr_awb_std_1_4[26], odr_awb_sat_1_4[27], + // aestatistics_2_1[28], odr_ae_1_4[29], odr_af_std_1_4[30], ifd_pdaf_1_4[31], + // pext_1_0[32], pafstatistics_1_2[33], odr_pdaf_1_4[34], + // ifd_tnr_sp_bc_yuv4nm1_1_4[35], ifd_tnr_sp_bc_rs4nm1_1_4[36], + // odr_tnr_sp_bc_rs4n_1_4[39], ifd_tnr_fp_blend_yuvnm1_1_4[40], + // odr_tnr_fp_yuvn_1_4[42], tnr_scaler_fp_1_1[43], image_upscaler_1_1[44], + // odr_ofs_mp_1_4[46], b2i_ds_output_1_1[47], odr_ofs_dp_1_4[48], + // odr_tnr_scale_fp_yuv4n_1_4[49] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x3233FFD800062, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgb_ir_2_0}[1], + // {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, + // gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, rgbs_grid_1_1, + // ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[3], {lbff_crop_espa_1_4}[4], + // {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[5], {odr_awb_std_1_4}[6], + // {odr_awb_sat_1_4}[7], {aestatistics_2_1}[8], {odr_ae_1_4}[9], + // {odr_af_std_1_4}[10], {ifd_pdaf_1_4}[11], {pext_1_0}[12], {pafstatistics_1_2}[13], + // {odr_pdaf_1_4}[14], {ifd_tnr_sp_bc_yuv4nm1_1_4}[15], + // {ifd_tnr_sp_bc_rs4nm1_1_4}[16], {tnr7_ims_1_2, tnr7_bc_1_2, + // odr_tnr_sp_bc_rs4n_1_4}[17], {ifd_tnr_fp_blend_yuvnm1_1_4}[18], {tnr7_blend_1_1, + // odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[19], {cas_1_1, + // odr_ofs_mp_1_4, b2i_ds_output_1_1}[20], {odr_ofs_dp_1_4}[21], + // {odr_tnr_scale_fp_yuv4n_1_4}[22] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x3FFBFFFF80073, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgb_ir_2_0}[2], + // {ifd_lsc_1_4}[3], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, + // gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[4], + // {rgbs_grid_1_1}[5], {ccm_3a_2_0}[6], {fr_grid_1_0}[7], {b2i_ds_1_1}[8], + // {lbff_crop_espa_1_4}[9], {tnr7_spatial_1_1}[10], {tnr_scaler_lb_1_1}[11], + // {odr_awb_std_1_4}[12], {odr_awb_sat_1_4}[13], {aestatistics_2_1}[14], + // {odr_ae_1_4}[15], {odr_af_std_1_4}[16], {ifd_pdaf_1_4}[17], {pext_1_0}[18], + // {pafstatistics_1_2}[19], {odr_pdaf_1_4}[20], {ifd_tnr_sp_bc_yuv4nm1_1_4}[21], + // {ifd_tnr_sp_bc_rs4nm1_1_4}[22], {tnr7_ims_1_2, tnr7_bc_1_2}[23], + // {odr_tnr_sp_bc_rs4n_1_4}[24], {ifd_tnr_fp_blend_yuvnm1_1_4}[25], + // {tnr7_blend_1_1}[26], {odr_tnr_fp_yuvn_1_4}[27], {tnr_scaler_fp_1_1}[28], + // {image_upscaler_1_1}[29], {cas_1_1}[30], {odr_ofs_mp_1_4}[31], + // {b2i_ds_output_1_1}[32], {odr_ofs_dp_1_4}[33], {odr_tnr_scale_fp_yuv4n_1_4}[34] } + + uint8_t systemApisSizes[50] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 0 /*rgb_ir_2_0*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*tnr7_spatial_1_1*/, + 0 /*tnr_scaler_lb_1_1*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_pdaf_1_4*/, + 24 /*pext_1_0*/, + 8 /*pafstatistics_1_2*/, + 220 /*odr_pdaf_1_4*/, + 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 0 /*tnr7_ims_1_2*/, + 5 /*tnr7_bc_1_2*/, + 220 /*odr_tnr_sp_bc_rs4n_1_4*/, + 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 5 /*tnr7_blend_1_1*/, + 220 /*odr_tnr_fp_yuvn_1_4*/, + 0 /*tnr_scaler_fp_1_1*/, + 0 /*image_upscaler_1_1*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/, + 220 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[9].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf2WithGmvWithTnrNoSapOuterNode::Init( + LbffBayerPdaf2WithGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 54, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[54] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 14488 /*rgb_ir_2_0*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 2495 /*tnr7_spatial_1_1*/, + 29996 /*tnr_scaler_lb_1_1*/, + 38544 /*odr_awb_std_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 22427 /*ifd_pdaf_1_4*/, + 43213 /*pext_1_0*/, + 44308 /*pafstatistics_1_2*/, + 26892 /*odr_pdaf_1_4*/, + 51073 /*ifd_gmv_1_4*/, + 40280 /*gmv_statistics_1_1*/, + 7416 /*odr_gmv_feature_1_4*/, + 41148 /*odr_gmv_match_1_4*/, + 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 23639 /*tnr7_ims_1_2*/, + 1502 /*tnr7_bc_1_2*/, + 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, + 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 20119 /*tnr7_blend_1_1*/, + 5215 /*odr_tnr_fp_yuvn_1_4*/, + 20623 /*tnr_scaler_fp_1_1*/, + 28787 /*image_upscaler_1_1*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/, + 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x3DD9FFFEF80031, + 0x0}; // { ifd_pipe_1_4[0], rgb_ir_2_0[4], ifd_lsc_1_4[5], rgbs_grid_1_1[19], + // ccm_3a_2_0[20], fr_grid_1_0[21], b2i_ds_1_1[22], lbff_crop_espa_1_4[23], + // tnr_scaler_lb_1_1[25], odr_awb_std_1_4[26], odr_awb_sat_1_4[27], + // aestatistics_2_1[28], odr_ae_1_4[29], odr_af_std_1_4[30], ifd_pdaf_1_4[31], + // pext_1_0[32], pafstatistics_1_2[33], odr_pdaf_1_4[34], ifd_gmv_1_4[35], + // gmv_statistics_1_1[36], odr_gmv_feature_1_4[37], odr_gmv_match_1_4[38], + // ifd_tnr_sp_bc_yuv4nm1_1_4[39], ifd_tnr_sp_bc_rs4nm1_1_4[40], + // odr_tnr_sp_bc_rs4n_1_4[43], ifd_tnr_fp_blend_yuvnm1_1_4[44], + // odr_tnr_fp_yuvn_1_4[46], tnr_scaler_fp_1_1[47], image_upscaler_1_1[48], + // odr_ofs_mp_1_4[50], b2i_ds_output_1_1[51], odr_ofs_dp_1_4[52], + // odr_tnr_scale_fp_yuv4n_1_4[53] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x3233FFFD800062, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgb_ir_2_0}[1], + // {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, + // gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, rgbs_grid_1_1, + // ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[3], {lbff_crop_espa_1_4}[4], + // {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[5], {odr_awb_std_1_4}[6], + // {odr_awb_sat_1_4}[7], {aestatistics_2_1}[8], {odr_ae_1_4}[9], + // {odr_af_std_1_4}[10], {ifd_pdaf_1_4}[11], {pext_1_0}[12], {pafstatistics_1_2}[13], + // {odr_pdaf_1_4}[14], {ifd_gmv_1_4}[15], {gmv_statistics_1_1}[16], + // {odr_gmv_feature_1_4}[17], {odr_gmv_match_1_4}[18], + // {ifd_tnr_sp_bc_yuv4nm1_1_4}[19], {ifd_tnr_sp_bc_rs4nm1_1_4}[20], {tnr7_ims_1_2, + // tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[21], {ifd_tnr_fp_blend_yuvnm1_1_4}[22], + // {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[23], + // {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[24], {odr_ofs_dp_1_4}[25], + // {odr_tnr_scale_fp_yuv4n_1_4}[26] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x3FFBFFFFF80073, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgb_ir_2_0}[2], + // {ifd_lsc_1_4}[3], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, + // gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[4], + // {rgbs_grid_1_1}[5], {ccm_3a_2_0}[6], {fr_grid_1_0}[7], {b2i_ds_1_1}[8], + // {lbff_crop_espa_1_4}[9], {tnr7_spatial_1_1}[10], {tnr_scaler_lb_1_1}[11], + // {odr_awb_std_1_4}[12], {odr_awb_sat_1_4}[13], {aestatistics_2_1}[14], + // {odr_ae_1_4}[15], {odr_af_std_1_4}[16], {ifd_pdaf_1_4}[17], {pext_1_0}[18], + // {pafstatistics_1_2}[19], {odr_pdaf_1_4}[20], {ifd_gmv_1_4}[21], + // {gmv_statistics_1_1}[22], {odr_gmv_feature_1_4}[23], {odr_gmv_match_1_4}[24], + // {ifd_tnr_sp_bc_yuv4nm1_1_4}[25], {ifd_tnr_sp_bc_rs4nm1_1_4}[26], {tnr7_ims_1_2, + // tnr7_bc_1_2}[27], {odr_tnr_sp_bc_rs4n_1_4}[28], {ifd_tnr_fp_blend_yuvnm1_1_4}[29], + // {tnr7_blend_1_1}[30], {odr_tnr_fp_yuvn_1_4}[31], {tnr_scaler_fp_1_1}[32], + // {image_upscaler_1_1}[33], {cas_1_1}[34], {odr_ofs_mp_1_4}[35], + // {b2i_ds_output_1_1}[36], {odr_ofs_dp_1_4}[37], {odr_tnr_scale_fp_yuv4n_1_4}[38] } + + uint8_t systemApisSizes[54] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 0 /*rgb_ir_2_0*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*tnr7_spatial_1_1*/, + 0 /*tnr_scaler_lb_1_1*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_pdaf_1_4*/, + 24 /*pext_1_0*/, + 8 /*pafstatistics_1_2*/, + 220 /*odr_pdaf_1_4*/, + 220 /*ifd_gmv_1_4*/, + 20 /*gmv_statistics_1_1*/, + 220 /*odr_gmv_feature_1_4*/, + 220 /*odr_gmv_match_1_4*/, + 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 0 /*tnr7_ims_1_2*/, + 5 /*tnr7_bc_1_2*/, + 220 /*odr_tnr_sp_bc_rs4n_1_4*/, + 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 5 /*tnr7_blend_1_1*/, + 220 /*odr_tnr_fp_yuvn_1_4*/, + 0 /*tnr_scaler_fp_1_1*/, + 0 /*image_upscaler_1_1*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/, + 220 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[9].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf3NoGmvNoTnrNoSapOuterNode::Init( + LbffBayerPdaf3NoGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 37, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[37] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 43213 /*pext_1_0*/, + 14488 /*rgb_ir_2_0*/, + 44308 /*pafstatistics_1_2*/, + 26892 /*odr_pdaf_1_4*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 28787 /*image_upscaler_1_1*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/, + 38544 /*odr_awb_std_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x1FEFC001F1, 0x0}; // { ifd_pipe_1_4[0], pext_1_0[4], rgb_ir_2_0[5], pafstatistics_1_2[6], + // odr_pdaf_1_4[7], ifd_lsc_1_4[8], rgbs_grid_1_1[22], ccm_3a_2_0[23], + // fr_grid_1_0[24], b2i_ds_1_1[25], lbff_crop_espa_1_4[26], + // image_upscaler_1_1[27], odr_ofs_mp_1_4[29], b2i_ds_output_1_1[30], + // odr_ofs_dp_1_4[31], odr_awb_std_1_4[32], odr_awb_sat_1_4[33], + // aestatistics_2_1[34], odr_ae_1_4[35], odr_af_std_1_4[36] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x1F9C0003C2, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, pext_1_0, rgb_ir_2_0}[1], + // {pafstatistics_1_2}[2], {odr_pdaf_1_4}[3], {ifd_lsc_1_4}[4], {lsc_1_2, gd_2_2, + // wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, + // acm_1_2, gammatm_v4, csc_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0, + // b2i_ds_1_1}[5], {lbff_crop_espa_1_4}[6], {image_upscaler_1_1}[7], {cas_1_1, + // odr_ofs_mp_1_4, b2i_ds_output_1_1}[8], {odr_ofs_dp_1_4}[9], {odr_awb_std_1_4}[10], + // {odr_awb_sat_1_4}[11], {aestatistics_2_1}[12], {odr_ae_1_4}[13], + // {odr_af_std_1_4}[14] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x1FFFC003F3, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {pext_1_0}[2], + // {rgb_ir_2_0}[3], {pafstatistics_1_2}[4], {odr_pdaf_1_4}[5], {ifd_lsc_1_4}[6], + // {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, + // vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[7], {rgbs_grid_1_1}[8], + // {ccm_3a_2_0}[9], {fr_grid_1_0}[10], {b2i_ds_1_1}[11], {lbff_crop_espa_1_4}[12], + // {image_upscaler_1_1}[13], {cas_1_1}[14], {odr_ofs_mp_1_4}[15], + // {b2i_ds_output_1_1}[16], {odr_ofs_dp_1_4}[17], {odr_awb_std_1_4}[18], + // {odr_awb_sat_1_4}[19], {aestatistics_2_1}[20], {odr_ae_1_4}[21], + // {odr_af_std_1_4}[22] } + + uint8_t systemApisSizes[37] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 24 /*pext_1_0*/, + 0 /*rgb_ir_2_0*/, + 8 /*pafstatistics_1_2*/, + 220 /*odr_pdaf_1_4*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*image_upscaler_1_1*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[12].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf3WithGmvNoTnrNoSapOuterNode::Init( + LbffBayerPdaf3WithGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 41, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[41] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 43213 /*pext_1_0*/, + 14488 /*rgb_ir_2_0*/, + 44308 /*pafstatistics_1_2*/, + 26892 /*odr_pdaf_1_4*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 28787 /*image_upscaler_1_1*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/, + 38544 /*odr_awb_std_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 51073 /*ifd_gmv_1_4*/, + 40280 /*gmv_statistics_1_1*/, + 7416 /*odr_gmv_feature_1_4*/, + 41148 /*odr_gmv_match_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x1FFEFC001F1, + 0x0}; // { ifd_pipe_1_4[0], pext_1_0[4], rgb_ir_2_0[5], pafstatistics_1_2[6], + // odr_pdaf_1_4[7], ifd_lsc_1_4[8], rgbs_grid_1_1[22], ccm_3a_2_0[23], + // fr_grid_1_0[24], b2i_ds_1_1[25], lbff_crop_espa_1_4[26], image_upscaler_1_1[27], + // odr_ofs_mp_1_4[29], b2i_ds_output_1_1[30], odr_ofs_dp_1_4[31], + // odr_awb_std_1_4[32], odr_awb_sat_1_4[33], aestatistics_2_1[34], odr_ae_1_4[35], + // odr_af_std_1_4[36], ifd_gmv_1_4[37], gmv_statistics_1_1[38], + // odr_gmv_feature_1_4[39], odr_gmv_match_1_4[40] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x1FF9C0003C2, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, pext_1_0, rgb_ir_2_0}[1], + // {pafstatistics_1_2}[2], {odr_pdaf_1_4}[3], {ifd_lsc_1_4}[4], {lsc_1_2, gd_2_2, + // wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, + // acm_1_2, gammatm_v4, csc_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0, + // b2i_ds_1_1}[5], {lbff_crop_espa_1_4}[6], {image_upscaler_1_1}[7], {cas_1_1, + // odr_ofs_mp_1_4, b2i_ds_output_1_1}[8], {odr_ofs_dp_1_4}[9], {odr_awb_std_1_4}[10], + // {odr_awb_sat_1_4}[11], {aestatistics_2_1}[12], {odr_ae_1_4}[13], + // {odr_af_std_1_4}[14], {ifd_gmv_1_4}[15], {gmv_statistics_1_1}[16], + // {odr_gmv_feature_1_4}[17], {odr_gmv_match_1_4}[18] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x1FFFFC003F3, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {pext_1_0}[2], + // {rgb_ir_2_0}[3], {pafstatistics_1_2}[4], {odr_pdaf_1_4}[5], {ifd_lsc_1_4}[6], + // {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, + // vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[7], {rgbs_grid_1_1}[8], + // {ccm_3a_2_0}[9], {fr_grid_1_0}[10], {b2i_ds_1_1}[11], {lbff_crop_espa_1_4}[12], + // {image_upscaler_1_1}[13], {cas_1_1}[14], {odr_ofs_mp_1_4}[15], + // {b2i_ds_output_1_1}[16], {odr_ofs_dp_1_4}[17], {odr_awb_std_1_4}[18], + // {odr_awb_sat_1_4}[19], {aestatistics_2_1}[20], {odr_ae_1_4}[21], + // {odr_af_std_1_4}[22], {ifd_gmv_1_4}[23], {gmv_statistics_1_1}[24], + // {odr_gmv_feature_1_4}[25], {odr_gmv_match_1_4}[26] } + + uint8_t systemApisSizes[41] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 24 /*pext_1_0*/, + 0 /*rgb_ir_2_0*/, + 8 /*pafstatistics_1_2*/, + 220 /*odr_pdaf_1_4*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*image_upscaler_1_1*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_gmv_1_4*/, + 20 /*gmv_statistics_1_1*/, + 220 /*odr_gmv_feature_1_4*/, + 220 /*odr_gmv_match_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[12].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf3NoGmvWithTnrNoSapOuterNode::Init( + LbffBayerPdaf3NoGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 49, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[49] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 43213 /*pext_1_0*/, + 14488 /*rgb_ir_2_0*/, + 44308 /*pafstatistics_1_2*/, + 26892 /*odr_pdaf_1_4*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 2495 /*tnr7_spatial_1_1*/, + 29996 /*tnr_scaler_lb_1_1*/, + 38544 /*odr_awb_std_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 23639 /*tnr7_ims_1_2*/, + 1502 /*tnr7_bc_1_2*/, + 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, + 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 20119 /*tnr7_blend_1_1*/, + 5215 /*odr_tnr_fp_yuvn_1_4*/, + 20623 /*tnr_scaler_fp_1_1*/, + 28787 /*image_upscaler_1_1*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/, + 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x1EECFF7C001F1, + 0x0}; // { ifd_pipe_1_4[0], pext_1_0[4], rgb_ir_2_0[5], pafstatistics_1_2[6], + // odr_pdaf_1_4[7], ifd_lsc_1_4[8], rgbs_grid_1_1[22], ccm_3a_2_0[23], + // fr_grid_1_0[24], b2i_ds_1_1[25], lbff_crop_espa_1_4[26], tnr_scaler_lb_1_1[28], + // odr_awb_std_1_4[29], odr_awb_sat_1_4[30], aestatistics_2_1[31], odr_ae_1_4[32], + // odr_af_std_1_4[33], ifd_tnr_sp_bc_yuv4nm1_1_4[34], ifd_tnr_sp_bc_rs4nm1_1_4[35], + // odr_tnr_sp_bc_rs4n_1_4[38], ifd_tnr_fp_blend_yuvnm1_1_4[39], + // odr_tnr_fp_yuvn_1_4[41], tnr_scaler_fp_1_1[42], image_upscaler_1_1[43], + // odr_ofs_mp_1_4[45], b2i_ds_output_1_1[46], odr_ofs_dp_1_4[47], + // odr_tnr_scale_fp_yuv4n_1_4[48] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x1919FEC0003C2, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, pext_1_0, rgb_ir_2_0}[1], + // {pafstatistics_1_2}[2], {odr_pdaf_1_4}[3], {ifd_lsc_1_4}[4], {lsc_1_2, gd_2_2, + // wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, + // acm_1_2, gammatm_v4, csc_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0, + // b2i_ds_1_1}[5], {lbff_crop_espa_1_4}[6], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[7], + // {odr_awb_std_1_4}[8], {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], + // {odr_ae_1_4}[11], {odr_af_std_1_4}[12], {ifd_tnr_sp_bc_yuv4nm1_1_4}[13], + // {ifd_tnr_sp_bc_rs4nm1_1_4}[14], {tnr7_ims_1_2, tnr7_bc_1_2, + // odr_tnr_sp_bc_rs4n_1_4}[15], {ifd_tnr_fp_blend_yuvnm1_1_4}[16], {tnr7_blend_1_1, + // odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[17], {cas_1_1, + // odr_ofs_mp_1_4, b2i_ds_output_1_1}[18], {odr_ofs_dp_1_4}[19], + // {odr_tnr_scale_fp_yuv4n_1_4}[20] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x1FFDFFFC003F3, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {pext_1_0}[2], + // {rgb_ir_2_0}[3], {pafstatistics_1_2}[4], {odr_pdaf_1_4}[5], {ifd_lsc_1_4}[6], + // {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, + // vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[7], {rgbs_grid_1_1}[8], + // {ccm_3a_2_0}[9], {fr_grid_1_0}[10], {b2i_ds_1_1}[11], {lbff_crop_espa_1_4}[12], + // {tnr7_spatial_1_1}[13], {tnr_scaler_lb_1_1}[14], {odr_awb_std_1_4}[15], + // {odr_awb_sat_1_4}[16], {aestatistics_2_1}[17], {odr_ae_1_4}[18], + // {odr_af_std_1_4}[19], {ifd_tnr_sp_bc_yuv4nm1_1_4}[20], + // {ifd_tnr_sp_bc_rs4nm1_1_4}[21], {tnr7_ims_1_2, tnr7_bc_1_2}[22], + // {odr_tnr_sp_bc_rs4n_1_4}[23], {ifd_tnr_fp_blend_yuvnm1_1_4}[24], + // {tnr7_blend_1_1}[25], {odr_tnr_fp_yuvn_1_4}[26], {tnr_scaler_fp_1_1}[27], + // {image_upscaler_1_1}[28], {cas_1_1}[29], {odr_ofs_mp_1_4}[30], + // {b2i_ds_output_1_1}[31], {odr_ofs_dp_1_4}[32], {odr_tnr_scale_fp_yuv4n_1_4}[33] } + + uint8_t systemApisSizes[49] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 24 /*pext_1_0*/, + 0 /*rgb_ir_2_0*/, + 8 /*pafstatistics_1_2*/, + 220 /*odr_pdaf_1_4*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*tnr7_spatial_1_1*/, + 0 /*tnr_scaler_lb_1_1*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 0 /*tnr7_ims_1_2*/, + 5 /*tnr7_bc_1_2*/, + 220 /*odr_tnr_sp_bc_rs4n_1_4*/, + 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 5 /*tnr7_blend_1_1*/, + 220 /*odr_tnr_fp_yuvn_1_4*/, + 0 /*tnr_scaler_fp_1_1*/, + 0 /*image_upscaler_1_1*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/, + 220 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[12].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf3WithGmvWithTnrNoSapOuterNode::Init( + LbffBayerPdaf3WithGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 53, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[53] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 43213 /*pext_1_0*/, + 14488 /*rgb_ir_2_0*/, + 44308 /*pafstatistics_1_2*/, + 26892 /*odr_pdaf_1_4*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 2495 /*tnr7_spatial_1_1*/, + 29996 /*tnr_scaler_lb_1_1*/, + 38544 /*odr_awb_std_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 51073 /*ifd_gmv_1_4*/, + 40280 /*gmv_statistics_1_1*/, + 7416 /*odr_gmv_feature_1_4*/, + 41148 /*odr_gmv_match_1_4*/, + 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 23639 /*tnr7_ims_1_2*/, + 1502 /*tnr7_bc_1_2*/, + 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, + 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 20119 /*tnr7_blend_1_1*/, + 5215 /*odr_tnr_fp_yuvn_1_4*/, + 20623 /*tnr_scaler_fp_1_1*/, + 28787 /*image_upscaler_1_1*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/, + 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x1EECFFF7C001F1, + 0x0}; // { ifd_pipe_1_4[0], pext_1_0[4], rgb_ir_2_0[5], pafstatistics_1_2[6], + // odr_pdaf_1_4[7], ifd_lsc_1_4[8], rgbs_grid_1_1[22], ccm_3a_2_0[23], + // fr_grid_1_0[24], b2i_ds_1_1[25], lbff_crop_espa_1_4[26], tnr_scaler_lb_1_1[28], + // odr_awb_std_1_4[29], odr_awb_sat_1_4[30], aestatistics_2_1[31], odr_ae_1_4[32], + // odr_af_std_1_4[33], ifd_gmv_1_4[34], gmv_statistics_1_1[35], + // odr_gmv_feature_1_4[36], odr_gmv_match_1_4[37], ifd_tnr_sp_bc_yuv4nm1_1_4[38], + // ifd_tnr_sp_bc_rs4nm1_1_4[39], odr_tnr_sp_bc_rs4n_1_4[42], + // ifd_tnr_fp_blend_yuvnm1_1_4[43], odr_tnr_fp_yuvn_1_4[45], tnr_scaler_fp_1_1[46], + // image_upscaler_1_1[47], odr_ofs_mp_1_4[49], b2i_ds_output_1_1[50], + // odr_ofs_dp_1_4[51], odr_tnr_scale_fp_yuv4n_1_4[52] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x1919FFEC0003C2, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, pext_1_0, rgb_ir_2_0}[1], + // {pafstatistics_1_2}[2], {odr_pdaf_1_4}[3], {ifd_lsc_1_4}[4], {lsc_1_2, gd_2_2, + // wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, + // acm_1_2, gammatm_v4, csc_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0, + // b2i_ds_1_1}[5], {lbff_crop_espa_1_4}[6], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[7], + // {odr_awb_std_1_4}[8], {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], + // {odr_ae_1_4}[11], {odr_af_std_1_4}[12], {ifd_gmv_1_4}[13], + // {gmv_statistics_1_1}[14], {odr_gmv_feature_1_4}[15], {odr_gmv_match_1_4}[16], + // {ifd_tnr_sp_bc_yuv4nm1_1_4}[17], {ifd_tnr_sp_bc_rs4nm1_1_4}[18], {tnr7_ims_1_2, + // tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[19], {ifd_tnr_fp_blend_yuvnm1_1_4}[20], + // {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[21], + // {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[22], {odr_ofs_dp_1_4}[23], + // {odr_tnr_scale_fp_yuv4n_1_4}[24] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x1FFDFFFFC003F3, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {pext_1_0}[2], + // {rgb_ir_2_0}[3], {pafstatistics_1_2}[4], {odr_pdaf_1_4}[5], {ifd_lsc_1_4}[6], + // {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, + // vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[7], {rgbs_grid_1_1}[8], + // {ccm_3a_2_0}[9], {fr_grid_1_0}[10], {b2i_ds_1_1}[11], {lbff_crop_espa_1_4}[12], + // {tnr7_spatial_1_1}[13], {tnr_scaler_lb_1_1}[14], {odr_awb_std_1_4}[15], + // {odr_awb_sat_1_4}[16], {aestatistics_2_1}[17], {odr_ae_1_4}[18], + // {odr_af_std_1_4}[19], {ifd_gmv_1_4}[20], {gmv_statistics_1_1}[21], + // {odr_gmv_feature_1_4}[22], {odr_gmv_match_1_4}[23], + // {ifd_tnr_sp_bc_yuv4nm1_1_4}[24], {ifd_tnr_sp_bc_rs4nm1_1_4}[25], {tnr7_ims_1_2, + // tnr7_bc_1_2}[26], {odr_tnr_sp_bc_rs4n_1_4}[27], {ifd_tnr_fp_blend_yuvnm1_1_4}[28], + // {tnr7_blend_1_1}[29], {odr_tnr_fp_yuvn_1_4}[30], {tnr_scaler_fp_1_1}[31], + // {image_upscaler_1_1}[32], {cas_1_1}[33], {odr_ofs_mp_1_4}[34], + // {b2i_ds_output_1_1}[35], {odr_ofs_dp_1_4}[36], {odr_tnr_scale_fp_yuv4n_1_4}[37] } + + uint8_t systemApisSizes[53] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 24 /*pext_1_0*/, + 0 /*rgb_ir_2_0*/, + 8 /*pafstatistics_1_2*/, + 220 /*odr_pdaf_1_4*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*tnr7_spatial_1_1*/, + 0 /*tnr_scaler_lb_1_1*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_gmv_1_4*/, + 20 /*gmv_statistics_1_1*/, + 220 /*odr_gmv_feature_1_4*/, + 220 /*odr_gmv_match_1_4*/, + 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 0 /*tnr7_ims_1_2*/, + 5 /*tnr7_bc_1_2*/, + 220 /*odr_tnr_sp_bc_rs4n_1_4*/, + 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 5 /*tnr7_blend_1_1*/, + 220 /*odr_tnr_fp_yuvn_1_4*/, + 0 /*tnr_scaler_fp_1_1*/, + 0 /*image_upscaler_1_1*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/, + 220 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[12].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void IsysDolOuterNode::Init(IsysDolOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(2, NodeTypes::Isys, 2, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[2] = {11470 /*is_odr_a*/, 50407 /*is_odr_c*/}; + uint64_t kernelsRcbBitmap[] = {0x3, 0x0}; // { is_odr_a[0], is_odr_c[1] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = {0x2, 0x0}; // {{is_odr_a}[0], {is_odr_c}[1] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = {0x3, + 0x0}; // {{is_odr_a}[0], {is_odr_c}[1] } + + uint8_t systemApisSizes[2] = {0 /*is_odr_a*/, 0 /*is_odr_c*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, nullptr, + selectedGraphConfiguration->fragmentConfigurations); + + // set default inner Node + setInnerNode(None); +} + +void LbffDol2InputsNoGmvNoTnrNoSapOuterNode::Init( + LbffDol2InputsNoGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 37, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[37] = {52446 /*ifd_pipe_1_4*/, + 24678 /*ifd_pipe_long_1_4*/, + 54871 /*dol_lite_1_2*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 14488 /*rgb_ir_2_0*/, + 38544 /*odr_awb_std_1_4*/, + 53430 /*odr_awb_sve_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 26958 /*fr_grid_1_0*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 28787 /*image_upscaler_1_1*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/, + 59136 /*odr_af_std_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x1EF0007FC3, 0x0}; // { ifd_pipe_1_4[0], ifd_pipe_long_1_4[1], rgbs_grid_1_1[6], + // ccm_3a_2_0[7], rgb_ir_2_0[8], odr_awb_std_1_4[9], + // odr_awb_sve_1_4[10], odr_awb_sat_1_4[11], aestatistics_2_1[12], + // odr_ae_1_4[13], ifd_lsc_1_4[14], fr_grid_1_0[28], b2i_ds_1_1[29], + // lbff_crop_espa_1_4[30], image_upscaler_1_1[31], odr_ofs_mp_1_4[33], + // b2i_ds_output_1_1[34], odr_ofs_dp_1_4[35], odr_af_std_1_4[36] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x19C000FE06, + 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {dol_lite_1_2, bxt_blc, + // linearization2_0, dpc_2_2, rgbs_grid_1_1, ccm_3a_2_0, rgb_ir_2_0}[2], + // {odr_awb_std_1_4}[3], {odr_awb_sve_1_4}[4], {odr_awb_sat_1_4}[5], + // {aestatistics_2_1}[6], {odr_ae_1_4}[7], {ifd_lsc_1_4}[8], {lsc_1_2, gd_2_2, + // wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, + // acm_1_2, gammatm_v4, csc_1_1, fr_grid_1_0, b2i_ds_1_1}[9], + // {lbff_crop_espa_1_4}[10], {image_upscaler_1_1}[11], {cas_1_1, odr_ofs_mp_1_4, + // b2i_ds_output_1_1}[12], {odr_ofs_dp_1_4}[13], {odr_af_std_1_4}[14] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x1FF000FFC7, + 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {dol_lite_1_2, bxt_blc, + // linearization2_0, dpc_2_2}[2], {rgbs_grid_1_1}[3], {ccm_3a_2_0}[4], + // {rgb_ir_2_0}[5], {odr_awb_std_1_4}[6], {odr_awb_sve_1_4}[7], {odr_awb_sat_1_4}[8], + // {aestatistics_2_1}[9], {odr_ae_1_4}[10], {ifd_lsc_1_4}[11], {lsc_1_2, gd_2_2, + // wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, + // acm_1_2, gammatm_v4, csc_1_1}[12], {fr_grid_1_0}[13], {b2i_ds_1_1}[14], + // {lbff_crop_espa_1_4}[15], {image_upscaler_1_1}[16], {cas_1_1}[17], + // {odr_ofs_mp_1_4}[18], {b2i_ds_output_1_1}[19], {odr_ofs_dp_1_4}[20], + // {odr_af_std_1_4}[21] } + + uint8_t systemApisSizes[37] = {220 /*ifd_pipe_1_4*/, + 220 /*ifd_pipe_long_1_4*/, + 5 /*dol_lite_1_2*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 0 /*rgb_ir_2_0*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sve_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 20 /*fr_grid_1_0*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*image_upscaler_1_1*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/, + 220 /*odr_af_std_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[18].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffDol2InputsWithGmvNoTnrNoSapOuterNode::Init( + LbffDol2InputsWithGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 41, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[41] = {52446 /*ifd_pipe_1_4*/, + 24678 /*ifd_pipe_long_1_4*/, + 54871 /*dol_lite_1_2*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 14488 /*rgb_ir_2_0*/, + 38544 /*odr_awb_std_1_4*/, + 53430 /*odr_awb_sve_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 26958 /*fr_grid_1_0*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 28787 /*image_upscaler_1_1*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/, + 59136 /*odr_af_std_1_4*/, + 51073 /*ifd_gmv_1_4*/, + 40280 /*gmv_statistics_1_1*/, + 7416 /*odr_gmv_feature_1_4*/, + 41148 /*odr_gmv_match_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x1FEF0007FC3, + 0x0}; // { ifd_pipe_1_4[0], ifd_pipe_long_1_4[1], rgbs_grid_1_1[6], ccm_3a_2_0[7], + // rgb_ir_2_0[8], odr_awb_std_1_4[9], odr_awb_sve_1_4[10], odr_awb_sat_1_4[11], + // aestatistics_2_1[12], odr_ae_1_4[13], ifd_lsc_1_4[14], fr_grid_1_0[28], + // b2i_ds_1_1[29], lbff_crop_espa_1_4[30], image_upscaler_1_1[31], + // odr_ofs_mp_1_4[33], b2i_ds_output_1_1[34], odr_ofs_dp_1_4[35], odr_af_std_1_4[36], + // ifd_gmv_1_4[37], gmv_statistics_1_1[38], odr_gmv_feature_1_4[39], + // odr_gmv_match_1_4[40] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x1F9C000FE06, + 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {dol_lite_1_2, bxt_blc, + // linearization2_0, dpc_2_2, rgbs_grid_1_1, ccm_3a_2_0, rgb_ir_2_0}[2], + // {odr_awb_std_1_4}[3], {odr_awb_sve_1_4}[4], {odr_awb_sat_1_4}[5], + // {aestatistics_2_1}[6], {odr_ae_1_4}[7], {ifd_lsc_1_4}[8], {lsc_1_2, gd_2_2, + // wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, + // acm_1_2, gammatm_v4, csc_1_1, fr_grid_1_0, b2i_ds_1_1}[9], + // {lbff_crop_espa_1_4}[10], {image_upscaler_1_1}[11], {cas_1_1, odr_ofs_mp_1_4, + // b2i_ds_output_1_1}[12], {odr_ofs_dp_1_4}[13], {odr_af_std_1_4}[14], + // {ifd_gmv_1_4}[15], {gmv_statistics_1_1}[16], {odr_gmv_feature_1_4}[17], + // {odr_gmv_match_1_4}[18] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x1FFF000FFC7, + 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {dol_lite_1_2, bxt_blc, + // linearization2_0, dpc_2_2}[2], {rgbs_grid_1_1}[3], {ccm_3a_2_0}[4], + // {rgb_ir_2_0}[5], {odr_awb_std_1_4}[6], {odr_awb_sve_1_4}[7], {odr_awb_sat_1_4}[8], + // {aestatistics_2_1}[9], {odr_ae_1_4}[10], {ifd_lsc_1_4}[11], {lsc_1_2, gd_2_2, + // wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, + // acm_1_2, gammatm_v4, csc_1_1}[12], {fr_grid_1_0}[13], {b2i_ds_1_1}[14], + // {lbff_crop_espa_1_4}[15], {image_upscaler_1_1}[16], {cas_1_1}[17], + // {odr_ofs_mp_1_4}[18], {b2i_ds_output_1_1}[19], {odr_ofs_dp_1_4}[20], + // {odr_af_std_1_4}[21], {ifd_gmv_1_4}[22], {gmv_statistics_1_1}[23], + // {odr_gmv_feature_1_4}[24], {odr_gmv_match_1_4}[25] } + + uint8_t systemApisSizes[41] = {220 /*ifd_pipe_1_4*/, + 220 /*ifd_pipe_long_1_4*/, + 5 /*dol_lite_1_2*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 0 /*rgb_ir_2_0*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sve_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 20 /*fr_grid_1_0*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*image_upscaler_1_1*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_gmv_1_4*/, + 20 /*gmv_statistics_1_1*/, + 220 /*odr_gmv_feature_1_4*/, + 220 /*odr_gmv_match_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[18].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffDol2InputsNoGmvWithTnrNoSapOuterNode::Init( + LbffDol2InputsNoGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 49, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[49] = {52446 /*ifd_pipe_1_4*/, + 24678 /*ifd_pipe_long_1_4*/, + 54871 /*dol_lite_1_2*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 14488 /*rgb_ir_2_0*/, + 38544 /*odr_awb_std_1_4*/, + 53430 /*odr_awb_sve_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 26958 /*fr_grid_1_0*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 2495 /*tnr7_spatial_1_1*/, + 29996 /*tnr_scaler_lb_1_1*/, + 59136 /*odr_af_std_1_4*/, + 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 23639 /*tnr7_ims_1_2*/, + 1502 /*tnr7_bc_1_2*/, + 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, + 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 20119 /*tnr7_blend_1_1*/, + 5215 /*odr_tnr_fp_yuvn_1_4*/, + 20623 /*tnr_scaler_fp_1_1*/, + 28787 /*image_upscaler_1_1*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/, + 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x1EECF70007FC3, + 0x0}; // { ifd_pipe_1_4[0], ifd_pipe_long_1_4[1], rgbs_grid_1_1[6], ccm_3a_2_0[7], + // rgb_ir_2_0[8], odr_awb_std_1_4[9], odr_awb_sve_1_4[10], odr_awb_sat_1_4[11], + // aestatistics_2_1[12], odr_ae_1_4[13], ifd_lsc_1_4[14], fr_grid_1_0[28], + // b2i_ds_1_1[29], lbff_crop_espa_1_4[30], tnr_scaler_lb_1_1[32], odr_af_std_1_4[33], + // ifd_tnr_sp_bc_yuv4nm1_1_4[34], ifd_tnr_sp_bc_rs4nm1_1_4[35], + // odr_tnr_sp_bc_rs4n_1_4[38], ifd_tnr_fp_blend_yuvnm1_1_4[39], + // odr_tnr_fp_yuvn_1_4[41], tnr_scaler_fp_1_1[42], image_upscaler_1_1[43], + // odr_ofs_mp_1_4[45], b2i_ds_output_1_1[46], odr_ofs_dp_1_4[47], + // odr_tnr_scale_fp_yuv4n_1_4[48] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x1919EC000FE06, + 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {dol_lite_1_2, bxt_blc, + // linearization2_0, dpc_2_2, rgbs_grid_1_1, ccm_3a_2_0, rgb_ir_2_0}[2], + // {odr_awb_std_1_4}[3], {odr_awb_sve_1_4}[4], {odr_awb_sat_1_4}[5], + // {aestatistics_2_1}[6], {odr_ae_1_4}[7], {ifd_lsc_1_4}[8], {lsc_1_2, gd_2_2, + // wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, + // acm_1_2, gammatm_v4, csc_1_1, fr_grid_1_0, b2i_ds_1_1}[9], + // {lbff_crop_espa_1_4}[10], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[11], + // {odr_af_std_1_4}[12], {ifd_tnr_sp_bc_yuv4nm1_1_4}[13], + // {ifd_tnr_sp_bc_rs4nm1_1_4}[14], {tnr7_ims_1_2, tnr7_bc_1_2, + // odr_tnr_sp_bc_rs4n_1_4}[15], {ifd_tnr_fp_blend_yuvnm1_1_4}[16], {tnr7_blend_1_1, + // odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[17], {cas_1_1, + // odr_ofs_mp_1_4, b2i_ds_output_1_1}[18], {odr_ofs_dp_1_4}[19], + // {odr_tnr_scale_fp_yuv4n_1_4}[20] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x1FFDFF000FFC7, + 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {dol_lite_1_2, bxt_blc, + // linearization2_0, dpc_2_2}[2], {rgbs_grid_1_1}[3], {ccm_3a_2_0}[4], + // {rgb_ir_2_0}[5], {odr_awb_std_1_4}[6], {odr_awb_sve_1_4}[7], {odr_awb_sat_1_4}[8], + // {aestatistics_2_1}[9], {odr_ae_1_4}[10], {ifd_lsc_1_4}[11], {lsc_1_2, gd_2_2, + // wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, + // acm_1_2, gammatm_v4, csc_1_1}[12], {fr_grid_1_0}[13], {b2i_ds_1_1}[14], + // {lbff_crop_espa_1_4}[15], {tnr7_spatial_1_1}[16], {tnr_scaler_lb_1_1}[17], + // {odr_af_std_1_4}[18], {ifd_tnr_sp_bc_yuv4nm1_1_4}[19], + // {ifd_tnr_sp_bc_rs4nm1_1_4}[20], {tnr7_ims_1_2, tnr7_bc_1_2}[21], + // {odr_tnr_sp_bc_rs4n_1_4}[22], {ifd_tnr_fp_blend_yuvnm1_1_4}[23], + // {tnr7_blend_1_1}[24], {odr_tnr_fp_yuvn_1_4}[25], {tnr_scaler_fp_1_1}[26], + // {image_upscaler_1_1}[27], {cas_1_1}[28], {odr_ofs_mp_1_4}[29], + // {b2i_ds_output_1_1}[30], {odr_ofs_dp_1_4}[31], {odr_tnr_scale_fp_yuv4n_1_4}[32] } + + uint8_t systemApisSizes[49] = {220 /*ifd_pipe_1_4*/, + 220 /*ifd_pipe_long_1_4*/, + 5 /*dol_lite_1_2*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 0 /*rgb_ir_2_0*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sve_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 20 /*fr_grid_1_0*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*tnr7_spatial_1_1*/, + 0 /*tnr_scaler_lb_1_1*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 0 /*tnr7_ims_1_2*/, + 5 /*tnr7_bc_1_2*/, + 220 /*odr_tnr_sp_bc_rs4n_1_4*/, + 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 5 /*tnr7_blend_1_1*/, + 220 /*odr_tnr_fp_yuvn_1_4*/, + 0 /*tnr_scaler_fp_1_1*/, + 0 /*image_upscaler_1_1*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/, + 220 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[18].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffDol2InputsWithGmvWithTnrNoSapOuterNode::Init( + LbffDol2InputsWithGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 53, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[53] = {52446 /*ifd_pipe_1_4*/, + 24678 /*ifd_pipe_long_1_4*/, + 54871 /*dol_lite_1_2*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 14488 /*rgb_ir_2_0*/, + 38544 /*odr_awb_std_1_4*/, + 53430 /*odr_awb_sve_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 26958 /*fr_grid_1_0*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 2495 /*tnr7_spatial_1_1*/, + 29996 /*tnr_scaler_lb_1_1*/, + 59136 /*odr_af_std_1_4*/, + 51073 /*ifd_gmv_1_4*/, + 40280 /*gmv_statistics_1_1*/, + 7416 /*odr_gmv_feature_1_4*/, + 41148 /*odr_gmv_match_1_4*/, + 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 23639 /*tnr7_ims_1_2*/, + 1502 /*tnr7_bc_1_2*/, + 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, + 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 20119 /*tnr7_blend_1_1*/, + 5215 /*odr_tnr_fp_yuvn_1_4*/, + 20623 /*tnr_scaler_fp_1_1*/, + 28787 /*image_upscaler_1_1*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/, + 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x1EECFF70007FC3, + 0x0}; // { ifd_pipe_1_4[0], ifd_pipe_long_1_4[1], rgbs_grid_1_1[6], ccm_3a_2_0[7], + // rgb_ir_2_0[8], odr_awb_std_1_4[9], odr_awb_sve_1_4[10], odr_awb_sat_1_4[11], + // aestatistics_2_1[12], odr_ae_1_4[13], ifd_lsc_1_4[14], fr_grid_1_0[28], + // b2i_ds_1_1[29], lbff_crop_espa_1_4[30], tnr_scaler_lb_1_1[32], odr_af_std_1_4[33], + // ifd_gmv_1_4[34], gmv_statistics_1_1[35], odr_gmv_feature_1_4[36], + // odr_gmv_match_1_4[37], ifd_tnr_sp_bc_yuv4nm1_1_4[38], + // ifd_tnr_sp_bc_rs4nm1_1_4[39], odr_tnr_sp_bc_rs4n_1_4[42], + // ifd_tnr_fp_blend_yuvnm1_1_4[43], odr_tnr_fp_yuvn_1_4[45], tnr_scaler_fp_1_1[46], + // image_upscaler_1_1[47], odr_ofs_mp_1_4[49], b2i_ds_output_1_1[50], + // odr_ofs_dp_1_4[51], odr_tnr_scale_fp_yuv4n_1_4[52] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x1919FEC000FE06, + 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {dol_lite_1_2, bxt_blc, + // linearization2_0, dpc_2_2, rgbs_grid_1_1, ccm_3a_2_0, rgb_ir_2_0}[2], + // {odr_awb_std_1_4}[3], {odr_awb_sve_1_4}[4], {odr_awb_sat_1_4}[5], + // {aestatistics_2_1}[6], {odr_ae_1_4}[7], {ifd_lsc_1_4}[8], {lsc_1_2, gd_2_2, + // wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, + // acm_1_2, gammatm_v4, csc_1_1, fr_grid_1_0, b2i_ds_1_1}[9], + // {lbff_crop_espa_1_4}[10], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[11], + // {odr_af_std_1_4}[12], {ifd_gmv_1_4}[13], {gmv_statistics_1_1}[14], + // {odr_gmv_feature_1_4}[15], {odr_gmv_match_1_4}[16], + // {ifd_tnr_sp_bc_yuv4nm1_1_4}[17], {ifd_tnr_sp_bc_rs4nm1_1_4}[18], {tnr7_ims_1_2, + // tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[19], {ifd_tnr_fp_blend_yuvnm1_1_4}[20], + // {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[21], + // {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[22], {odr_ofs_dp_1_4}[23], + // {odr_tnr_scale_fp_yuv4n_1_4}[24] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x1FFDFFF000FFC7, + 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {dol_lite_1_2, bxt_blc, + // linearization2_0, dpc_2_2}[2], {rgbs_grid_1_1}[3], {ccm_3a_2_0}[4], + // {rgb_ir_2_0}[5], {odr_awb_std_1_4}[6], {odr_awb_sve_1_4}[7], {odr_awb_sat_1_4}[8], + // {aestatistics_2_1}[9], {odr_ae_1_4}[10], {ifd_lsc_1_4}[11], {lsc_1_2, gd_2_2, + // wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, + // acm_1_2, gammatm_v4, csc_1_1}[12], {fr_grid_1_0}[13], {b2i_ds_1_1}[14], + // {lbff_crop_espa_1_4}[15], {tnr7_spatial_1_1}[16], {tnr_scaler_lb_1_1}[17], + // {odr_af_std_1_4}[18], {ifd_gmv_1_4}[19], {gmv_statistics_1_1}[20], + // {odr_gmv_feature_1_4}[21], {odr_gmv_match_1_4}[22], + // {ifd_tnr_sp_bc_yuv4nm1_1_4}[23], {ifd_tnr_sp_bc_rs4nm1_1_4}[24], {tnr7_ims_1_2, + // tnr7_bc_1_2}[25], {odr_tnr_sp_bc_rs4n_1_4}[26], {ifd_tnr_fp_blend_yuvnm1_1_4}[27], + // {tnr7_blend_1_1}[28], {odr_tnr_fp_yuvn_1_4}[29], {tnr_scaler_fp_1_1}[30], + // {image_upscaler_1_1}[31], {cas_1_1}[32], {odr_ofs_mp_1_4}[33], + // {b2i_ds_output_1_1}[34], {odr_ofs_dp_1_4}[35], {odr_tnr_scale_fp_yuv4n_1_4}[36] } + + uint8_t systemApisSizes[53] = {220 /*ifd_pipe_1_4*/, + 220 /*ifd_pipe_long_1_4*/, + 5 /*dol_lite_1_2*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 0 /*rgb_ir_2_0*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sve_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 20 /*fr_grid_1_0*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*tnr7_spatial_1_1*/, + 0 /*tnr_scaler_lb_1_1*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_gmv_1_4*/, + 20 /*gmv_statistics_1_1*/, + 220 /*odr_gmv_feature_1_4*/, + 220 /*odr_gmv_match_1_4*/, + 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 0 /*tnr7_ims_1_2*/, + 5 /*tnr7_bc_1_2*/, + 220 /*odr_tnr_sp_bc_rs4n_1_4*/, + 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 5 /*tnr7_blend_1_1*/, + 220 /*odr_tnr_fp_yuvn_1_4*/, + 0 /*tnr_scaler_fp_1_1*/, + 0 /*image_upscaler_1_1*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/, + 220 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[18].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffDolSmoothOuterNode::Init(LbffDolSmoothOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 8, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[8] = {52446 /*ifd_pipe_1_4*/, 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, 33184 /*dpc_2_2*/, + 13882 /*gd_2_2*/, 5144 /*wb_1_1*/, + 45146 /*bnlm_3_4*/, 53535 /*odr_bnlm_1_4*/}; + uint64_t kernelsRcbBitmap[] = {0x81, 0x0}; // { ifd_pipe_1_4[0], odr_bnlm_1_4[7] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x2, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, gd_2_2, wb_1_1, + // bnlm_3_4, odr_bnlm_1_4}[1] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x83, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, gd_2_2, wb_1_1, + // bnlm_3_4}[1], {odr_bnlm_1_4}[2] } + + uint8_t systemApisSizes[8] = { + 220 /*ifd_pipe_1_4*/, 5 /*bxt_blc*/, 5 /*linearization2_0*/, 20 /*dpc_2_2*/, + 0 /*gd_2_2*/, 0 /*wb_1_1*/, 6 /*bnlm_3_4*/, 220 /*odr_bnlm_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[6].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffDol3InputsNoGmvNoTnrNoSapOuterNode::Init( + LbffDol3InputsNoGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 38, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[38] = {52446 /*ifd_pipe_1_4*/, + 24678 /*ifd_pipe_long_1_4*/, + 4386 /*ifd_pipe_short_smth_1_4*/, + 54871 /*dol_lite_1_2*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 14488 /*rgb_ir_2_0*/, + 38544 /*odr_awb_std_1_4*/, + 53430 /*odr_awb_sve_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 26958 /*fr_grid_1_0*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 28787 /*image_upscaler_1_1*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/, + 59136 /*odr_af_std_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x3DE000FF87, 0x0}; // { ifd_pipe_1_4[0], ifd_pipe_long_1_4[1], ifd_pipe_short_smth_1_4[2], + // rgbs_grid_1_1[7], ccm_3a_2_0[8], rgb_ir_2_0[9], odr_awb_std_1_4[10], + // odr_awb_sve_1_4[11], odr_awb_sat_1_4[12], aestatistics_2_1[13], + // odr_ae_1_4[14], ifd_lsc_1_4[15], fr_grid_1_0[29], b2i_ds_1_1[30], + // lbff_crop_espa_1_4[31], image_upscaler_1_1[32], odr_ofs_mp_1_4[34], + // b2i_ds_output_1_1[35], odr_ofs_dp_1_4[36], odr_af_std_1_4[37] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x338001FC0E, + 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {ifd_pipe_short_smth_1_4}[2], + // {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2, rgbs_grid_1_1, ccm_3a_2_0, + // rgb_ir_2_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sve_1_4}[5], {odr_awb_sat_1_4}[6], + // {aestatistics_2_1}[7], {odr_ae_1_4}[8], {ifd_lsc_1_4}[9], {lsc_1_2, gd_2_2, + // wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, + // acm_1_2, gammatm_v4, csc_1_1, fr_grid_1_0, b2i_ds_1_1}[10], + // {lbff_crop_espa_1_4}[11], {image_upscaler_1_1}[12], {cas_1_1, odr_ofs_mp_1_4, + // b2i_ds_output_1_1}[13], {odr_ofs_dp_1_4}[14], {odr_af_std_1_4}[15] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x3FE001FF8F, + 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {ifd_pipe_short_smth_1_4}[2], + // {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2}[3], {rgbs_grid_1_1}[4], + // {ccm_3a_2_0}[5], {rgb_ir_2_0}[6], {odr_awb_std_1_4}[7], {odr_awb_sve_1_4}[8], + // {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], {odr_ae_1_4}[11], {ifd_lsc_1_4}[12], + // {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, + // vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[13], {fr_grid_1_0}[14], + // {b2i_ds_1_1}[15], {lbff_crop_espa_1_4}[16], {image_upscaler_1_1}[17], + // {cas_1_1}[18], {odr_ofs_mp_1_4}[19], {b2i_ds_output_1_1}[20], + // {odr_ofs_dp_1_4}[21], {odr_af_std_1_4}[22] } + + uint8_t systemApisSizes[38] = {220 /*ifd_pipe_1_4*/, + 220 /*ifd_pipe_long_1_4*/, + 220 /*ifd_pipe_short_smth_1_4*/, + 5 /*dol_lite_1_2*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 0 /*rgb_ir_2_0*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sve_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 20 /*fr_grid_1_0*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*image_upscaler_1_1*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/, + 220 /*odr_af_std_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[19].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffDol3InputsWithGmvNoTnrNoSapOuterNode::Init( + LbffDol3InputsWithGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 42, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[42] = {52446 /*ifd_pipe_1_4*/, + 24678 /*ifd_pipe_long_1_4*/, + 4386 /*ifd_pipe_short_smth_1_4*/, + 54871 /*dol_lite_1_2*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 14488 /*rgb_ir_2_0*/, + 38544 /*odr_awb_std_1_4*/, + 53430 /*odr_awb_sve_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 26958 /*fr_grid_1_0*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 28787 /*image_upscaler_1_1*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/, + 59136 /*odr_af_std_1_4*/, + 51073 /*ifd_gmv_1_4*/, + 40280 /*gmv_statistics_1_1*/, + 7416 /*odr_gmv_feature_1_4*/, + 41148 /*odr_gmv_match_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x3FDE000FF87, + 0x0}; // { ifd_pipe_1_4[0], ifd_pipe_long_1_4[1], ifd_pipe_short_smth_1_4[2], + // rgbs_grid_1_1[7], ccm_3a_2_0[8], rgb_ir_2_0[9], odr_awb_std_1_4[10], + // odr_awb_sve_1_4[11], odr_awb_sat_1_4[12], aestatistics_2_1[13], odr_ae_1_4[14], + // ifd_lsc_1_4[15], fr_grid_1_0[29], b2i_ds_1_1[30], lbff_crop_espa_1_4[31], + // image_upscaler_1_1[32], odr_ofs_mp_1_4[34], b2i_ds_output_1_1[35], + // odr_ofs_dp_1_4[36], odr_af_std_1_4[37], ifd_gmv_1_4[38], gmv_statistics_1_1[39], + // odr_gmv_feature_1_4[40], odr_gmv_match_1_4[41] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x3F38001FC0E, + 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {ifd_pipe_short_smth_1_4}[2], + // {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2, rgbs_grid_1_1, ccm_3a_2_0, + // rgb_ir_2_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sve_1_4}[5], {odr_awb_sat_1_4}[6], + // {aestatistics_2_1}[7], {odr_ae_1_4}[8], {ifd_lsc_1_4}[9], {lsc_1_2, gd_2_2, + // wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, + // acm_1_2, gammatm_v4, csc_1_1, fr_grid_1_0, b2i_ds_1_1}[10], + // {lbff_crop_espa_1_4}[11], {image_upscaler_1_1}[12], {cas_1_1, odr_ofs_mp_1_4, + // b2i_ds_output_1_1}[13], {odr_ofs_dp_1_4}[14], {odr_af_std_1_4}[15], + // {ifd_gmv_1_4}[16], {gmv_statistics_1_1}[17], {odr_gmv_feature_1_4}[18], + // {odr_gmv_match_1_4}[19] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x3FFE001FF8F, + 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {ifd_pipe_short_smth_1_4}[2], + // {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2}[3], {rgbs_grid_1_1}[4], + // {ccm_3a_2_0}[5], {rgb_ir_2_0}[6], {odr_awb_std_1_4}[7], {odr_awb_sve_1_4}[8], + // {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], {odr_ae_1_4}[11], {ifd_lsc_1_4}[12], + // {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, + // vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[13], {fr_grid_1_0}[14], + // {b2i_ds_1_1}[15], {lbff_crop_espa_1_4}[16], {image_upscaler_1_1}[17], + // {cas_1_1}[18], {odr_ofs_mp_1_4}[19], {b2i_ds_output_1_1}[20], + // {odr_ofs_dp_1_4}[21], {odr_af_std_1_4}[22], {ifd_gmv_1_4}[23], + // {gmv_statistics_1_1}[24], {odr_gmv_feature_1_4}[25], {odr_gmv_match_1_4}[26] } + + uint8_t systemApisSizes[42] = {220 /*ifd_pipe_1_4*/, + 220 /*ifd_pipe_long_1_4*/, + 220 /*ifd_pipe_short_smth_1_4*/, + 5 /*dol_lite_1_2*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 0 /*rgb_ir_2_0*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sve_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 20 /*fr_grid_1_0*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*image_upscaler_1_1*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_gmv_1_4*/, + 20 /*gmv_statistics_1_1*/, + 220 /*odr_gmv_feature_1_4*/, + 220 /*odr_gmv_match_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[19].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffDol3InputsNoGmvWithTnrNoSapOuterNode::Init( + LbffDol3InputsNoGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 50, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[50] = {52446 /*ifd_pipe_1_4*/, + 24678 /*ifd_pipe_long_1_4*/, + 4386 /*ifd_pipe_short_smth_1_4*/, + 54871 /*dol_lite_1_2*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 14488 /*rgb_ir_2_0*/, + 38544 /*odr_awb_std_1_4*/, + 53430 /*odr_awb_sve_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 26958 /*fr_grid_1_0*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 2495 /*tnr7_spatial_1_1*/, + 29996 /*tnr_scaler_lb_1_1*/, + 59136 /*odr_af_std_1_4*/, + 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 23639 /*tnr7_ims_1_2*/, + 1502 /*tnr7_bc_1_2*/, + 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, + 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 20119 /*tnr7_blend_1_1*/, + 5215 /*odr_tnr_fp_yuvn_1_4*/, + 20623 /*tnr_scaler_fp_1_1*/, + 28787 /*image_upscaler_1_1*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/, + 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x3DD9EE000FF87, + 0x0}; // { ifd_pipe_1_4[0], ifd_pipe_long_1_4[1], ifd_pipe_short_smth_1_4[2], + // rgbs_grid_1_1[7], ccm_3a_2_0[8], rgb_ir_2_0[9], odr_awb_std_1_4[10], + // odr_awb_sve_1_4[11], odr_awb_sat_1_4[12], aestatistics_2_1[13], odr_ae_1_4[14], + // ifd_lsc_1_4[15], fr_grid_1_0[29], b2i_ds_1_1[30], lbff_crop_espa_1_4[31], + // tnr_scaler_lb_1_1[33], odr_af_std_1_4[34], ifd_tnr_sp_bc_yuv4nm1_1_4[35], + // ifd_tnr_sp_bc_rs4nm1_1_4[36], odr_tnr_sp_bc_rs4n_1_4[39], + // ifd_tnr_fp_blend_yuvnm1_1_4[40], odr_tnr_fp_yuvn_1_4[42], tnr_scaler_fp_1_1[43], + // image_upscaler_1_1[44], odr_ofs_mp_1_4[46], b2i_ds_output_1_1[47], + // odr_ofs_dp_1_4[48], odr_tnr_scale_fp_yuv4n_1_4[49] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x3233D8001FC0E, + 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {ifd_pipe_short_smth_1_4}[2], + // {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2, rgbs_grid_1_1, ccm_3a_2_0, + // rgb_ir_2_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sve_1_4}[5], {odr_awb_sat_1_4}[6], + // {aestatistics_2_1}[7], {odr_ae_1_4}[8], {ifd_lsc_1_4}[9], {lsc_1_2, gd_2_2, + // wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, + // acm_1_2, gammatm_v4, csc_1_1, fr_grid_1_0, b2i_ds_1_1}[10], + // {lbff_crop_espa_1_4}[11], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[12], + // {odr_af_std_1_4}[13], {ifd_tnr_sp_bc_yuv4nm1_1_4}[14], + // {ifd_tnr_sp_bc_rs4nm1_1_4}[15], {tnr7_ims_1_2, tnr7_bc_1_2, + // odr_tnr_sp_bc_rs4n_1_4}[16], {ifd_tnr_fp_blend_yuvnm1_1_4}[17], {tnr7_blend_1_1, + // odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[18], {cas_1_1, + // odr_ofs_mp_1_4, b2i_ds_output_1_1}[19], {odr_ofs_dp_1_4}[20], + // {odr_tnr_scale_fp_yuv4n_1_4}[21] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x3FFBFE001FF8F, + 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {ifd_pipe_short_smth_1_4}[2], + // {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2}[3], {rgbs_grid_1_1}[4], + // {ccm_3a_2_0}[5], {rgb_ir_2_0}[6], {odr_awb_std_1_4}[7], {odr_awb_sve_1_4}[8], + // {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], {odr_ae_1_4}[11], {ifd_lsc_1_4}[12], + // {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, + // vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[13], {fr_grid_1_0}[14], + // {b2i_ds_1_1}[15], {lbff_crop_espa_1_4}[16], {tnr7_spatial_1_1}[17], + // {tnr_scaler_lb_1_1}[18], {odr_af_std_1_4}[19], {ifd_tnr_sp_bc_yuv4nm1_1_4}[20], + // {ifd_tnr_sp_bc_rs4nm1_1_4}[21], {tnr7_ims_1_2, tnr7_bc_1_2}[22], + // {odr_tnr_sp_bc_rs4n_1_4}[23], {ifd_tnr_fp_blend_yuvnm1_1_4}[24], + // {tnr7_blend_1_1}[25], {odr_tnr_fp_yuvn_1_4}[26], {tnr_scaler_fp_1_1}[27], + // {image_upscaler_1_1}[28], {cas_1_1}[29], {odr_ofs_mp_1_4}[30], + // {b2i_ds_output_1_1}[31], {odr_ofs_dp_1_4}[32], {odr_tnr_scale_fp_yuv4n_1_4}[33] } + + uint8_t systemApisSizes[50] = {220 /*ifd_pipe_1_4*/, + 220 /*ifd_pipe_long_1_4*/, + 220 /*ifd_pipe_short_smth_1_4*/, + 5 /*dol_lite_1_2*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 0 /*rgb_ir_2_0*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sve_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 20 /*fr_grid_1_0*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*tnr7_spatial_1_1*/, + 0 /*tnr_scaler_lb_1_1*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 0 /*tnr7_ims_1_2*/, + 5 /*tnr7_bc_1_2*/, + 220 /*odr_tnr_sp_bc_rs4n_1_4*/, + 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 5 /*tnr7_blend_1_1*/, + 220 /*odr_tnr_fp_yuvn_1_4*/, + 0 /*tnr_scaler_fp_1_1*/, + 0 /*image_upscaler_1_1*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/, + 220 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[19].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffDol3InputsWithGmvWithTnrNoSapOuterNode::Init( + LbffDol3InputsWithGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 54, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[54] = {52446 /*ifd_pipe_1_4*/, + 24678 /*ifd_pipe_long_1_4*/, + 4386 /*ifd_pipe_short_smth_1_4*/, + 54871 /*dol_lite_1_2*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 14488 /*rgb_ir_2_0*/, + 38544 /*odr_awb_std_1_4*/, + 53430 /*odr_awb_sve_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 26958 /*fr_grid_1_0*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 2495 /*tnr7_spatial_1_1*/, + 29996 /*tnr_scaler_lb_1_1*/, + 59136 /*odr_af_std_1_4*/, + 51073 /*ifd_gmv_1_4*/, + 40280 /*gmv_statistics_1_1*/, + 7416 /*odr_gmv_feature_1_4*/, + 41148 /*odr_gmv_match_1_4*/, + 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 23639 /*tnr7_ims_1_2*/, + 1502 /*tnr7_bc_1_2*/, + 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, + 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 20119 /*tnr7_blend_1_1*/, + 5215 /*odr_tnr_fp_yuvn_1_4*/, + 20623 /*tnr_scaler_fp_1_1*/, + 28787 /*image_upscaler_1_1*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/, + 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x3DD9FEE000FF87, + 0x0}; // { ifd_pipe_1_4[0], ifd_pipe_long_1_4[1], ifd_pipe_short_smth_1_4[2], + // rgbs_grid_1_1[7], ccm_3a_2_0[8], rgb_ir_2_0[9], odr_awb_std_1_4[10], + // odr_awb_sve_1_4[11], odr_awb_sat_1_4[12], aestatistics_2_1[13], odr_ae_1_4[14], + // ifd_lsc_1_4[15], fr_grid_1_0[29], b2i_ds_1_1[30], lbff_crop_espa_1_4[31], + // tnr_scaler_lb_1_1[33], odr_af_std_1_4[34], ifd_gmv_1_4[35], + // gmv_statistics_1_1[36], odr_gmv_feature_1_4[37], odr_gmv_match_1_4[38], + // ifd_tnr_sp_bc_yuv4nm1_1_4[39], ifd_tnr_sp_bc_rs4nm1_1_4[40], + // odr_tnr_sp_bc_rs4n_1_4[43], ifd_tnr_fp_blend_yuvnm1_1_4[44], + // odr_tnr_fp_yuvn_1_4[46], tnr_scaler_fp_1_1[47], image_upscaler_1_1[48], + // odr_ofs_mp_1_4[50], b2i_ds_output_1_1[51], odr_ofs_dp_1_4[52], + // odr_tnr_scale_fp_yuv4n_1_4[53] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x3233FD8001FC0E, + 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {ifd_pipe_short_smth_1_4}[2], + // {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2, rgbs_grid_1_1, ccm_3a_2_0, + // rgb_ir_2_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sve_1_4}[5], {odr_awb_sat_1_4}[6], + // {aestatistics_2_1}[7], {odr_ae_1_4}[8], {ifd_lsc_1_4}[9], {lsc_1_2, gd_2_2, + // wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, + // acm_1_2, gammatm_v4, csc_1_1, fr_grid_1_0, b2i_ds_1_1}[10], + // {lbff_crop_espa_1_4}[11], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[12], + // {odr_af_std_1_4}[13], {ifd_gmv_1_4}[14], {gmv_statistics_1_1}[15], + // {odr_gmv_feature_1_4}[16], {odr_gmv_match_1_4}[17], + // {ifd_tnr_sp_bc_yuv4nm1_1_4}[18], {ifd_tnr_sp_bc_rs4nm1_1_4}[19], {tnr7_ims_1_2, + // tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[20], {ifd_tnr_fp_blend_yuvnm1_1_4}[21], + // {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[22], + // {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[23], {odr_ofs_dp_1_4}[24], + // {odr_tnr_scale_fp_yuv4n_1_4}[25] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x3FFBFFE001FF8F, + 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {ifd_pipe_short_smth_1_4}[2], + // {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2}[3], {rgbs_grid_1_1}[4], + // {ccm_3a_2_0}[5], {rgb_ir_2_0}[6], {odr_awb_std_1_4}[7], {odr_awb_sve_1_4}[8], + // {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], {odr_ae_1_4}[11], {ifd_lsc_1_4}[12], + // {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, + // vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[13], {fr_grid_1_0}[14], + // {b2i_ds_1_1}[15], {lbff_crop_espa_1_4}[16], {tnr7_spatial_1_1}[17], + // {tnr_scaler_lb_1_1}[18], {odr_af_std_1_4}[19], {ifd_gmv_1_4}[20], + // {gmv_statistics_1_1}[21], {odr_gmv_feature_1_4}[22], {odr_gmv_match_1_4}[23], + // {ifd_tnr_sp_bc_yuv4nm1_1_4}[24], {ifd_tnr_sp_bc_rs4nm1_1_4}[25], {tnr7_ims_1_2, + // tnr7_bc_1_2}[26], {odr_tnr_sp_bc_rs4n_1_4}[27], {ifd_tnr_fp_blend_yuvnm1_1_4}[28], + // {tnr7_blend_1_1}[29], {odr_tnr_fp_yuvn_1_4}[30], {tnr_scaler_fp_1_1}[31], + // {image_upscaler_1_1}[32], {cas_1_1}[33], {odr_ofs_mp_1_4}[34], + // {b2i_ds_output_1_1}[35], {odr_ofs_dp_1_4}[36], {odr_tnr_scale_fp_yuv4n_1_4}[37] } + + uint8_t systemApisSizes[54] = {220 /*ifd_pipe_1_4*/, + 220 /*ifd_pipe_long_1_4*/, + 220 /*ifd_pipe_short_smth_1_4*/, + 5 /*dol_lite_1_2*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 0 /*rgb_ir_2_0*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sve_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 20 /*fr_grid_1_0*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*tnr7_spatial_1_1*/, + 0 /*tnr_scaler_lb_1_1*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_gmv_1_4*/, + 20 /*gmv_statistics_1_1*/, + 220 /*odr_gmv_feature_1_4*/, + 220 /*odr_gmv_match_1_4*/, + 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 0 /*tnr7_ims_1_2*/, + 5 /*tnr7_bc_1_2*/, + 220 /*odr_tnr_sp_bc_rs4n_1_4*/, + 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 5 /*tnr7_blend_1_1*/, + 220 /*odr_tnr_fp_yuvn_1_4*/, + 0 /*tnr_scaler_fp_1_1*/, + 0 /*image_upscaler_1_1*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/, + 220 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[19].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffRgbIrNoGmvNoTnrNoSapOuterNode::Init( + LbffRgbIrNoGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 36, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[36] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 15021 /*rgbs_grid_1_1*/, + 14488 /*rgb_ir_2_0*/, + 60297 /*odr_ir_1_4*/, + 38544 /*odr_awb_std_1_4*/, + 53430 /*odr_awb_sve_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 28787 /*image_upscaler_1_1*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0xFDF0007F1, + 0x0}; // { ifd_pipe_1_4[0], rgbs_grid_1_1[4], rgb_ir_2_0[5], odr_ir_1_4[6], + // odr_awb_std_1_4[7], odr_awb_sve_1_4[8], odr_awb_sat_1_4[9], ifd_lsc_1_4[10], + // ccm_3a_2_0[24], fr_grid_1_0[25], b2i_ds_1_1[26], lbff_crop_espa_1_4[27], + // image_upscaler_1_1[28], odr_ofs_mp_1_4[30], b2i_ds_output_1_1[31], + // odr_ofs_dp_1_4[32], aestatistics_2_1[33], odr_ae_1_4[34], odr_af_std_1_4[35] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0xF38000FC2, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgbs_grid_1_1, + // rgb_ir_2_0}[1], {odr_ir_1_4}[2], {odr_awb_std_1_4}[3], {odr_awb_sve_1_4}[4], + // {odr_awb_sat_1_4}[5], {ifd_lsc_1_4}[6], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, + // bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, + // gammatm_v4, csc_1_1, ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[7], + // {lbff_crop_espa_1_4}[8], {image_upscaler_1_1}[9], {cas_1_1, odr_ofs_mp_1_4, + // b2i_ds_output_1_1}[10], {odr_ofs_dp_1_4}[11], {aestatistics_2_1}[12], + // {odr_ae_1_4}[13], {odr_af_std_1_4}[14] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0xFFF000FF3, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgbs_grid_1_1}[2], + // {rgb_ir_2_0}[3], {odr_ir_1_4}[4], {odr_awb_std_1_4}[5], {odr_awb_sve_1_4}[6], + // {odr_awb_sat_1_4}[7], {ifd_lsc_1_4}[8], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, + // bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, + // gammatm_v4, csc_1_1}[9], {ccm_3a_2_0}[10], {fr_grid_1_0}[11], {b2i_ds_1_1}[12], + // {lbff_crop_espa_1_4}[13], {image_upscaler_1_1}[14], {cas_1_1}[15], + // {odr_ofs_mp_1_4}[16], {b2i_ds_output_1_1}[17], {odr_ofs_dp_1_4}[18], + // {aestatistics_2_1}[19], {odr_ae_1_4}[20], {odr_af_std_1_4}[21] } + + uint8_t systemApisSizes[36] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 24 /*rgbs_grid_1_1*/, + 0 /*rgb_ir_2_0*/, + 220 /*odr_ir_1_4*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sve_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*image_upscaler_1_1*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[14].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffRgbIrIrNoGmvNoTnrNoSapOuterNode::Init( + LbffRgbIrIrNoGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 32, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[32] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 28787 /*image_upscaler_1_1*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/, + 38544 /*odr_awb_std_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0xFF7E0009, 0x0}; // { ifd_pipe_1_4[0], ifd_lsc_1_4[3], rgbs_grid_1_1[17], ccm_3a_2_0[18], + // fr_grid_1_0[19], b2i_ds_1_1[20], lbff_crop_espa_1_4[21], + // image_upscaler_1_1[22], odr_ofs_mp_1_4[24], b2i_ds_output_1_1[25], + // odr_ofs_dp_1_4[26], odr_awb_std_1_4[27], odr_awb_sat_1_4[28], + // aestatistics_2_1[29], odr_ae_1_4[30], odr_af_std_1_4[31] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0xFCE0001A, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, + // gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, + // glim_2_0, acm_1_2, gammatm_v4, csc_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0, + // b2i_ds_1_1}[3], {lbff_crop_espa_1_4}[4], {image_upscaler_1_1}[5], {cas_1_1, + // odr_ofs_mp_1_4, b2i_ds_output_1_1}[6], {odr_ofs_dp_1_4}[7], {odr_awb_std_1_4}[8], + // {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], {odr_ae_1_4}[11], + // {odr_af_std_1_4}[12] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0xFFFE001B, 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0}[1], {ifd_lsc_1_4}[2], + // {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, + // gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, + // csc_1_1}[3], {rgbs_grid_1_1}[4], {ccm_3a_2_0}[5], {fr_grid_1_0}[6], + // {b2i_ds_1_1}[7], {lbff_crop_espa_1_4}[8], {image_upscaler_1_1}[9], + // {cas_1_1}[10], {odr_ofs_mp_1_4}[11], {b2i_ds_output_1_1}[12], + // {odr_ofs_dp_1_4}[13], {odr_awb_std_1_4}[14], {odr_awb_sat_1_4}[15], + // {aestatistics_2_1}[16], {odr_ae_1_4}[17], {odr_af_std_1_4}[18] } + + uint8_t systemApisSizes[32] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*image_upscaler_1_1*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[7].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffRgbIrWithGmvNoTnrNoSapOuterNode::Init( + LbffRgbIrWithGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 40, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[40] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 15021 /*rgbs_grid_1_1*/, + 14488 /*rgb_ir_2_0*/, + 60297 /*odr_ir_1_4*/, + 38544 /*odr_awb_std_1_4*/, + 53430 /*odr_awb_sve_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 28787 /*image_upscaler_1_1*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 51073 /*ifd_gmv_1_4*/, + 40280 /*gmv_statistics_1_1*/, + 7416 /*odr_gmv_feature_1_4*/, + 41148 /*odr_gmv_match_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0xFFDF0007F1, + 0x0}; // { ifd_pipe_1_4[0], rgbs_grid_1_1[4], rgb_ir_2_0[5], odr_ir_1_4[6], + // odr_awb_std_1_4[7], odr_awb_sve_1_4[8], odr_awb_sat_1_4[9], ifd_lsc_1_4[10], + // ccm_3a_2_0[24], fr_grid_1_0[25], b2i_ds_1_1[26], lbff_crop_espa_1_4[27], + // image_upscaler_1_1[28], odr_ofs_mp_1_4[30], b2i_ds_output_1_1[31], + // odr_ofs_dp_1_4[32], aestatistics_2_1[33], odr_ae_1_4[34], odr_af_std_1_4[35], + // ifd_gmv_1_4[36], gmv_statistics_1_1[37], odr_gmv_feature_1_4[38], + // odr_gmv_match_1_4[39] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0xFF38000FC2, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgbs_grid_1_1, + // rgb_ir_2_0}[1], {odr_ir_1_4}[2], {odr_awb_std_1_4}[3], {odr_awb_sve_1_4}[4], + // {odr_awb_sat_1_4}[5], {ifd_lsc_1_4}[6], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, + // bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, + // gammatm_v4, csc_1_1, ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[7], + // {lbff_crop_espa_1_4}[8], {image_upscaler_1_1}[9], {cas_1_1, odr_ofs_mp_1_4, + // b2i_ds_output_1_1}[10], {odr_ofs_dp_1_4}[11], {aestatistics_2_1}[12], + // {odr_ae_1_4}[13], {odr_af_std_1_4}[14], {ifd_gmv_1_4}[15], + // {gmv_statistics_1_1}[16], {odr_gmv_feature_1_4}[17], {odr_gmv_match_1_4}[18] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0xFFFF000FF3, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgbs_grid_1_1}[2], + // {rgb_ir_2_0}[3], {odr_ir_1_4}[4], {odr_awb_std_1_4}[5], {odr_awb_sve_1_4}[6], + // {odr_awb_sat_1_4}[7], {ifd_lsc_1_4}[8], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, + // bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, + // gammatm_v4, csc_1_1}[9], {ccm_3a_2_0}[10], {fr_grid_1_0}[11], {b2i_ds_1_1}[12], + // {lbff_crop_espa_1_4}[13], {image_upscaler_1_1}[14], {cas_1_1}[15], + // {odr_ofs_mp_1_4}[16], {b2i_ds_output_1_1}[17], {odr_ofs_dp_1_4}[18], + // {aestatistics_2_1}[19], {odr_ae_1_4}[20], {odr_af_std_1_4}[21], {ifd_gmv_1_4}[22], + // {gmv_statistics_1_1}[23], {odr_gmv_feature_1_4}[24], {odr_gmv_match_1_4}[25] } + + uint8_t systemApisSizes[40] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 24 /*rgbs_grid_1_1*/, + 0 /*rgb_ir_2_0*/, + 220 /*odr_ir_1_4*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sve_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*image_upscaler_1_1*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_gmv_1_4*/, + 20 /*gmv_statistics_1_1*/, + 220 /*odr_gmv_feature_1_4*/, + 220 /*odr_gmv_match_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[14].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffRgbIrNoGmvWithTnrNoSapOuterNode::Init( + LbffRgbIrNoGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 48, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[48] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 15021 /*rgbs_grid_1_1*/, + 14488 /*rgb_ir_2_0*/, + 60297 /*odr_ir_1_4*/, + 38544 /*odr_awb_std_1_4*/, + 53430 /*odr_awb_sve_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 2495 /*tnr7_spatial_1_1*/, + 29996 /*tnr_scaler_lb_1_1*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 23639 /*tnr7_ims_1_2*/, + 1502 /*tnr7_bc_1_2*/, + 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, + 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 20119 /*tnr7_blend_1_1*/, + 5215 /*odr_tnr_fp_yuvn_1_4*/, + 20623 /*tnr_scaler_fp_1_1*/, + 28787 /*image_upscaler_1_1*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/, + 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0xF767EF0007F1, + 0x0}; // { ifd_pipe_1_4[0], rgbs_grid_1_1[4], rgb_ir_2_0[5], odr_ir_1_4[6], + // odr_awb_std_1_4[7], odr_awb_sve_1_4[8], odr_awb_sat_1_4[9], ifd_lsc_1_4[10], + // ccm_3a_2_0[24], fr_grid_1_0[25], b2i_ds_1_1[26], lbff_crop_espa_1_4[27], + // tnr_scaler_lb_1_1[29], aestatistics_2_1[30], odr_ae_1_4[31], odr_af_std_1_4[32], + // ifd_tnr_sp_bc_yuv4nm1_1_4[33], ifd_tnr_sp_bc_rs4nm1_1_4[34], + // odr_tnr_sp_bc_rs4n_1_4[37], ifd_tnr_fp_blend_yuvnm1_1_4[38], + // odr_tnr_fp_yuvn_1_4[40], tnr_scaler_fp_1_1[41], image_upscaler_1_1[42], + // odr_ofs_mp_1_4[44], b2i_ds_output_1_1[45], odr_ofs_dp_1_4[46], + // odr_tnr_scale_fp_yuv4n_1_4[47] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0xC8CFD8000FC2, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgbs_grid_1_1, + // rgb_ir_2_0}[1], {odr_ir_1_4}[2], {odr_awb_std_1_4}[3], {odr_awb_sve_1_4}[4], + // {odr_awb_sat_1_4}[5], {ifd_lsc_1_4}[6], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, + // bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, + // gammatm_v4, csc_1_1, ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[7], + // {lbff_crop_espa_1_4}[8], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[9], + // {aestatistics_2_1}[10], {odr_ae_1_4}[11], {odr_af_std_1_4}[12], + // {ifd_tnr_sp_bc_yuv4nm1_1_4}[13], {ifd_tnr_sp_bc_rs4nm1_1_4}[14], {tnr7_ims_1_2, + // tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[15], {ifd_tnr_fp_blend_yuvnm1_1_4}[16], + // {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[17], + // {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[18], {odr_ofs_dp_1_4}[19], + // {odr_tnr_scale_fp_yuv4n_1_4}[20] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0xFFEFFF000FF3, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgbs_grid_1_1}[2], + // {rgb_ir_2_0}[3], {odr_ir_1_4}[4], {odr_awb_std_1_4}[5], {odr_awb_sve_1_4}[6], + // {odr_awb_sat_1_4}[7], {ifd_lsc_1_4}[8], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, + // bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, + // gammatm_v4, csc_1_1}[9], {ccm_3a_2_0}[10], {fr_grid_1_0}[11], {b2i_ds_1_1}[12], + // {lbff_crop_espa_1_4}[13], {tnr7_spatial_1_1}[14], {tnr_scaler_lb_1_1}[15], + // {aestatistics_2_1}[16], {odr_ae_1_4}[17], {odr_af_std_1_4}[18], + // {ifd_tnr_sp_bc_yuv4nm1_1_4}[19], {ifd_tnr_sp_bc_rs4nm1_1_4}[20], {tnr7_ims_1_2, + // tnr7_bc_1_2}[21], {odr_tnr_sp_bc_rs4n_1_4}[22], {ifd_tnr_fp_blend_yuvnm1_1_4}[23], + // {tnr7_blend_1_1}[24], {odr_tnr_fp_yuvn_1_4}[25], {tnr_scaler_fp_1_1}[26], + // {image_upscaler_1_1}[27], {cas_1_1}[28], {odr_ofs_mp_1_4}[29], + // {b2i_ds_output_1_1}[30], {odr_ofs_dp_1_4}[31], {odr_tnr_scale_fp_yuv4n_1_4}[32] } + + uint8_t systemApisSizes[48] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 24 /*rgbs_grid_1_1*/, + 0 /*rgb_ir_2_0*/, + 220 /*odr_ir_1_4*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sve_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*tnr7_spatial_1_1*/, + 0 /*tnr_scaler_lb_1_1*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 0 /*tnr7_ims_1_2*/, + 5 /*tnr7_bc_1_2*/, + 220 /*odr_tnr_sp_bc_rs4n_1_4*/, + 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 5 /*tnr7_blend_1_1*/, + 220 /*odr_tnr_fp_yuvn_1_4*/, + 0 /*tnr_scaler_fp_1_1*/, + 0 /*image_upscaler_1_1*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/, + 220 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[14].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffRgbIrIrNoGmvWithTnrNoSapOuterNode::Init( + LbffRgbIrIrNoGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 44, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[44] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 2495 /*tnr7_spatial_1_1*/, + 29996 /*tnr_scaler_lb_1_1*/, + 38544 /*odr_awb_std_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 23639 /*tnr7_ims_1_2*/, + 1502 /*tnr7_bc_1_2*/, + 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, + 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 20119 /*tnr7_blend_1_1*/, + 5215 /*odr_tnr_fp_yuvn_1_4*/, + 20623 /*tnr_scaler_fp_1_1*/, + 28787 /*image_upscaler_1_1*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/, + 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0xF767FBE0009, + 0x0}; // { ifd_pipe_1_4[0], ifd_lsc_1_4[3], rgbs_grid_1_1[17], ccm_3a_2_0[18], + // fr_grid_1_0[19], b2i_ds_1_1[20], lbff_crop_espa_1_4[21], tnr_scaler_lb_1_1[23], + // odr_awb_std_1_4[24], odr_awb_sat_1_4[25], aestatistics_2_1[26], odr_ae_1_4[27], + // odr_af_std_1_4[28], ifd_tnr_sp_bc_yuv4nm1_1_4[29], ifd_tnr_sp_bc_rs4nm1_1_4[30], + // odr_tnr_sp_bc_rs4n_1_4[33], ifd_tnr_fp_blend_yuvnm1_1_4[34], + // odr_tnr_fp_yuvn_1_4[36], tnr_scaler_fp_1_1[37], image_upscaler_1_1[38], + // odr_ofs_mp_1_4[40], b2i_ds_output_1_1[41], odr_ofs_dp_1_4[42], + // odr_tnr_scale_fp_yuv4n_1_4[43] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0xC8CFF60001A, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, + // gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, + // glim_2_0, acm_1_2, gammatm_v4, csc_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0, + // b2i_ds_1_1}[3], {lbff_crop_espa_1_4}[4], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[5], + // {odr_awb_std_1_4}[6], {odr_awb_sat_1_4}[7], {aestatistics_2_1}[8], + // {odr_ae_1_4}[9], {odr_af_std_1_4}[10], {ifd_tnr_sp_bc_yuv4nm1_1_4}[11], + // {ifd_tnr_sp_bc_rs4nm1_1_4}[12], {tnr7_ims_1_2, tnr7_bc_1_2, + // odr_tnr_sp_bc_rs4n_1_4}[13], {ifd_tnr_fp_blend_yuvnm1_1_4}[14], {tnr7_blend_1_1, + // odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[15], {cas_1_1, + // odr_ofs_mp_1_4, b2i_ds_output_1_1}[16], {odr_ofs_dp_1_4}[17], + // {odr_tnr_scale_fp_yuv4n_1_4}[18] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0xFFEFFFE001B, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, + // gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, + // glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[3], {rgbs_grid_1_1}[4], {ccm_3a_2_0}[5], + // {fr_grid_1_0}[6], {b2i_ds_1_1}[7], {lbff_crop_espa_1_4}[8], {tnr7_spatial_1_1}[9], + // {tnr_scaler_lb_1_1}[10], {odr_awb_std_1_4}[11], {odr_awb_sat_1_4}[12], + // {aestatistics_2_1}[13], {odr_ae_1_4}[14], {odr_af_std_1_4}[15], + // {ifd_tnr_sp_bc_yuv4nm1_1_4}[16], {ifd_tnr_sp_bc_rs4nm1_1_4}[17], {tnr7_ims_1_2, + // tnr7_bc_1_2}[18], {odr_tnr_sp_bc_rs4n_1_4}[19], {ifd_tnr_fp_blend_yuvnm1_1_4}[20], + // {tnr7_blend_1_1}[21], {odr_tnr_fp_yuvn_1_4}[22], {tnr_scaler_fp_1_1}[23], + // {image_upscaler_1_1}[24], {cas_1_1}[25], {odr_ofs_mp_1_4}[26], + // {b2i_ds_output_1_1}[27], {odr_ofs_dp_1_4}[28], {odr_tnr_scale_fp_yuv4n_1_4}[29] } + + uint8_t systemApisSizes[44] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*tnr7_spatial_1_1*/, + 0 /*tnr_scaler_lb_1_1*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 0 /*tnr7_ims_1_2*/, + 5 /*tnr7_bc_1_2*/, + 220 /*odr_tnr_sp_bc_rs4n_1_4*/, + 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 5 /*tnr7_blend_1_1*/, + 220 /*odr_tnr_fp_yuvn_1_4*/, + 0 /*tnr_scaler_fp_1_1*/, + 0 /*image_upscaler_1_1*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/, + 220 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[7].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffRgbIrWithGmvWithTnrNoSapOuterNode::Init( + LbffRgbIrWithGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 52, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[52] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 15021 /*rgbs_grid_1_1*/, + 14488 /*rgb_ir_2_0*/, + 60297 /*odr_ir_1_4*/, + 38544 /*odr_awb_std_1_4*/, + 53430 /*odr_awb_sve_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 2495 /*tnr7_spatial_1_1*/, + 29996 /*tnr_scaler_lb_1_1*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 51073 /*ifd_gmv_1_4*/, + 40280 /*gmv_statistics_1_1*/, + 7416 /*odr_gmv_feature_1_4*/, + 41148 /*odr_gmv_match_1_4*/, + 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 23639 /*tnr7_ims_1_2*/, + 1502 /*tnr7_bc_1_2*/, + 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, + 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 20119 /*tnr7_blend_1_1*/, + 5215 /*odr_tnr_fp_yuvn_1_4*/, + 20623 /*tnr_scaler_fp_1_1*/, + 28787 /*image_upscaler_1_1*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/, + 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0xF767FEF0007F1, + 0x0}; // { ifd_pipe_1_4[0], rgbs_grid_1_1[4], rgb_ir_2_0[5], odr_ir_1_4[6], + // odr_awb_std_1_4[7], odr_awb_sve_1_4[8], odr_awb_sat_1_4[9], ifd_lsc_1_4[10], + // ccm_3a_2_0[24], fr_grid_1_0[25], b2i_ds_1_1[26], lbff_crop_espa_1_4[27], + // tnr_scaler_lb_1_1[29], aestatistics_2_1[30], odr_ae_1_4[31], odr_af_std_1_4[32], + // ifd_gmv_1_4[33], gmv_statistics_1_1[34], odr_gmv_feature_1_4[35], + // odr_gmv_match_1_4[36], ifd_tnr_sp_bc_yuv4nm1_1_4[37], + // ifd_tnr_sp_bc_rs4nm1_1_4[38], odr_tnr_sp_bc_rs4n_1_4[41], + // ifd_tnr_fp_blend_yuvnm1_1_4[42], odr_tnr_fp_yuvn_1_4[44], tnr_scaler_fp_1_1[45], + // image_upscaler_1_1[46], odr_ofs_mp_1_4[48], b2i_ds_output_1_1[49], + // odr_ofs_dp_1_4[50], odr_tnr_scale_fp_yuv4n_1_4[51] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0xC8CFFD8000FC2, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgbs_grid_1_1, + // rgb_ir_2_0}[1], {odr_ir_1_4}[2], {odr_awb_std_1_4}[3], {odr_awb_sve_1_4}[4], + // {odr_awb_sat_1_4}[5], {ifd_lsc_1_4}[6], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, + // bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, + // gammatm_v4, csc_1_1, ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[7], + // {lbff_crop_espa_1_4}[8], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[9], + // {aestatistics_2_1}[10], {odr_ae_1_4}[11], {odr_af_std_1_4}[12], {ifd_gmv_1_4}[13], + // {gmv_statistics_1_1}[14], {odr_gmv_feature_1_4}[15], {odr_gmv_match_1_4}[16], + // {ifd_tnr_sp_bc_yuv4nm1_1_4}[17], {ifd_tnr_sp_bc_rs4nm1_1_4}[18], {tnr7_ims_1_2, + // tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[19], {ifd_tnr_fp_blend_yuvnm1_1_4}[20], + // {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[21], + // {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[22], {odr_ofs_dp_1_4}[23], + // {odr_tnr_scale_fp_yuv4n_1_4}[24] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0xFFEFFFF000FF3, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgbs_grid_1_1}[2], + // {rgb_ir_2_0}[3], {odr_ir_1_4}[4], {odr_awb_std_1_4}[5], {odr_awb_sve_1_4}[6], + // {odr_awb_sat_1_4}[7], {ifd_lsc_1_4}[8], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, + // bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, + // gammatm_v4, csc_1_1}[9], {ccm_3a_2_0}[10], {fr_grid_1_0}[11], {b2i_ds_1_1}[12], + // {lbff_crop_espa_1_4}[13], {tnr7_spatial_1_1}[14], {tnr_scaler_lb_1_1}[15], + // {aestatistics_2_1}[16], {odr_ae_1_4}[17], {odr_af_std_1_4}[18], {ifd_gmv_1_4}[19], + // {gmv_statistics_1_1}[20], {odr_gmv_feature_1_4}[21], {odr_gmv_match_1_4}[22], + // {ifd_tnr_sp_bc_yuv4nm1_1_4}[23], {ifd_tnr_sp_bc_rs4nm1_1_4}[24], {tnr7_ims_1_2, + // tnr7_bc_1_2}[25], {odr_tnr_sp_bc_rs4n_1_4}[26], {ifd_tnr_fp_blend_yuvnm1_1_4}[27], + // {tnr7_blend_1_1}[28], {odr_tnr_fp_yuvn_1_4}[29], {tnr_scaler_fp_1_1}[30], + // {image_upscaler_1_1}[31], {cas_1_1}[32], {odr_ofs_mp_1_4}[33], + // {b2i_ds_output_1_1}[34], {odr_ofs_dp_1_4}[35], {odr_tnr_scale_fp_yuv4n_1_4}[36] } + + uint8_t systemApisSizes[52] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 24 /*rgbs_grid_1_1*/, + 0 /*rgb_ir_2_0*/, + 220 /*odr_ir_1_4*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sve_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*tnr7_spatial_1_1*/, + 0 /*tnr_scaler_lb_1_1*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_gmv_1_4*/, + 20 /*gmv_statistics_1_1*/, + 220 /*odr_gmv_feature_1_4*/, + 220 /*odr_gmv_match_1_4*/, + 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 0 /*tnr7_ims_1_2*/, + 5 /*tnr7_bc_1_2*/, + 220 /*odr_tnr_sp_bc_rs4n_1_4*/, + 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 5 /*tnr7_blend_1_1*/, + 220 /*odr_tnr_fp_yuvn_1_4*/, + 0 /*tnr_scaler_fp_1_1*/, + 0 /*image_upscaler_1_1*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/, + 220 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[14].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffIrNoGmvNoTnrNoSapOuterNode::Init( + LbffIrNoGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 33, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[33] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 33184 /*dpc_2_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 28787 /*image_upscaler_1_1*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/, + 38544 /*odr_awb_std_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x1FEFC0009, 0x0}; // { ifd_pipe_1_4[0], ifd_lsc_1_4[3], rgbs_grid_1_1[18], ccm_3a_2_0[19], + // fr_grid_1_0[20], b2i_ds_1_1[21], lbff_crop_espa_1_4[22], + // image_upscaler_1_1[23], odr_ofs_mp_1_4[25], b2i_ds_output_1_1[26], + // odr_ofs_dp_1_4[27], odr_awb_std_1_4[28], odr_awb_sat_1_4[29], + // aestatistics_2_1[30], odr_ae_1_4[31], odr_af_std_1_4[32] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x1F9C0001A, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, + // dpc_2_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, + // vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, rgbs_grid_1_1, ccm_3a_2_0, + // fr_grid_1_0, b2i_ds_1_1}[3], {lbff_crop_espa_1_4}[4], {image_upscaler_1_1}[5], + // {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[6], {odr_ofs_dp_1_4}[7], + // {odr_awb_std_1_4}[8], {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], + // {odr_ae_1_4}[11], {odr_af_std_1_4}[12] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x1FFFC001B, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, + // dpc_2_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, + // vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[3], {rgbs_grid_1_1}[4], + // {ccm_3a_2_0}[5], {fr_grid_1_0}[6], {b2i_ds_1_1}[7], {lbff_crop_espa_1_4}[8], + // {image_upscaler_1_1}[9], {cas_1_1}[10], {odr_ofs_mp_1_4}[11], + // {b2i_ds_output_1_1}[12], {odr_ofs_dp_1_4}[13], {odr_awb_std_1_4}[14], + // {odr_awb_sat_1_4}[15], {aestatistics_2_1}[16], {odr_ae_1_4}[17], + // {odr_af_std_1_4}[18] } + + uint8_t systemApisSizes[33] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 20 /*dpc_2_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*image_upscaler_1_1*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[8].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffIrWithGmvNoTnrNoSapOuterNode::Init( + LbffIrWithGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 37, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[37] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 33184 /*dpc_2_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 28787 /*image_upscaler_1_1*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/, + 38544 /*odr_awb_std_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 51073 /*ifd_gmv_1_4*/, + 40280 /*gmv_statistics_1_1*/, + 7416 /*odr_gmv_feature_1_4*/, + 41148 /*odr_gmv_match_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x1FFEFC0009, + 0x0}; // { ifd_pipe_1_4[0], ifd_lsc_1_4[3], rgbs_grid_1_1[18], ccm_3a_2_0[19], + // fr_grid_1_0[20], b2i_ds_1_1[21], lbff_crop_espa_1_4[22], image_upscaler_1_1[23], + // odr_ofs_mp_1_4[25], b2i_ds_output_1_1[26], odr_ofs_dp_1_4[27], + // odr_awb_std_1_4[28], odr_awb_sat_1_4[29], aestatistics_2_1[30], odr_ae_1_4[31], + // odr_af_std_1_4[32], ifd_gmv_1_4[33], gmv_statistics_1_1[34], + // odr_gmv_feature_1_4[35], odr_gmv_match_1_4[36] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x1FF9C0001A, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, + // dpc_2_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, + // vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, rgbs_grid_1_1, ccm_3a_2_0, + // fr_grid_1_0, b2i_ds_1_1}[3], {lbff_crop_espa_1_4}[4], {image_upscaler_1_1}[5], + // {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[6], {odr_ofs_dp_1_4}[7], + // {odr_awb_std_1_4}[8], {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], + // {odr_ae_1_4}[11], {odr_af_std_1_4}[12], {ifd_gmv_1_4}[13], + // {gmv_statistics_1_1}[14], {odr_gmv_feature_1_4}[15], {odr_gmv_match_1_4}[16] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x1FFFFC001B, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, + // dpc_2_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, + // vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[3], {rgbs_grid_1_1}[4], + // {ccm_3a_2_0}[5], {fr_grid_1_0}[6], {b2i_ds_1_1}[7], {lbff_crop_espa_1_4}[8], + // {image_upscaler_1_1}[9], {cas_1_1}[10], {odr_ofs_mp_1_4}[11], + // {b2i_ds_output_1_1}[12], {odr_ofs_dp_1_4}[13], {odr_awb_std_1_4}[14], + // {odr_awb_sat_1_4}[15], {aestatistics_2_1}[16], {odr_ae_1_4}[17], + // {odr_af_std_1_4}[18], {ifd_gmv_1_4}[19], {gmv_statistics_1_1}[20], + // {odr_gmv_feature_1_4}[21], {odr_gmv_match_1_4}[22] } + + uint8_t systemApisSizes[37] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 20 /*dpc_2_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*image_upscaler_1_1*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_gmv_1_4*/, + 20 /*gmv_statistics_1_1*/, + 220 /*odr_gmv_feature_1_4*/, + 220 /*odr_gmv_match_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[8].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffIrNoGmvWithTnrNoSapOuterNode::Init( + LbffIrNoGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 45, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[45] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 33184 /*dpc_2_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 2495 /*tnr7_spatial_1_1*/, + 29996 /*tnr_scaler_lb_1_1*/, + 38544 /*odr_awb_std_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 23639 /*tnr7_ims_1_2*/, + 1502 /*tnr7_bc_1_2*/, + 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, + 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 20119 /*tnr7_blend_1_1*/, + 5215 /*odr_tnr_fp_yuvn_1_4*/, + 20623 /*tnr_scaler_fp_1_1*/, + 28787 /*image_upscaler_1_1*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/, + 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x1EECFF7C0009, + 0x0}; // { ifd_pipe_1_4[0], ifd_lsc_1_4[3], rgbs_grid_1_1[18], ccm_3a_2_0[19], + // fr_grid_1_0[20], b2i_ds_1_1[21], lbff_crop_espa_1_4[22], tnr_scaler_lb_1_1[24], + // odr_awb_std_1_4[25], odr_awb_sat_1_4[26], aestatistics_2_1[27], odr_ae_1_4[28], + // odr_af_std_1_4[29], ifd_tnr_sp_bc_yuv4nm1_1_4[30], ifd_tnr_sp_bc_rs4nm1_1_4[31], + // odr_tnr_sp_bc_rs4n_1_4[34], ifd_tnr_fp_blend_yuvnm1_1_4[35], + // odr_tnr_fp_yuvn_1_4[37], tnr_scaler_fp_1_1[38], image_upscaler_1_1[39], + // odr_ofs_mp_1_4[41], b2i_ds_output_1_1[42], odr_ofs_dp_1_4[43], + // odr_tnr_scale_fp_yuv4n_1_4[44] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x1919FEC0001A, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, + // dpc_2_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, + // vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, rgbs_grid_1_1, ccm_3a_2_0, + // fr_grid_1_0, b2i_ds_1_1}[3], {lbff_crop_espa_1_4}[4], {tnr7_spatial_1_1, + // tnr_scaler_lb_1_1}[5], {odr_awb_std_1_4}[6], {odr_awb_sat_1_4}[7], + // {aestatistics_2_1}[8], {odr_ae_1_4}[9], {odr_af_std_1_4}[10], + // {ifd_tnr_sp_bc_yuv4nm1_1_4}[11], {ifd_tnr_sp_bc_rs4nm1_1_4}[12], {tnr7_ims_1_2, + // tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[13], {ifd_tnr_fp_blend_yuvnm1_1_4}[14], + // {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[15], + // {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[16], {odr_ofs_dp_1_4}[17], + // {odr_tnr_scale_fp_yuv4n_1_4}[18] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x1FFDFFFC001B, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, + // dpc_2_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, + // vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[3], {rgbs_grid_1_1}[4], + // {ccm_3a_2_0}[5], {fr_grid_1_0}[6], {b2i_ds_1_1}[7], {lbff_crop_espa_1_4}[8], + // {tnr7_spatial_1_1}[9], {tnr_scaler_lb_1_1}[10], {odr_awb_std_1_4}[11], + // {odr_awb_sat_1_4}[12], {aestatistics_2_1}[13], {odr_ae_1_4}[14], + // {odr_af_std_1_4}[15], {ifd_tnr_sp_bc_yuv4nm1_1_4}[16], + // {ifd_tnr_sp_bc_rs4nm1_1_4}[17], {tnr7_ims_1_2, tnr7_bc_1_2}[18], + // {odr_tnr_sp_bc_rs4n_1_4}[19], {ifd_tnr_fp_blend_yuvnm1_1_4}[20], + // {tnr7_blend_1_1}[21], {odr_tnr_fp_yuvn_1_4}[22], {tnr_scaler_fp_1_1}[23], + // {image_upscaler_1_1}[24], {cas_1_1}[25], {odr_ofs_mp_1_4}[26], + // {b2i_ds_output_1_1}[27], {odr_ofs_dp_1_4}[28], {odr_tnr_scale_fp_yuv4n_1_4}[29] } + + uint8_t systemApisSizes[45] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 20 /*dpc_2_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*tnr7_spatial_1_1*/, + 0 /*tnr_scaler_lb_1_1*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 0 /*tnr7_ims_1_2*/, + 5 /*tnr7_bc_1_2*/, + 220 /*odr_tnr_sp_bc_rs4n_1_4*/, + 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 5 /*tnr7_blend_1_1*/, + 220 /*odr_tnr_fp_yuvn_1_4*/, + 0 /*tnr_scaler_fp_1_1*/, + 0 /*image_upscaler_1_1*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/, + 220 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[8].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffIrWithGmvWithTnrNoSapOuterNode::Init( + LbffIrWithGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 49, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[49] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 33184 /*dpc_2_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 2495 /*tnr7_spatial_1_1*/, + 29996 /*tnr_scaler_lb_1_1*/, + 38544 /*odr_awb_std_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 51073 /*ifd_gmv_1_4*/, + 40280 /*gmv_statistics_1_1*/, + 7416 /*odr_gmv_feature_1_4*/, + 41148 /*odr_gmv_match_1_4*/, + 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 23639 /*tnr7_ims_1_2*/, + 1502 /*tnr7_bc_1_2*/, + 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, + 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 20119 /*tnr7_blend_1_1*/, + 5215 /*odr_tnr_fp_yuvn_1_4*/, + 20623 /*tnr_scaler_fp_1_1*/, + 28787 /*image_upscaler_1_1*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/, + 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x1EECFFF7C0009, + 0x0}; // { ifd_pipe_1_4[0], ifd_lsc_1_4[3], rgbs_grid_1_1[18], ccm_3a_2_0[19], + // fr_grid_1_0[20], b2i_ds_1_1[21], lbff_crop_espa_1_4[22], tnr_scaler_lb_1_1[24], + // odr_awb_std_1_4[25], odr_awb_sat_1_4[26], aestatistics_2_1[27], odr_ae_1_4[28], + // odr_af_std_1_4[29], ifd_gmv_1_4[30], gmv_statistics_1_1[31], + // odr_gmv_feature_1_4[32], odr_gmv_match_1_4[33], ifd_tnr_sp_bc_yuv4nm1_1_4[34], + // ifd_tnr_sp_bc_rs4nm1_1_4[35], odr_tnr_sp_bc_rs4n_1_4[38], + // ifd_tnr_fp_blend_yuvnm1_1_4[39], odr_tnr_fp_yuvn_1_4[41], tnr_scaler_fp_1_1[42], + // image_upscaler_1_1[43], odr_ofs_mp_1_4[45], b2i_ds_output_1_1[46], + // odr_ofs_dp_1_4[47], odr_tnr_scale_fp_yuv4n_1_4[48] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x1919FFEC0001A, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, + // dpc_2_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, + // vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1, rgbs_grid_1_1, ccm_3a_2_0, + // fr_grid_1_0, b2i_ds_1_1}[3], {lbff_crop_espa_1_4}[4], {tnr7_spatial_1_1, + // tnr_scaler_lb_1_1}[5], {odr_awb_std_1_4}[6], {odr_awb_sat_1_4}[7], + // {aestatistics_2_1}[8], {odr_ae_1_4}[9], {odr_af_std_1_4}[10], {ifd_gmv_1_4}[11], + // {gmv_statistics_1_1}[12], {odr_gmv_feature_1_4}[13], {odr_gmv_match_1_4}[14], + // {ifd_tnr_sp_bc_yuv4nm1_1_4}[15], {ifd_tnr_sp_bc_rs4nm1_1_4}[16], {tnr7_ims_1_2, + // tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[17], {ifd_tnr_fp_blend_yuvnm1_1_4}[18], + // {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[19], + // {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[20], {odr_ofs_dp_1_4}[21], + // {odr_tnr_scale_fp_yuv4n_1_4}[22] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x1FFDFFFFC001B, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, + // dpc_2_2, gd_2_2, wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, + // vcr_3_1, glim_2_0, acm_1_2, gammatm_v4, csc_1_1}[3], {rgbs_grid_1_1}[4], + // {ccm_3a_2_0}[5], {fr_grid_1_0}[6], {b2i_ds_1_1}[7], {lbff_crop_espa_1_4}[8], + // {tnr7_spatial_1_1}[9], {tnr_scaler_lb_1_1}[10], {odr_awb_std_1_4}[11], + // {odr_awb_sat_1_4}[12], {aestatistics_2_1}[13], {odr_ae_1_4}[14], + // {odr_af_std_1_4}[15], {ifd_gmv_1_4}[16], {gmv_statistics_1_1}[17], + // {odr_gmv_feature_1_4}[18], {odr_gmv_match_1_4}[19], + // {ifd_tnr_sp_bc_yuv4nm1_1_4}[20], {ifd_tnr_sp_bc_rs4nm1_1_4}[21], {tnr7_ims_1_2, + // tnr7_bc_1_2}[22], {odr_tnr_sp_bc_rs4n_1_4}[23], {ifd_tnr_fp_blend_yuvnm1_1_4}[24], + // {tnr7_blend_1_1}[25], {odr_tnr_fp_yuvn_1_4}[26], {tnr_scaler_fp_1_1}[27], + // {image_upscaler_1_1}[28], {cas_1_1}[29], {odr_ofs_mp_1_4}[30], + // {b2i_ds_output_1_1}[31], {odr_ofs_dp_1_4}[32], {odr_tnr_scale_fp_yuv4n_1_4}[33] } + + uint8_t systemApisSizes[49] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 20 /*dpc_2_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*tnr7_spatial_1_1*/, + 0 /*tnr_scaler_lb_1_1*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_gmv_1_4*/, + 20 /*gmv_statistics_1_1*/, + 220 /*odr_gmv_feature_1_4*/, + 220 /*odr_gmv_match_1_4*/, + 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 0 /*tnr7_ims_1_2*/, + 5 /*tnr7_bc_1_2*/, + 220 /*odr_tnr_sp_bc_rs4n_1_4*/, + 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 5 /*tnr7_blend_1_1*/, + 220 /*odr_tnr_fp_yuvn_1_4*/, + 0 /*tnr_scaler_fp_1_1*/, + 0 /*image_upscaler_1_1*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/, + 220 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[8].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode::Init( + LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 39, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[39] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 54812 /*odr_dpc_pdaf_1_4*/, + 14488 /*rgb_ir_2_0*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 28787 /*image_upscaler_1_1*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/, + 38544 /*odr_awb_std_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 22427 /*ifd_pdaf_1_4*/, + 43213 /*pext_1_0*/, + 44308 /*pafstatistics_1_2*/, + 26892 /*odr_pdaf_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x7FFBF00071, + 0x0}; // { ifd_pipe_1_4[0], odr_dpc_pdaf_1_4[4], rgb_ir_2_0[5], ifd_lsc_1_4[6], + // rgbs_grid_1_1[20], ccm_3a_2_0[21], fr_grid_1_0[22], b2i_ds_1_1[23], + // lbff_crop_espa_1_4[24], image_upscaler_1_1[25], odr_ofs_mp_1_4[27], + // b2i_ds_output_1_1[28], odr_ofs_dp_1_4[29], odr_awb_std_1_4[30], + // odr_awb_sat_1_4[31], aestatistics_2_1[32], odr_ae_1_4[33], odr_af_std_1_4[34], + // ifd_pdaf_1_4[35], pext_1_0[36], pafstatistics_1_2[37], odr_pdaf_1_4[38] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x7FE70000C2, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, odr_dpc_pdaf_1_4, + // rgb_ir_2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, + // bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, + // gammatm_v4, csc_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[3], + // {lbff_crop_espa_1_4}[4], {image_upscaler_1_1}[5], {cas_1_1, odr_ofs_mp_1_4, + // b2i_ds_output_1_1}[6], {odr_ofs_dp_1_4}[7], {odr_awb_std_1_4}[8], + // {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], {odr_ae_1_4}[11], + // {odr_af_std_1_4}[12], {ifd_pdaf_1_4}[13], {pext_1_0}[14], {pafstatistics_1_2}[15], + // {odr_pdaf_1_4}[16] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x7FFFF000F3, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], + // {odr_dpc_pdaf_1_4}[2], {rgb_ir_2_0}[3], {ifd_lsc_1_4}[4], {lsc_1_2, gd_2_2, + // wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, + // acm_1_2, gammatm_v4, csc_1_1}[5], {rgbs_grid_1_1}[6], {ccm_3a_2_0}[7], + // {fr_grid_1_0}[8], {b2i_ds_1_1}[9], {lbff_crop_espa_1_4}[10], + // {image_upscaler_1_1}[11], {cas_1_1}[12], {odr_ofs_mp_1_4}[13], + // {b2i_ds_output_1_1}[14], {odr_ofs_dp_1_4}[15], {odr_awb_std_1_4}[16], + // {odr_awb_sat_1_4}[17], {aestatistics_2_1}[18], {odr_ae_1_4}[19], + // {odr_af_std_1_4}[20], {ifd_pdaf_1_4}[21], {pext_1_0}[22], {pafstatistics_1_2}[23], + // {odr_pdaf_1_4}[24] } + + uint8_t systemApisSizes[39] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 220 /*odr_dpc_pdaf_1_4*/, + 0 /*rgb_ir_2_0*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*image_upscaler_1_1*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_pdaf_1_4*/, + 24 /*pext_1_0*/, + 8 /*pafstatistics_1_2*/, + 220 /*odr_pdaf_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[10].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode::Init( + LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 43, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[43] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 54812 /*odr_dpc_pdaf_1_4*/, + 14488 /*rgb_ir_2_0*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 28787 /*image_upscaler_1_1*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/, + 38544 /*odr_awb_std_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 22427 /*ifd_pdaf_1_4*/, + 43213 /*pext_1_0*/, + 44308 /*pafstatistics_1_2*/, + 26892 /*odr_pdaf_1_4*/, + 51073 /*ifd_gmv_1_4*/, + 40280 /*gmv_statistics_1_1*/, + 7416 /*odr_gmv_feature_1_4*/, + 41148 /*odr_gmv_match_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x7FFFBF00071, + 0x0}; // { ifd_pipe_1_4[0], odr_dpc_pdaf_1_4[4], rgb_ir_2_0[5], ifd_lsc_1_4[6], + // rgbs_grid_1_1[20], ccm_3a_2_0[21], fr_grid_1_0[22], b2i_ds_1_1[23], + // lbff_crop_espa_1_4[24], image_upscaler_1_1[25], odr_ofs_mp_1_4[27], + // b2i_ds_output_1_1[28], odr_ofs_dp_1_4[29], odr_awb_std_1_4[30], + // odr_awb_sat_1_4[31], aestatistics_2_1[32], odr_ae_1_4[33], odr_af_std_1_4[34], + // ifd_pdaf_1_4[35], pext_1_0[36], pafstatistics_1_2[37], odr_pdaf_1_4[38], + // ifd_gmv_1_4[39], gmv_statistics_1_1[40], odr_gmv_feature_1_4[41], + // odr_gmv_match_1_4[42] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x7FFE70000C2, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, odr_dpc_pdaf_1_4, + // rgb_ir_2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, + // bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, + // gammatm_v4, csc_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[3], + // {lbff_crop_espa_1_4}[4], {image_upscaler_1_1}[5], {cas_1_1, odr_ofs_mp_1_4, + // b2i_ds_output_1_1}[6], {odr_ofs_dp_1_4}[7], {odr_awb_std_1_4}[8], + // {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], {odr_ae_1_4}[11], + // {odr_af_std_1_4}[12], {ifd_pdaf_1_4}[13], {pext_1_0}[14], {pafstatistics_1_2}[15], + // {odr_pdaf_1_4}[16], {ifd_gmv_1_4}[17], {gmv_statistics_1_1}[18], + // {odr_gmv_feature_1_4}[19], {odr_gmv_match_1_4}[20] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x7FFFFF000F3, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], + // {odr_dpc_pdaf_1_4}[2], {rgb_ir_2_0}[3], {ifd_lsc_1_4}[4], {lsc_1_2, gd_2_2, + // wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, + // acm_1_2, gammatm_v4, csc_1_1}[5], {rgbs_grid_1_1}[6], {ccm_3a_2_0}[7], + // {fr_grid_1_0}[8], {b2i_ds_1_1}[9], {lbff_crop_espa_1_4}[10], + // {image_upscaler_1_1}[11], {cas_1_1}[12], {odr_ofs_mp_1_4}[13], + // {b2i_ds_output_1_1}[14], {odr_ofs_dp_1_4}[15], {odr_awb_std_1_4}[16], + // {odr_awb_sat_1_4}[17], {aestatistics_2_1}[18], {odr_ae_1_4}[19], + // {odr_af_std_1_4}[20], {ifd_pdaf_1_4}[21], {pext_1_0}[22], {pafstatistics_1_2}[23], + // {odr_pdaf_1_4}[24], {ifd_gmv_1_4}[25], {gmv_statistics_1_1}[26], + // {odr_gmv_feature_1_4}[27], {odr_gmv_match_1_4}[28] } + + uint8_t systemApisSizes[43] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 220 /*odr_dpc_pdaf_1_4*/, + 0 /*rgb_ir_2_0*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*image_upscaler_1_1*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_pdaf_1_4*/, + 24 /*pext_1_0*/, + 8 /*pafstatistics_1_2*/, + 220 /*odr_pdaf_1_4*/, + 220 /*ifd_gmv_1_4*/, + 20 /*gmv_statistics_1_1*/, + 220 /*odr_gmv_feature_1_4*/, + 220 /*odr_gmv_match_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[10].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode::Init( + LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 51, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[51] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 54812 /*odr_dpc_pdaf_1_4*/, + 14488 /*rgb_ir_2_0*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 2495 /*tnr7_spatial_1_1*/, + 29996 /*tnr_scaler_lb_1_1*/, + 38544 /*odr_awb_std_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 22427 /*ifd_pdaf_1_4*/, + 43213 /*pext_1_0*/, + 44308 /*pafstatistics_1_2*/, + 26892 /*odr_pdaf_1_4*/, + 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 23639 /*tnr7_ims_1_2*/, + 1502 /*tnr7_bc_1_2*/, + 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, + 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 20119 /*tnr7_blend_1_1*/, + 5215 /*odr_tnr_fp_yuvn_1_4*/, + 20623 /*tnr_scaler_fp_1_1*/, + 28787 /*image_upscaler_1_1*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/, + 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x7BB3FFDF00071, + 0x0}; // { ifd_pipe_1_4[0], odr_dpc_pdaf_1_4[4], rgb_ir_2_0[5], ifd_lsc_1_4[6], + // rgbs_grid_1_1[20], ccm_3a_2_0[21], fr_grid_1_0[22], b2i_ds_1_1[23], + // lbff_crop_espa_1_4[24], tnr_scaler_lb_1_1[26], odr_awb_std_1_4[27], + // odr_awb_sat_1_4[28], aestatistics_2_1[29], odr_ae_1_4[30], odr_af_std_1_4[31], + // ifd_pdaf_1_4[32], pext_1_0[33], pafstatistics_1_2[34], odr_pdaf_1_4[35], + // ifd_tnr_sp_bc_yuv4nm1_1_4[36], ifd_tnr_sp_bc_rs4nm1_1_4[37], + // odr_tnr_sp_bc_rs4n_1_4[40], ifd_tnr_fp_blend_yuvnm1_1_4[41], + // odr_tnr_fp_yuvn_1_4[43], tnr_scaler_fp_1_1[44], image_upscaler_1_1[45], + // odr_ofs_mp_1_4[47], b2i_ds_output_1_1[48], odr_ofs_dp_1_4[49], + // odr_tnr_scale_fp_yuv4n_1_4[50] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x6467FFB0000C2, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, odr_dpc_pdaf_1_4, + // rgb_ir_2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, + // bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, + // gammatm_v4, csc_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[3], + // {lbff_crop_espa_1_4}[4], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[5], + // {odr_awb_std_1_4}[6], {odr_awb_sat_1_4}[7], {aestatistics_2_1}[8], + // {odr_ae_1_4}[9], {odr_af_std_1_4}[10], {ifd_pdaf_1_4}[11], {pext_1_0}[12], + // {pafstatistics_1_2}[13], {odr_pdaf_1_4}[14], {ifd_tnr_sp_bc_yuv4nm1_1_4}[15], + // {ifd_tnr_sp_bc_rs4nm1_1_4}[16], {tnr7_ims_1_2, tnr7_bc_1_2, + // odr_tnr_sp_bc_rs4n_1_4}[17], {ifd_tnr_fp_blend_yuvnm1_1_4}[18], {tnr7_blend_1_1, + // odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[19], {cas_1_1, + // odr_ofs_mp_1_4, b2i_ds_output_1_1}[20], {odr_ofs_dp_1_4}[21], + // {odr_tnr_scale_fp_yuv4n_1_4}[22] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x7FF7FFFF000F3, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], + // {odr_dpc_pdaf_1_4}[2], {rgb_ir_2_0}[3], {ifd_lsc_1_4}[4], {lsc_1_2, gd_2_2, + // wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, + // acm_1_2, gammatm_v4, csc_1_1}[5], {rgbs_grid_1_1}[6], {ccm_3a_2_0}[7], + // {fr_grid_1_0}[8], {b2i_ds_1_1}[9], {lbff_crop_espa_1_4}[10], + // {tnr7_spatial_1_1}[11], {tnr_scaler_lb_1_1}[12], {odr_awb_std_1_4}[13], + // {odr_awb_sat_1_4}[14], {aestatistics_2_1}[15], {odr_ae_1_4}[16], + // {odr_af_std_1_4}[17], {ifd_pdaf_1_4}[18], {pext_1_0}[19], {pafstatistics_1_2}[20], + // {odr_pdaf_1_4}[21], {ifd_tnr_sp_bc_yuv4nm1_1_4}[22], + // {ifd_tnr_sp_bc_rs4nm1_1_4}[23], {tnr7_ims_1_2, tnr7_bc_1_2}[24], + // {odr_tnr_sp_bc_rs4n_1_4}[25], {ifd_tnr_fp_blend_yuvnm1_1_4}[26], + // {tnr7_blend_1_1}[27], {odr_tnr_fp_yuvn_1_4}[28], {tnr_scaler_fp_1_1}[29], + // {image_upscaler_1_1}[30], {cas_1_1}[31], {odr_ofs_mp_1_4}[32], + // {b2i_ds_output_1_1}[33], {odr_ofs_dp_1_4}[34], {odr_tnr_scale_fp_yuv4n_1_4}[35] } + + uint8_t systemApisSizes[51] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 220 /*odr_dpc_pdaf_1_4*/, + 0 /*rgb_ir_2_0*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*tnr7_spatial_1_1*/, + 0 /*tnr_scaler_lb_1_1*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_pdaf_1_4*/, + 24 /*pext_1_0*/, + 8 /*pafstatistics_1_2*/, + 220 /*odr_pdaf_1_4*/, + 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 0 /*tnr7_ims_1_2*/, + 5 /*tnr7_bc_1_2*/, + 220 /*odr_tnr_sp_bc_rs4n_1_4*/, + 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 5 /*tnr7_blend_1_1*/, + 220 /*odr_tnr_fp_yuvn_1_4*/, + 0 /*tnr_scaler_fp_1_1*/, + 0 /*image_upscaler_1_1*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/, + 220 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[10].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode::Init( + LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 55, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[55] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 54812 /*odr_dpc_pdaf_1_4*/, + 14488 /*rgb_ir_2_0*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 2495 /*tnr7_spatial_1_1*/, + 29996 /*tnr_scaler_lb_1_1*/, + 38544 /*odr_awb_std_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 22427 /*ifd_pdaf_1_4*/, + 43213 /*pext_1_0*/, + 44308 /*pafstatistics_1_2*/, + 26892 /*odr_pdaf_1_4*/, + 51073 /*ifd_gmv_1_4*/, + 40280 /*gmv_statistics_1_1*/, + 7416 /*odr_gmv_feature_1_4*/, + 41148 /*odr_gmv_match_1_4*/, + 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 23639 /*tnr7_ims_1_2*/, + 1502 /*tnr7_bc_1_2*/, + 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, + 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 20119 /*tnr7_blend_1_1*/, + 5215 /*odr_tnr_fp_yuvn_1_4*/, + 20623 /*tnr_scaler_fp_1_1*/, + 28787 /*image_upscaler_1_1*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/, + 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x7BB3FFFDF00071, + 0x0}; // { ifd_pipe_1_4[0], odr_dpc_pdaf_1_4[4], rgb_ir_2_0[5], ifd_lsc_1_4[6], + // rgbs_grid_1_1[20], ccm_3a_2_0[21], fr_grid_1_0[22], b2i_ds_1_1[23], + // lbff_crop_espa_1_4[24], tnr_scaler_lb_1_1[26], odr_awb_std_1_4[27], + // odr_awb_sat_1_4[28], aestatistics_2_1[29], odr_ae_1_4[30], odr_af_std_1_4[31], + // ifd_pdaf_1_4[32], pext_1_0[33], pafstatistics_1_2[34], odr_pdaf_1_4[35], + // ifd_gmv_1_4[36], gmv_statistics_1_1[37], odr_gmv_feature_1_4[38], + // odr_gmv_match_1_4[39], ifd_tnr_sp_bc_yuv4nm1_1_4[40], + // ifd_tnr_sp_bc_rs4nm1_1_4[41], odr_tnr_sp_bc_rs4n_1_4[44], + // ifd_tnr_fp_blend_yuvnm1_1_4[45], odr_tnr_fp_yuvn_1_4[47], tnr_scaler_fp_1_1[48], + // image_upscaler_1_1[49], odr_ofs_mp_1_4[51], b2i_ds_output_1_1[52], + // odr_ofs_dp_1_4[53], odr_tnr_scale_fp_yuv4n_1_4[54] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x6467FFFB0000C2, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, odr_dpc_pdaf_1_4, + // rgb_ir_2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, bnlm_3_4, + // bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, acm_1_2, + // gammatm_v4, csc_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0, b2i_ds_1_1}[3], + // {lbff_crop_espa_1_4}[4], {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[5], + // {odr_awb_std_1_4}[6], {odr_awb_sat_1_4}[7], {aestatistics_2_1}[8], + // {odr_ae_1_4}[9], {odr_af_std_1_4}[10], {ifd_pdaf_1_4}[11], {pext_1_0}[12], + // {pafstatistics_1_2}[13], {odr_pdaf_1_4}[14], {ifd_gmv_1_4}[15], + // {gmv_statistics_1_1}[16], {odr_gmv_feature_1_4}[17], {odr_gmv_match_1_4}[18], + // {ifd_tnr_sp_bc_yuv4nm1_1_4}[19], {ifd_tnr_sp_bc_rs4nm1_1_4}[20], {tnr7_ims_1_2, + // tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[21], {ifd_tnr_fp_blend_yuvnm1_1_4}[22], + // {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[23], + // {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[24], {odr_ofs_dp_1_4}[25], + // {odr_tnr_scale_fp_yuv4n_1_4}[26] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x7FF7FFFFF000F3, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], + // {odr_dpc_pdaf_1_4}[2], {rgb_ir_2_0}[3], {ifd_lsc_1_4}[4], {lsc_1_2, gd_2_2, + // wb_1_1, bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0, xnr_5_4, vcr_3_1, glim_2_0, + // acm_1_2, gammatm_v4, csc_1_1}[5], {rgbs_grid_1_1}[6], {ccm_3a_2_0}[7], + // {fr_grid_1_0}[8], {b2i_ds_1_1}[9], {lbff_crop_espa_1_4}[10], + // {tnr7_spatial_1_1}[11], {tnr_scaler_lb_1_1}[12], {odr_awb_std_1_4}[13], + // {odr_awb_sat_1_4}[14], {aestatistics_2_1}[15], {odr_ae_1_4}[16], + // {odr_af_std_1_4}[17], {ifd_pdaf_1_4}[18], {pext_1_0}[19], {pafstatistics_1_2}[20], + // {odr_pdaf_1_4}[21], {ifd_gmv_1_4}[22], {gmv_statistics_1_1}[23], + // {odr_gmv_feature_1_4}[24], {odr_gmv_match_1_4}[25], + // {ifd_tnr_sp_bc_yuv4nm1_1_4}[26], {ifd_tnr_sp_bc_rs4nm1_1_4}[27], {tnr7_ims_1_2, + // tnr7_bc_1_2}[28], {odr_tnr_sp_bc_rs4n_1_4}[29], {ifd_tnr_fp_blend_yuvnm1_1_4}[30], + // {tnr7_blend_1_1}[31], {odr_tnr_fp_yuvn_1_4}[32], {tnr_scaler_fp_1_1}[33], + // {image_upscaler_1_1}[34], {cas_1_1}[35], {odr_ofs_mp_1_4}[36], + // {b2i_ds_output_1_1}[37], {odr_ofs_dp_1_4}[38], {odr_tnr_scale_fp_yuv4n_1_4}[39] } + + uint8_t systemApisSizes[55] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 220 /*odr_dpc_pdaf_1_4*/, + 0 /*rgb_ir_2_0*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*tnr7_spatial_1_1*/, + 0 /*tnr_scaler_lb_1_1*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_pdaf_1_4*/, + 24 /*pext_1_0*/, + 8 /*pafstatistics_1_2*/, + 220 /*odr_pdaf_1_4*/, + 220 /*ifd_gmv_1_4*/, + 20 /*gmv_statistics_1_1*/, + 220 /*odr_gmv_feature_1_4*/, + 220 /*odr_gmv_match_1_4*/, + 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 0 /*tnr7_ims_1_2*/, + 5 /*tnr7_bc_1_2*/, + 220 /*odr_tnr_sp_bc_rs4n_1_4*/, + 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 5 /*tnr7_blend_1_1*/, + 220 /*odr_tnr_fp_yuvn_1_4*/, + 0 /*tnr_scaler_fp_1_1*/, + 0 /*image_upscaler_1_1*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/, + 220 /*odr_tnr_scale_fp_yuv4n_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[10].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void IsysWithCvOuterNode::Init(IsysWithCvOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(2, NodeTypes::Isys, 4, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[4] = {36280 /*crop_bpp_adjust_1_0*/, 5420 /*upipe_1_0*/, + 26150 /*isys_drainer_1_0*/, 11470 /*is_odr_a*/}; + uint64_t kernelsRcbBitmap[] = {0xB, + 0x0}; // { crop_bpp_adjust_1_0[0], upipe_1_0[1], is_odr_a[3] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0xE, + 0x0}; // {{crop_bpp_adjust_1_0}[0], {upipe_1_0}[1], {isys_drainer_1_0}[2], {is_odr_a}[3] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0xF, + 0x0}; // {{crop_bpp_adjust_1_0}[0], {upipe_1_0}[1], {isys_drainer_1_0}[2], {is_odr_a}[3] } + + uint8_t systemApisSizes[4] = {0 /*crop_bpp_adjust_1_0*/, 34 /*upipe_1_0*/, + 20 /*isys_drainer_1_0*/, 0 /*is_odr_a*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // set default inner Node + setInnerNode(None); +} + +void SwSegnetOuterNode::Init(SwSegnetOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(3, NodeTypes::Sw, 0, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerNoGmvNoTnrWithSapOuterNode::Init( + LbffBayerNoGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 42, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[42] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 14488 /*rgb_ir_2_0*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 38544 /*odr_awb_std_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 35263 /*ifd_segmap_bnlm_1_4*/, + 54924 /*smurf_bnlm_1_0*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 9241 /*ifd_segmap_xnr_1_4*/, + 42329 /*smurf_xnr_1_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 51914 /*ifd_segmap_acm_1_4*/, + 28366 /*smurf_acm_1_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 28787 /*image_upscaler_1_1*/, + 20893 /*ifd_segmap_cas_1_4*/, + 37468 /*smurf_cas_1_0*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x3BE3187FE31, + 0x0}; // { ifd_pipe_1_4[0], rgb_ir_2_0[4], ifd_lsc_1_4[5], rgbs_grid_1_1[9], + // ccm_3a_2_0[10], fr_grid_1_0[11], odr_awb_std_1_4[12], odr_awb_sat_1_4[13], + // aestatistics_2_1[14], odr_ae_1_4[15], odr_af_std_1_4[16], ifd_segmap_bnlm_1_4[17], + // smurf_bnlm_1_0[18], ifd_segmap_xnr_1_4[23], smurf_xnr_1_0[24], + // ifd_segmap_acm_1_4[28], smurf_acm_1_0[29], b2i_ds_1_1[33], lbff_crop_espa_1_4[34], + // image_upscaler_1_1[35], ifd_segmap_cas_1_4[36], smurf_cas_1_0[37], + // odr_ofs_mp_1_4[39], b2i_ds_output_1_1[40], odr_ofs_dp_1_4[41] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x27C738FF062, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgb_ir_2_0}[1], + // {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, rgbs_grid_1_1, ccm_3a_2_0, + // fr_grid_1_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sat_1_4}[5], + // {aestatistics_2_1}[6], {odr_ae_1_4}[7], {odr_af_std_1_4}[8], + // {ifd_segmap_bnlm_1_4}[9], {smurf_bnlm_1_0}[10], {bnlm_3_4, bxt_demosaic, + // vcsc_2_0_b, gltm_2_0}[11], {ifd_segmap_xnr_1_4}[12], {smurf_xnr_1_0}[13], + // {xnr_5_4, vcr_3_1, glim_2_0}[14], {ifd_segmap_acm_1_4}[15], {smurf_acm_1_0}[16], + // {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[17], {lbff_crop_espa_1_4}[18], + // {image_upscaler_1_1}[19], {ifd_segmap_cas_1_4}[20], {smurf_cas_1_0}[21], {cas_1_1, + // odr_ofs_mp_1_4, b2i_ds_output_1_1}[22], {odr_ofs_dp_1_4}[23] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x3FE738FFE73, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgb_ir_2_0}[2], + // {ifd_lsc_1_4}[3], {lsc_1_2, gd_2_2, wb_1_1}[4], {rgbs_grid_1_1}[5], + // {ccm_3a_2_0}[6], {fr_grid_1_0}[7], {odr_awb_std_1_4}[8], {odr_awb_sat_1_4}[9], + // {aestatistics_2_1}[10], {odr_ae_1_4}[11], {odr_af_std_1_4}[12], + // {ifd_segmap_bnlm_1_4}[13], {smurf_bnlm_1_0}[14], {bnlm_3_4, bxt_demosaic, + // vcsc_2_0_b, gltm_2_0}[15], {ifd_segmap_xnr_1_4}[16], {smurf_xnr_1_0}[17], + // {xnr_5_4, vcr_3_1, glim_2_0}[18], {ifd_segmap_acm_1_4}[19], {smurf_acm_1_0}[20], + // {acm_1_2, gammatm_v4, csc_1_1}[21], {b2i_ds_1_1}[22], {lbff_crop_espa_1_4}[23], + // {image_upscaler_1_1}[24], {ifd_segmap_cas_1_4}[25], {smurf_cas_1_0}[26], + // {cas_1_1}[27], {odr_ofs_mp_1_4}[28], {b2i_ds_output_1_1}[29], {odr_ofs_dp_1_4}[30] + // } + + uint8_t systemApisSizes[42] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 0 /*rgb_ir_2_0*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_segmap_bnlm_1_4*/, + 0 /*smurf_bnlm_1_0*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 220 /*ifd_segmap_xnr_1_4*/, + 0 /*smurf_xnr_1_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 220 /*ifd_segmap_acm_1_4*/, + 0 /*smurf_acm_1_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*image_upscaler_1_1*/, + 220 /*ifd_segmap_cas_1_4*/, + 0 /*smurf_cas_1_0*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[19].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerWithGmvNoTnrWithSapOuterNode::Init( + LbffBayerWithGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 46, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[46] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 14488 /*rgb_ir_2_0*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 38544 /*odr_awb_std_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 51073 /*ifd_gmv_1_4*/, + 35263 /*ifd_segmap_bnlm_1_4*/, + 54924 /*smurf_bnlm_1_0*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 9241 /*ifd_segmap_xnr_1_4*/, + 42329 /*smurf_xnr_1_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 51914 /*ifd_segmap_acm_1_4*/, + 28366 /*smurf_acm_1_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 28787 /*image_upscaler_1_1*/, + 40280 /*gmv_statistics_1_1*/, + 7416 /*odr_gmv_feature_1_4*/, + 41148 /*odr_gmv_match_1_4*/, + 20893 /*ifd_segmap_cas_1_4*/, + 37468 /*smurf_cas_1_0*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x3BFC630FFE31, + 0x0}; // { ifd_pipe_1_4[0], rgb_ir_2_0[4], ifd_lsc_1_4[5], rgbs_grid_1_1[9], + // ccm_3a_2_0[10], fr_grid_1_0[11], odr_awb_std_1_4[12], odr_awb_sat_1_4[13], + // aestatistics_2_1[14], odr_ae_1_4[15], odr_af_std_1_4[16], ifd_gmv_1_4[17], + // ifd_segmap_bnlm_1_4[18], smurf_bnlm_1_0[19], ifd_segmap_xnr_1_4[24], + // smurf_xnr_1_0[25], ifd_segmap_acm_1_4[29], smurf_acm_1_0[30], b2i_ds_1_1[34], + // lbff_crop_espa_1_4[35], image_upscaler_1_1[36], gmv_statistics_1_1[37], + // odr_gmv_feature_1_4[38], odr_gmv_match_1_4[39], ifd_segmap_cas_1_4[40], + // smurf_cas_1_0[41], odr_ofs_mp_1_4[43], b2i_ds_output_1_1[44], odr_ofs_dp_1_4[45] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x27F8E71FF062, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgb_ir_2_0}[1], + // {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, rgbs_grid_1_1, ccm_3a_2_0, + // fr_grid_1_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sat_1_4}[5], + // {aestatistics_2_1}[6], {odr_ae_1_4}[7], {odr_af_std_1_4}[8], {ifd_gmv_1_4}[9], + // {ifd_segmap_bnlm_1_4}[10], {smurf_bnlm_1_0}[11], {bnlm_3_4, bxt_demosaic, + // vcsc_2_0_b, gltm_2_0}[12], {ifd_segmap_xnr_1_4}[13], {smurf_xnr_1_0}[14], + // {xnr_5_4, vcr_3_1, glim_2_0}[15], {ifd_segmap_acm_1_4}[16], {smurf_acm_1_0}[17], + // {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[18], {lbff_crop_espa_1_4}[19], + // {image_upscaler_1_1}[20], {gmv_statistics_1_1}[21], {odr_gmv_feature_1_4}[22], + // {odr_gmv_match_1_4}[23], {ifd_segmap_cas_1_4}[24], {smurf_cas_1_0}[25], {cas_1_1, + // odr_ofs_mp_1_4, b2i_ds_output_1_1}[26], {odr_ofs_dp_1_4}[27] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x3FFCE71FFE73, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgb_ir_2_0}[2], + // {ifd_lsc_1_4}[3], {lsc_1_2, gd_2_2, wb_1_1}[4], {rgbs_grid_1_1}[5], + // {ccm_3a_2_0}[6], {fr_grid_1_0}[7], {odr_awb_std_1_4}[8], {odr_awb_sat_1_4}[9], + // {aestatistics_2_1}[10], {odr_ae_1_4}[11], {odr_af_std_1_4}[12], {ifd_gmv_1_4}[13], + // {ifd_segmap_bnlm_1_4}[14], {smurf_bnlm_1_0}[15], {bnlm_3_4, bxt_demosaic, + // vcsc_2_0_b, gltm_2_0}[16], {ifd_segmap_xnr_1_4}[17], {smurf_xnr_1_0}[18], + // {xnr_5_4, vcr_3_1, glim_2_0}[19], {ifd_segmap_acm_1_4}[20], {smurf_acm_1_0}[21], + // {acm_1_2, gammatm_v4, csc_1_1}[22], {b2i_ds_1_1}[23], {lbff_crop_espa_1_4}[24], + // {image_upscaler_1_1}[25], {gmv_statistics_1_1}[26], {odr_gmv_feature_1_4}[27], + // {odr_gmv_match_1_4}[28], {ifd_segmap_cas_1_4}[29], {smurf_cas_1_0}[30], + // {cas_1_1}[31], {odr_ofs_mp_1_4}[32], {b2i_ds_output_1_1}[33], {odr_ofs_dp_1_4}[34] + // } + + uint8_t systemApisSizes[46] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 0 /*rgb_ir_2_0*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_gmv_1_4*/, + 220 /*ifd_segmap_bnlm_1_4*/, + 0 /*smurf_bnlm_1_0*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 220 /*ifd_segmap_xnr_1_4*/, + 0 /*smurf_xnr_1_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 220 /*ifd_segmap_acm_1_4*/, + 0 /*smurf_acm_1_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*image_upscaler_1_1*/, + 20 /*gmv_statistics_1_1*/, + 220 /*odr_gmv_feature_1_4*/, + 220 /*odr_gmv_match_1_4*/, + 220 /*ifd_segmap_cas_1_4*/, + 0 /*smurf_cas_1_0*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[20].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerNoGmvWithTnrWithSapOuterNode::Init( + LbffBayerNoGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 58, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[58] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 14488 /*rgb_ir_2_0*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 38544 /*odr_awb_std_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 35263 /*ifd_segmap_bnlm_1_4*/, + 54924 /*smurf_bnlm_1_0*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 9241 /*ifd_segmap_xnr_1_4*/, + 42329 /*smurf_xnr_1_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 51914 /*ifd_segmap_acm_1_4*/, + 28366 /*smurf_acm_1_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 2495 /*tnr7_spatial_1_1*/, + 29996 /*tnr_scaler_lb_1_1*/, + 23639 /*tnr7_ims_1_2*/, + 47873 /*ifd_segmap_tnr_bc_1_4*/, + 13101 /*smurf_tnr_bc_1_0*/, + 1502 /*tnr7_bc_1_2*/, + 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, + 14619 /*ifd_segmap_tnr_blend_1_4*/, + 42749 /*smurf_tnr_blend_1_0*/, + 20119 /*tnr7_blend_1_1*/, + 5215 /*odr_tnr_fp_yuvn_1_4*/, + 20623 /*tnr_scaler_fp_1_1*/, + 28787 /*image_upscaler_1_1*/, + 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/, + 20893 /*ifd_segmap_cas_1_4*/, + 37468 /*smurf_cas_1_0*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x3BF76B18C3FFE31, + 0x0}; // { ifd_pipe_1_4[0], rgb_ir_2_0[4], ifd_lsc_1_4[5], rgbs_grid_1_1[9], + // ccm_3a_2_0[10], fr_grid_1_0[11], odr_awb_std_1_4[12], odr_awb_sat_1_4[13], + // aestatistics_2_1[14], odr_ae_1_4[15], odr_af_std_1_4[16], + // ifd_tnr_sp_bc_yuv4nm1_1_4[17], ifd_tnr_sp_bc_rs4nm1_1_4[18], + // ifd_tnr_fp_blend_yuvnm1_1_4[19], ifd_segmap_bnlm_1_4[20], smurf_bnlm_1_0[21], + // ifd_segmap_xnr_1_4[26], smurf_xnr_1_0[27], ifd_segmap_acm_1_4[31], + // smurf_acm_1_0[32], b2i_ds_1_1[36], lbff_crop_espa_1_4[37], tnr_scaler_lb_1_1[39], + // ifd_segmap_tnr_bc_1_4[41], smurf_tnr_bc_1_0[42], odr_tnr_sp_bc_rs4n_1_4[44], + // ifd_segmap_tnr_blend_1_4[45], smurf_tnr_blend_1_0[46], odr_tnr_fp_yuvn_1_4[48], + // tnr_scaler_fp_1_1[49], image_upscaler_1_1[50], odr_tnr_scale_fp_yuv4n_1_4[51], + // ifd_segmap_cas_1_4[52], smurf_cas_1_0[53], odr_ofs_mp_1_4[55], + // b2i_ds_output_1_1[56], odr_ofs_dp_1_4[57] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x278EF639C7FF062, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgb_ir_2_0}[1], + // {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, rgbs_grid_1_1, ccm_3a_2_0, + // fr_grid_1_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sat_1_4}[5], + // {aestatistics_2_1}[6], {odr_ae_1_4}[7], {odr_af_std_1_4}[8], + // {ifd_tnr_sp_bc_yuv4nm1_1_4}[9], {ifd_tnr_sp_bc_rs4nm1_1_4}[10], + // {ifd_tnr_fp_blend_yuvnm1_1_4}[11], {ifd_segmap_bnlm_1_4}[12], + // {smurf_bnlm_1_0}[13], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[14], + // {ifd_segmap_xnr_1_4}[15], {smurf_xnr_1_0}[16], {xnr_5_4, vcr_3_1, glim_2_0}[17], + // {ifd_segmap_acm_1_4}[18], {smurf_acm_1_0}[19], {acm_1_2, gammatm_v4, csc_1_1, + // b2i_ds_1_1}[20], {lbff_crop_espa_1_4}[21], {tnr7_spatial_1_1, + // tnr_scaler_lb_1_1}[22], {tnr7_ims_1_2}[23], {ifd_segmap_tnr_bc_1_4}[24], + // {smurf_tnr_bc_1_0}[25], {tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[26], + // {ifd_segmap_tnr_blend_1_4}[27], {smurf_tnr_blend_1_0}[28], {tnr7_blend_1_1, + // odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[29], + // {odr_tnr_scale_fp_yuv4n_1_4}[30], {ifd_segmap_cas_1_4}[31], {smurf_cas_1_0}[32], + // {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[33], {odr_ofs_dp_1_4}[34] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x3FFFFF39C7FFE73, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgb_ir_2_0}[2], + // {ifd_lsc_1_4}[3], {lsc_1_2, gd_2_2, wb_1_1}[4], {rgbs_grid_1_1}[5], + // {ccm_3a_2_0}[6], {fr_grid_1_0}[7], {odr_awb_std_1_4}[8], {odr_awb_sat_1_4}[9], + // {aestatistics_2_1}[10], {odr_ae_1_4}[11], {odr_af_std_1_4}[12], + // {ifd_tnr_sp_bc_yuv4nm1_1_4}[13], {ifd_tnr_sp_bc_rs4nm1_1_4}[14], + // {ifd_tnr_fp_blend_yuvnm1_1_4}[15], {ifd_segmap_bnlm_1_4}[16], + // {smurf_bnlm_1_0}[17], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[18], + // {ifd_segmap_xnr_1_4}[19], {smurf_xnr_1_0}[20], {xnr_5_4, vcr_3_1, glim_2_0}[21], + // {ifd_segmap_acm_1_4}[22], {smurf_acm_1_0}[23], {acm_1_2, gammatm_v4, csc_1_1}[24], + // {b2i_ds_1_1}[25], {lbff_crop_espa_1_4}[26], {tnr7_spatial_1_1}[27], + // {tnr_scaler_lb_1_1}[28], {tnr7_ims_1_2}[29], {ifd_segmap_tnr_bc_1_4}[30], + // {smurf_tnr_bc_1_0}[31], {tnr7_bc_1_2}[32], {odr_tnr_sp_bc_rs4n_1_4}[33], + // {ifd_segmap_tnr_blend_1_4}[34], {smurf_tnr_blend_1_0}[35], {tnr7_blend_1_1}[36], + // {odr_tnr_fp_yuvn_1_4}[37], {tnr_scaler_fp_1_1}[38], {image_upscaler_1_1}[39], + // {odr_tnr_scale_fp_yuv4n_1_4}[40], {ifd_segmap_cas_1_4}[41], {smurf_cas_1_0}[42], + // {cas_1_1}[43], {odr_ofs_mp_1_4}[44], {b2i_ds_output_1_1}[45], {odr_ofs_dp_1_4}[46] + // } + + uint8_t systemApisSizes[58] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 0 /*rgb_ir_2_0*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 220 /*ifd_segmap_bnlm_1_4*/, + 0 /*smurf_bnlm_1_0*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 220 /*ifd_segmap_xnr_1_4*/, + 0 /*smurf_xnr_1_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 220 /*ifd_segmap_acm_1_4*/, + 0 /*smurf_acm_1_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*tnr7_spatial_1_1*/, + 0 /*tnr_scaler_lb_1_1*/, + 0 /*tnr7_ims_1_2*/, + 220 /*ifd_segmap_tnr_bc_1_4*/, + 0 /*smurf_tnr_bc_1_0*/, + 5 /*tnr7_bc_1_2*/, + 220 /*odr_tnr_sp_bc_rs4n_1_4*/, + 220 /*ifd_segmap_tnr_blend_1_4*/, + 0 /*smurf_tnr_blend_1_0*/, + 5 /*tnr7_blend_1_1*/, + 220 /*odr_tnr_fp_yuvn_1_4*/, + 0 /*tnr_scaler_fp_1_1*/, + 0 /*image_upscaler_1_1*/, + 220 /*odr_tnr_scale_fp_yuv4n_1_4*/, + 220 /*ifd_segmap_cas_1_4*/, + 0 /*smurf_cas_1_0*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[22].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerWithGmvWithTnrWithSapOuterNode::Init( + LbffBayerWithGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 62, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[62] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 14488 /*rgb_ir_2_0*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 38544 /*odr_awb_std_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 51073 /*ifd_gmv_1_4*/, + 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 35263 /*ifd_segmap_bnlm_1_4*/, + 54924 /*smurf_bnlm_1_0*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 9241 /*ifd_segmap_xnr_1_4*/, + 42329 /*smurf_xnr_1_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 51914 /*ifd_segmap_acm_1_4*/, + 28366 /*smurf_acm_1_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 2495 /*tnr7_spatial_1_1*/, + 29996 /*tnr_scaler_lb_1_1*/, + 23639 /*tnr7_ims_1_2*/, + 40280 /*gmv_statistics_1_1*/, + 7416 /*odr_gmv_feature_1_4*/, + 41148 /*odr_gmv_match_1_4*/, + 47873 /*ifd_segmap_tnr_bc_1_4*/, + 13101 /*smurf_tnr_bc_1_0*/, + 1502 /*tnr7_bc_1_2*/, + 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, + 14619 /*ifd_segmap_tnr_blend_1_4*/, + 42749 /*smurf_tnr_blend_1_0*/, + 20119 /*tnr7_blend_1_1*/, + 5215 /*odr_tnr_fp_yuvn_1_4*/, + 20623 /*tnr_scaler_fp_1_1*/, + 28787 /*image_upscaler_1_1*/, + 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/, + 20893 /*ifd_segmap_cas_1_4*/, + 37468 /*smurf_cas_1_0*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x3BF77D63187FFE31, + 0x0}; // { ifd_pipe_1_4[0], rgb_ir_2_0[4], ifd_lsc_1_4[5], rgbs_grid_1_1[9], + // ccm_3a_2_0[10], fr_grid_1_0[11], odr_awb_std_1_4[12], odr_awb_sat_1_4[13], + // aestatistics_2_1[14], odr_ae_1_4[15], odr_af_std_1_4[16], ifd_gmv_1_4[17], + // ifd_tnr_sp_bc_yuv4nm1_1_4[18], ifd_tnr_sp_bc_rs4nm1_1_4[19], + // ifd_tnr_fp_blend_yuvnm1_1_4[20], ifd_segmap_bnlm_1_4[21], smurf_bnlm_1_0[22], + // ifd_segmap_xnr_1_4[27], smurf_xnr_1_0[28], ifd_segmap_acm_1_4[32], + // smurf_acm_1_0[33], b2i_ds_1_1[37], lbff_crop_espa_1_4[38], tnr_scaler_lb_1_1[40], + // gmv_statistics_1_1[42], odr_gmv_feature_1_4[43], odr_gmv_match_1_4[44], + // ifd_segmap_tnr_bc_1_4[45], smurf_tnr_bc_1_0[46], odr_tnr_sp_bc_rs4n_1_4[48], + // ifd_segmap_tnr_blend_1_4[49], smurf_tnr_blend_1_0[50], odr_tnr_fp_yuvn_1_4[52], + // tnr_scaler_fp_1_1[53], image_upscaler_1_1[54], odr_tnr_scale_fp_yuv4n_1_4[55], + // ifd_segmap_cas_1_4[56], smurf_cas_1_0[57], odr_ofs_mp_1_4[59], + // b2i_ds_output_1_1[60], odr_ofs_dp_1_4[61] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x278EFEC738FFF062, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgb_ir_2_0}[1], + // {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, rgbs_grid_1_1, ccm_3a_2_0, + // fr_grid_1_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sat_1_4}[5], + // {aestatistics_2_1}[6], {odr_ae_1_4}[7], {odr_af_std_1_4}[8], {ifd_gmv_1_4}[9], + // {ifd_tnr_sp_bc_yuv4nm1_1_4}[10], {ifd_tnr_sp_bc_rs4nm1_1_4}[11], + // {ifd_tnr_fp_blend_yuvnm1_1_4}[12], {ifd_segmap_bnlm_1_4}[13], + // {smurf_bnlm_1_0}[14], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[15], + // {ifd_segmap_xnr_1_4}[16], {smurf_xnr_1_0}[17], {xnr_5_4, vcr_3_1, glim_2_0}[18], + // {ifd_segmap_acm_1_4}[19], {smurf_acm_1_0}[20], {acm_1_2, gammatm_v4, csc_1_1, + // b2i_ds_1_1}[21], {lbff_crop_espa_1_4}[22], {tnr7_spatial_1_1, + // tnr_scaler_lb_1_1}[23], {tnr7_ims_1_2}[24], {gmv_statistics_1_1}[25], + // {odr_gmv_feature_1_4}[26], {odr_gmv_match_1_4}[27], {ifd_segmap_tnr_bc_1_4}[28], + // {smurf_tnr_bc_1_0}[29], {tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[30], + // {ifd_segmap_tnr_blend_1_4}[31], {smurf_tnr_blend_1_0}[32], {tnr7_blend_1_1, + // odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[33], + // {odr_tnr_scale_fp_yuv4n_1_4}[34], {ifd_segmap_cas_1_4}[35], {smurf_cas_1_0}[36], + // {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[37], {odr_ofs_dp_1_4}[38] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x3FFFFFE738FFFE73, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgb_ir_2_0}[2], + // {ifd_lsc_1_4}[3], {lsc_1_2, gd_2_2, wb_1_1}[4], {rgbs_grid_1_1}[5], + // {ccm_3a_2_0}[6], {fr_grid_1_0}[7], {odr_awb_std_1_4}[8], {odr_awb_sat_1_4}[9], + // {aestatistics_2_1}[10], {odr_ae_1_4}[11], {odr_af_std_1_4}[12], {ifd_gmv_1_4}[13], + // {ifd_tnr_sp_bc_yuv4nm1_1_4}[14], {ifd_tnr_sp_bc_rs4nm1_1_4}[15], + // {ifd_tnr_fp_blend_yuvnm1_1_4}[16], {ifd_segmap_bnlm_1_4}[17], + // {smurf_bnlm_1_0}[18], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[19], + // {ifd_segmap_xnr_1_4}[20], {smurf_xnr_1_0}[21], {xnr_5_4, vcr_3_1, glim_2_0}[22], + // {ifd_segmap_acm_1_4}[23], {smurf_acm_1_0}[24], {acm_1_2, gammatm_v4, csc_1_1}[25], + // {b2i_ds_1_1}[26], {lbff_crop_espa_1_4}[27], {tnr7_spatial_1_1}[28], + // {tnr_scaler_lb_1_1}[29], {tnr7_ims_1_2}[30], {gmv_statistics_1_1}[31], + // {odr_gmv_feature_1_4}[32], {odr_gmv_match_1_4}[33], {ifd_segmap_tnr_bc_1_4}[34], + // {smurf_tnr_bc_1_0}[35], {tnr7_bc_1_2}[36], {odr_tnr_sp_bc_rs4n_1_4}[37], + // {ifd_segmap_tnr_blend_1_4}[38], {smurf_tnr_blend_1_0}[39], {tnr7_blend_1_1}[40], + // {odr_tnr_fp_yuvn_1_4}[41], {tnr_scaler_fp_1_1}[42], {image_upscaler_1_1}[43], + // {odr_tnr_scale_fp_yuv4n_1_4}[44], {ifd_segmap_cas_1_4}[45], {smurf_cas_1_0}[46], + // {cas_1_1}[47], {odr_ofs_mp_1_4}[48], {b2i_ds_output_1_1}[49], {odr_ofs_dp_1_4}[50] + // } + + uint8_t systemApisSizes[62] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 0 /*rgb_ir_2_0*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_gmv_1_4*/, + 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 220 /*ifd_segmap_bnlm_1_4*/, + 0 /*smurf_bnlm_1_0*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 220 /*ifd_segmap_xnr_1_4*/, + 0 /*smurf_xnr_1_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 220 /*ifd_segmap_acm_1_4*/, + 0 /*smurf_acm_1_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*tnr7_spatial_1_1*/, + 0 /*tnr_scaler_lb_1_1*/, + 0 /*tnr7_ims_1_2*/, + 20 /*gmv_statistics_1_1*/, + 220 /*odr_gmv_feature_1_4*/, + 220 /*odr_gmv_match_1_4*/, + 220 /*ifd_segmap_tnr_bc_1_4*/, + 0 /*smurf_tnr_bc_1_0*/, + 5 /*tnr7_bc_1_2*/, + 220 /*odr_tnr_sp_bc_rs4n_1_4*/, + 220 /*ifd_segmap_tnr_blend_1_4*/, + 0 /*smurf_tnr_blend_1_0*/, + 5 /*tnr7_blend_1_1*/, + 220 /*odr_tnr_fp_yuvn_1_4*/, + 0 /*tnr_scaler_fp_1_1*/, + 0 /*image_upscaler_1_1*/, + 220 /*odr_tnr_scale_fp_yuv4n_1_4*/, + 220 /*ifd_segmap_cas_1_4*/, + 0 /*smurf_cas_1_0*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[23].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void IsysPdaf2WithCvOuterNode::Init( + IsysPdaf2WithCvOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(2, NodeTypes::Isys, 5, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[5] = {36280 /*crop_bpp_adjust_1_0*/, 5420 /*upipe_1_0*/, + 26150 /*isys_drainer_1_0*/, 11470 /*is_odr_a*/, 55449 /*is_odr_b*/}; + uint64_t kernelsRcbBitmap[] = { + 0x1B, 0x0}; // { crop_bpp_adjust_1_0[0], upipe_1_0[1], is_odr_a[3], is_odr_b[4] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x1E, 0x0}; // {{crop_bpp_adjust_1_0}[0], {upipe_1_0}[1], {isys_drainer_1_0}[2], + // {is_odr_a}[3], {is_odr_b}[4] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x1F, 0x0}; // {{crop_bpp_adjust_1_0}[0], {upipe_1_0}[1], {isys_drainer_1_0}[2], + // {is_odr_a}[3], {is_odr_b}[4] } + + uint8_t systemApisSizes[5] = {0 /*crop_bpp_adjust_1_0*/, 34 /*upipe_1_0*/, + 20 /*isys_drainer_1_0*/, 0 /*is_odr_a*/, 0 /*is_odr_b*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf2NoGmvNoTnrWithSapOuterNode::Init( + LbffBayerPdaf2NoGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 46, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[46] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 14488 /*rgb_ir_2_0*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 38544 /*odr_awb_std_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 22427 /*ifd_pdaf_1_4*/, + 43213 /*pext_1_0*/, + 44308 /*pafstatistics_1_2*/, + 26892 /*odr_pdaf_1_4*/, + 35263 /*ifd_segmap_bnlm_1_4*/, + 54924 /*smurf_bnlm_1_0*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 9241 /*ifd_segmap_xnr_1_4*/, + 42329 /*smurf_xnr_1_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 51914 /*ifd_segmap_acm_1_4*/, + 28366 /*smurf_acm_1_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 28787 /*image_upscaler_1_1*/, + 20893 /*ifd_segmap_cas_1_4*/, + 37468 /*smurf_cas_1_0*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x3BE3187FFE31, + 0x0}; // { ifd_pipe_1_4[0], rgb_ir_2_0[4], ifd_lsc_1_4[5], rgbs_grid_1_1[9], + // ccm_3a_2_0[10], fr_grid_1_0[11], odr_awb_std_1_4[12], odr_awb_sat_1_4[13], + // aestatistics_2_1[14], odr_ae_1_4[15], odr_af_std_1_4[16], ifd_pdaf_1_4[17], + // pext_1_0[18], pafstatistics_1_2[19], odr_pdaf_1_4[20], ifd_segmap_bnlm_1_4[21], + // smurf_bnlm_1_0[22], ifd_segmap_xnr_1_4[27], smurf_xnr_1_0[28], + // ifd_segmap_acm_1_4[32], smurf_acm_1_0[33], b2i_ds_1_1[37], lbff_crop_espa_1_4[38], + // image_upscaler_1_1[39], ifd_segmap_cas_1_4[40], smurf_cas_1_0[41], + // odr_ofs_mp_1_4[43], b2i_ds_output_1_1[44], odr_ofs_dp_1_4[45] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x27C738FFF062, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgb_ir_2_0}[1], + // {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, rgbs_grid_1_1, ccm_3a_2_0, + // fr_grid_1_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sat_1_4}[5], + // {aestatistics_2_1}[6], {odr_ae_1_4}[7], {odr_af_std_1_4}[8], {ifd_pdaf_1_4}[9], + // {pext_1_0}[10], {pafstatistics_1_2}[11], {odr_pdaf_1_4}[12], + // {ifd_segmap_bnlm_1_4}[13], {smurf_bnlm_1_0}[14], {bnlm_3_4, bxt_demosaic, + // vcsc_2_0_b, gltm_2_0}[15], {ifd_segmap_xnr_1_4}[16], {smurf_xnr_1_0}[17], + // {xnr_5_4, vcr_3_1, glim_2_0}[18], {ifd_segmap_acm_1_4}[19], {smurf_acm_1_0}[20], + // {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[21], {lbff_crop_espa_1_4}[22], + // {image_upscaler_1_1}[23], {ifd_segmap_cas_1_4}[24], {smurf_cas_1_0}[25], {cas_1_1, + // odr_ofs_mp_1_4, b2i_ds_output_1_1}[26], {odr_ofs_dp_1_4}[27] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x3FE738FFFE73, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgb_ir_2_0}[2], + // {ifd_lsc_1_4}[3], {lsc_1_2, gd_2_2, wb_1_1}[4], {rgbs_grid_1_1}[5], + // {ccm_3a_2_0}[6], {fr_grid_1_0}[7], {odr_awb_std_1_4}[8], {odr_awb_sat_1_4}[9], + // {aestatistics_2_1}[10], {odr_ae_1_4}[11], {odr_af_std_1_4}[12], + // {ifd_pdaf_1_4}[13], {pext_1_0}[14], {pafstatistics_1_2}[15], {odr_pdaf_1_4}[16], + // {ifd_segmap_bnlm_1_4}[17], {smurf_bnlm_1_0}[18], {bnlm_3_4, bxt_demosaic, + // vcsc_2_0_b, gltm_2_0}[19], {ifd_segmap_xnr_1_4}[20], {smurf_xnr_1_0}[21], + // {xnr_5_4, vcr_3_1, glim_2_0}[22], {ifd_segmap_acm_1_4}[23], {smurf_acm_1_0}[24], + // {acm_1_2, gammatm_v4, csc_1_1}[25], {b2i_ds_1_1}[26], {lbff_crop_espa_1_4}[27], + // {image_upscaler_1_1}[28], {ifd_segmap_cas_1_4}[29], {smurf_cas_1_0}[30], + // {cas_1_1}[31], {odr_ofs_mp_1_4}[32], {b2i_ds_output_1_1}[33], {odr_ofs_dp_1_4}[34] + // } + + uint8_t systemApisSizes[46] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 0 /*rgb_ir_2_0*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_pdaf_1_4*/, + 24 /*pext_1_0*/, + 8 /*pafstatistics_1_2*/, + 220 /*odr_pdaf_1_4*/, + 220 /*ifd_segmap_bnlm_1_4*/, + 0 /*smurf_bnlm_1_0*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 220 /*ifd_segmap_xnr_1_4*/, + 0 /*smurf_xnr_1_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 220 /*ifd_segmap_acm_1_4*/, + 0 /*smurf_acm_1_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*image_upscaler_1_1*/, + 220 /*ifd_segmap_cas_1_4*/, + 0 /*smurf_cas_1_0*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[23].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf2WithGmvNoTnrWithSapOuterNode::Init( + LbffBayerPdaf2WithGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 50, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[50] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 14488 /*rgb_ir_2_0*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 38544 /*odr_awb_std_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 22427 /*ifd_pdaf_1_4*/, + 43213 /*pext_1_0*/, + 44308 /*pafstatistics_1_2*/, + 26892 /*odr_pdaf_1_4*/, + 51073 /*ifd_gmv_1_4*/, + 35263 /*ifd_segmap_bnlm_1_4*/, + 54924 /*smurf_bnlm_1_0*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 9241 /*ifd_segmap_xnr_1_4*/, + 42329 /*smurf_xnr_1_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 51914 /*ifd_segmap_acm_1_4*/, + 28366 /*smurf_acm_1_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 28787 /*image_upscaler_1_1*/, + 40280 /*gmv_statistics_1_1*/, + 7416 /*odr_gmv_feature_1_4*/, + 41148 /*odr_gmv_match_1_4*/, + 20893 /*ifd_segmap_cas_1_4*/, + 37468 /*smurf_cas_1_0*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x3BFC630FFFE31, + 0x0}; // { ifd_pipe_1_4[0], rgb_ir_2_0[4], ifd_lsc_1_4[5], rgbs_grid_1_1[9], + // ccm_3a_2_0[10], fr_grid_1_0[11], odr_awb_std_1_4[12], odr_awb_sat_1_4[13], + // aestatistics_2_1[14], odr_ae_1_4[15], odr_af_std_1_4[16], ifd_pdaf_1_4[17], + // pext_1_0[18], pafstatistics_1_2[19], odr_pdaf_1_4[20], ifd_gmv_1_4[21], + // ifd_segmap_bnlm_1_4[22], smurf_bnlm_1_0[23], ifd_segmap_xnr_1_4[28], + // smurf_xnr_1_0[29], ifd_segmap_acm_1_4[33], smurf_acm_1_0[34], b2i_ds_1_1[38], + // lbff_crop_espa_1_4[39], image_upscaler_1_1[40], gmv_statistics_1_1[41], + // odr_gmv_feature_1_4[42], odr_gmv_match_1_4[43], ifd_segmap_cas_1_4[44], + // smurf_cas_1_0[45], odr_ofs_mp_1_4[47], b2i_ds_output_1_1[48], odr_ofs_dp_1_4[49] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x27F8E71FFF062, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgb_ir_2_0}[1], + // {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, rgbs_grid_1_1, ccm_3a_2_0, + // fr_grid_1_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sat_1_4}[5], + // {aestatistics_2_1}[6], {odr_ae_1_4}[7], {odr_af_std_1_4}[8], {ifd_pdaf_1_4}[9], + // {pext_1_0}[10], {pafstatistics_1_2}[11], {odr_pdaf_1_4}[12], {ifd_gmv_1_4}[13], + // {ifd_segmap_bnlm_1_4}[14], {smurf_bnlm_1_0}[15], {bnlm_3_4, bxt_demosaic, + // vcsc_2_0_b, gltm_2_0}[16], {ifd_segmap_xnr_1_4}[17], {smurf_xnr_1_0}[18], + // {xnr_5_4, vcr_3_1, glim_2_0}[19], {ifd_segmap_acm_1_4}[20], {smurf_acm_1_0}[21], + // {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[22], {lbff_crop_espa_1_4}[23], + // {image_upscaler_1_1}[24], {gmv_statistics_1_1}[25], {odr_gmv_feature_1_4}[26], + // {odr_gmv_match_1_4}[27], {ifd_segmap_cas_1_4}[28], {smurf_cas_1_0}[29], {cas_1_1, + // odr_ofs_mp_1_4, b2i_ds_output_1_1}[30], {odr_ofs_dp_1_4}[31] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x3FFCE71FFFE73, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgb_ir_2_0}[2], + // {ifd_lsc_1_4}[3], {lsc_1_2, gd_2_2, wb_1_1}[4], {rgbs_grid_1_1}[5], + // {ccm_3a_2_0}[6], {fr_grid_1_0}[7], {odr_awb_std_1_4}[8], {odr_awb_sat_1_4}[9], + // {aestatistics_2_1}[10], {odr_ae_1_4}[11], {odr_af_std_1_4}[12], + // {ifd_pdaf_1_4}[13], {pext_1_0}[14], {pafstatistics_1_2}[15], {odr_pdaf_1_4}[16], + // {ifd_gmv_1_4}[17], {ifd_segmap_bnlm_1_4}[18], {smurf_bnlm_1_0}[19], {bnlm_3_4, + // bxt_demosaic, vcsc_2_0_b, gltm_2_0}[20], {ifd_segmap_xnr_1_4}[21], + // {smurf_xnr_1_0}[22], {xnr_5_4, vcr_3_1, glim_2_0}[23], {ifd_segmap_acm_1_4}[24], + // {smurf_acm_1_0}[25], {acm_1_2, gammatm_v4, csc_1_1}[26], {b2i_ds_1_1}[27], + // {lbff_crop_espa_1_4}[28], {image_upscaler_1_1}[29], {gmv_statistics_1_1}[30], + // {odr_gmv_feature_1_4}[31], {odr_gmv_match_1_4}[32], {ifd_segmap_cas_1_4}[33], + // {smurf_cas_1_0}[34], {cas_1_1}[35], {odr_ofs_mp_1_4}[36], {b2i_ds_output_1_1}[37], + // {odr_ofs_dp_1_4}[38] } + + uint8_t systemApisSizes[50] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 0 /*rgb_ir_2_0*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_pdaf_1_4*/, + 24 /*pext_1_0*/, + 8 /*pafstatistics_1_2*/, + 220 /*odr_pdaf_1_4*/, + 220 /*ifd_gmv_1_4*/, + 220 /*ifd_segmap_bnlm_1_4*/, + 0 /*smurf_bnlm_1_0*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 220 /*ifd_segmap_xnr_1_4*/, + 0 /*smurf_xnr_1_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 220 /*ifd_segmap_acm_1_4*/, + 0 /*smurf_acm_1_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*image_upscaler_1_1*/, + 20 /*gmv_statistics_1_1*/, + 220 /*odr_gmv_feature_1_4*/, + 220 /*odr_gmv_match_1_4*/, + 220 /*ifd_segmap_cas_1_4*/, + 0 /*smurf_cas_1_0*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[24].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf2NoGmvWithTnrWithSapOuterNode::Init( + LbffBayerPdaf2NoGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 62, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[62] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 14488 /*rgb_ir_2_0*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 38544 /*odr_awb_std_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 22427 /*ifd_pdaf_1_4*/, + 43213 /*pext_1_0*/, + 44308 /*pafstatistics_1_2*/, + 26892 /*odr_pdaf_1_4*/, + 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 35263 /*ifd_segmap_bnlm_1_4*/, + 54924 /*smurf_bnlm_1_0*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 9241 /*ifd_segmap_xnr_1_4*/, + 42329 /*smurf_xnr_1_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 51914 /*ifd_segmap_acm_1_4*/, + 28366 /*smurf_acm_1_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 2495 /*tnr7_spatial_1_1*/, + 29996 /*tnr_scaler_lb_1_1*/, + 23639 /*tnr7_ims_1_2*/, + 47873 /*ifd_segmap_tnr_bc_1_4*/, + 13101 /*smurf_tnr_bc_1_0*/, + 1502 /*tnr7_bc_1_2*/, + 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, + 14619 /*ifd_segmap_tnr_blend_1_4*/, + 42749 /*smurf_tnr_blend_1_0*/, + 20119 /*tnr7_blend_1_1*/, + 5215 /*odr_tnr_fp_yuvn_1_4*/, + 20623 /*tnr_scaler_fp_1_1*/, + 28787 /*image_upscaler_1_1*/, + 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/, + 20893 /*ifd_segmap_cas_1_4*/, + 37468 /*smurf_cas_1_0*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x3BF76B18C3FFFE31, + 0x0}; // { ifd_pipe_1_4[0], rgb_ir_2_0[4], ifd_lsc_1_4[5], rgbs_grid_1_1[9], + // ccm_3a_2_0[10], fr_grid_1_0[11], odr_awb_std_1_4[12], odr_awb_sat_1_4[13], + // aestatistics_2_1[14], odr_ae_1_4[15], odr_af_std_1_4[16], ifd_pdaf_1_4[17], + // pext_1_0[18], pafstatistics_1_2[19], odr_pdaf_1_4[20], + // ifd_tnr_sp_bc_yuv4nm1_1_4[21], ifd_tnr_sp_bc_rs4nm1_1_4[22], + // ifd_tnr_fp_blend_yuvnm1_1_4[23], ifd_segmap_bnlm_1_4[24], smurf_bnlm_1_0[25], + // ifd_segmap_xnr_1_4[30], smurf_xnr_1_0[31], ifd_segmap_acm_1_4[35], + // smurf_acm_1_0[36], b2i_ds_1_1[40], lbff_crop_espa_1_4[41], tnr_scaler_lb_1_1[43], + // ifd_segmap_tnr_bc_1_4[45], smurf_tnr_bc_1_0[46], odr_tnr_sp_bc_rs4n_1_4[48], + // ifd_segmap_tnr_blend_1_4[49], smurf_tnr_blend_1_0[50], odr_tnr_fp_yuvn_1_4[52], + // tnr_scaler_fp_1_1[53], image_upscaler_1_1[54], odr_tnr_scale_fp_yuv4n_1_4[55], + // ifd_segmap_cas_1_4[56], smurf_cas_1_0[57], odr_ofs_mp_1_4[59], + // b2i_ds_output_1_1[60], odr_ofs_dp_1_4[61] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x278EF639C7FFF062, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgb_ir_2_0}[1], + // {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, rgbs_grid_1_1, ccm_3a_2_0, + // fr_grid_1_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sat_1_4}[5], + // {aestatistics_2_1}[6], {odr_ae_1_4}[7], {odr_af_std_1_4}[8], {ifd_pdaf_1_4}[9], + // {pext_1_0}[10], {pafstatistics_1_2}[11], {odr_pdaf_1_4}[12], + // {ifd_tnr_sp_bc_yuv4nm1_1_4}[13], {ifd_tnr_sp_bc_rs4nm1_1_4}[14], + // {ifd_tnr_fp_blend_yuvnm1_1_4}[15], {ifd_segmap_bnlm_1_4}[16], + // {smurf_bnlm_1_0}[17], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[18], + // {ifd_segmap_xnr_1_4}[19], {smurf_xnr_1_0}[20], {xnr_5_4, vcr_3_1, glim_2_0}[21], + // {ifd_segmap_acm_1_4}[22], {smurf_acm_1_0}[23], {acm_1_2, gammatm_v4, csc_1_1, + // b2i_ds_1_1}[24], {lbff_crop_espa_1_4}[25], {tnr7_spatial_1_1, + // tnr_scaler_lb_1_1}[26], {tnr7_ims_1_2}[27], {ifd_segmap_tnr_bc_1_4}[28], + // {smurf_tnr_bc_1_0}[29], {tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[30], + // {ifd_segmap_tnr_blend_1_4}[31], {smurf_tnr_blend_1_0}[32], {tnr7_blend_1_1, + // odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[33], + // {odr_tnr_scale_fp_yuv4n_1_4}[34], {ifd_segmap_cas_1_4}[35], {smurf_cas_1_0}[36], + // {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[37], {odr_ofs_dp_1_4}[38] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x3FFFFF39C7FFFE73, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgb_ir_2_0}[2], + // {ifd_lsc_1_4}[3], {lsc_1_2, gd_2_2, wb_1_1}[4], {rgbs_grid_1_1}[5], + // {ccm_3a_2_0}[6], {fr_grid_1_0}[7], {odr_awb_std_1_4}[8], {odr_awb_sat_1_4}[9], + // {aestatistics_2_1}[10], {odr_ae_1_4}[11], {odr_af_std_1_4}[12], + // {ifd_pdaf_1_4}[13], {pext_1_0}[14], {pafstatistics_1_2}[15], {odr_pdaf_1_4}[16], + // {ifd_tnr_sp_bc_yuv4nm1_1_4}[17], {ifd_tnr_sp_bc_rs4nm1_1_4}[18], + // {ifd_tnr_fp_blend_yuvnm1_1_4}[19], {ifd_segmap_bnlm_1_4}[20], + // {smurf_bnlm_1_0}[21], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[22], + // {ifd_segmap_xnr_1_4}[23], {smurf_xnr_1_0}[24], {xnr_5_4, vcr_3_1, glim_2_0}[25], + // {ifd_segmap_acm_1_4}[26], {smurf_acm_1_0}[27], {acm_1_2, gammatm_v4, csc_1_1}[28], + // {b2i_ds_1_1}[29], {lbff_crop_espa_1_4}[30], {tnr7_spatial_1_1}[31], + // {tnr_scaler_lb_1_1}[32], {tnr7_ims_1_2}[33], {ifd_segmap_tnr_bc_1_4}[34], + // {smurf_tnr_bc_1_0}[35], {tnr7_bc_1_2}[36], {odr_tnr_sp_bc_rs4n_1_4}[37], + // {ifd_segmap_tnr_blend_1_4}[38], {smurf_tnr_blend_1_0}[39], {tnr7_blend_1_1}[40], + // {odr_tnr_fp_yuvn_1_4}[41], {tnr_scaler_fp_1_1}[42], {image_upscaler_1_1}[43], + // {odr_tnr_scale_fp_yuv4n_1_4}[44], {ifd_segmap_cas_1_4}[45], {smurf_cas_1_0}[46], + // {cas_1_1}[47], {odr_ofs_mp_1_4}[48], {b2i_ds_output_1_1}[49], {odr_ofs_dp_1_4}[50] + // } + + uint8_t systemApisSizes[62] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 0 /*rgb_ir_2_0*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_pdaf_1_4*/, + 24 /*pext_1_0*/, + 8 /*pafstatistics_1_2*/, + 220 /*odr_pdaf_1_4*/, + 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 220 /*ifd_segmap_bnlm_1_4*/, + 0 /*smurf_bnlm_1_0*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 220 /*ifd_segmap_xnr_1_4*/, + 0 /*smurf_xnr_1_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 220 /*ifd_segmap_acm_1_4*/, + 0 /*smurf_acm_1_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*tnr7_spatial_1_1*/, + 0 /*tnr_scaler_lb_1_1*/, + 0 /*tnr7_ims_1_2*/, + 220 /*ifd_segmap_tnr_bc_1_4*/, + 0 /*smurf_tnr_bc_1_0*/, + 5 /*tnr7_bc_1_2*/, + 220 /*odr_tnr_sp_bc_rs4n_1_4*/, + 220 /*ifd_segmap_tnr_blend_1_4*/, + 0 /*smurf_tnr_blend_1_0*/, + 5 /*tnr7_blend_1_1*/, + 220 /*odr_tnr_fp_yuvn_1_4*/, + 0 /*tnr_scaler_fp_1_1*/, + 0 /*image_upscaler_1_1*/, + 220 /*odr_tnr_scale_fp_yuv4n_1_4*/, + 220 /*ifd_segmap_cas_1_4*/, + 0 /*smurf_cas_1_0*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[26].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf2WithGmvWithTnrWithSapOuterNode::Init( + LbffBayerPdaf2WithGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 66, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[66] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 14488 /*rgb_ir_2_0*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 38544 /*odr_awb_std_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 22427 /*ifd_pdaf_1_4*/, + 43213 /*pext_1_0*/, + 44308 /*pafstatistics_1_2*/, + 26892 /*odr_pdaf_1_4*/, + 51073 /*ifd_gmv_1_4*/, + 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 35263 /*ifd_segmap_bnlm_1_4*/, + 54924 /*smurf_bnlm_1_0*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 9241 /*ifd_segmap_xnr_1_4*/, + 42329 /*smurf_xnr_1_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 51914 /*ifd_segmap_acm_1_4*/, + 28366 /*smurf_acm_1_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 2495 /*tnr7_spatial_1_1*/, + 29996 /*tnr_scaler_lb_1_1*/, + 23639 /*tnr7_ims_1_2*/, + 40280 /*gmv_statistics_1_1*/, + 7416 /*odr_gmv_feature_1_4*/, + 41148 /*odr_gmv_match_1_4*/, + 47873 /*ifd_segmap_tnr_bc_1_4*/, + 13101 /*smurf_tnr_bc_1_0*/, + 1502 /*tnr7_bc_1_2*/, + 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, + 14619 /*ifd_segmap_tnr_blend_1_4*/, + 42749 /*smurf_tnr_blend_1_0*/, + 20119 /*tnr7_blend_1_1*/, + 5215 /*odr_tnr_fp_yuvn_1_4*/, + 20623 /*tnr_scaler_fp_1_1*/, + 28787 /*image_upscaler_1_1*/, + 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/, + 20893 /*ifd_segmap_cas_1_4*/, + 37468 /*smurf_cas_1_0*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0xBF77D63187FFFE31, + 0x3}; // { ifd_pipe_1_4[0], rgb_ir_2_0[4], ifd_lsc_1_4[5], rgbs_grid_1_1[9], + // ccm_3a_2_0[10], fr_grid_1_0[11], odr_awb_std_1_4[12], odr_awb_sat_1_4[13], + // aestatistics_2_1[14], odr_ae_1_4[15], odr_af_std_1_4[16], ifd_pdaf_1_4[17], + // pext_1_0[18], pafstatistics_1_2[19], odr_pdaf_1_4[20], ifd_gmv_1_4[21], + // ifd_tnr_sp_bc_yuv4nm1_1_4[22], ifd_tnr_sp_bc_rs4nm1_1_4[23], + // ifd_tnr_fp_blend_yuvnm1_1_4[24], ifd_segmap_bnlm_1_4[25], smurf_bnlm_1_0[26], + // ifd_segmap_xnr_1_4[31], smurf_xnr_1_0[32], ifd_segmap_acm_1_4[36], + // smurf_acm_1_0[37], b2i_ds_1_1[41], lbff_crop_espa_1_4[42], tnr_scaler_lb_1_1[44], + // gmv_statistics_1_1[46], odr_gmv_feature_1_4[47], odr_gmv_match_1_4[48], + // ifd_segmap_tnr_bc_1_4[49], smurf_tnr_bc_1_0[50], odr_tnr_sp_bc_rs4n_1_4[52], + // ifd_segmap_tnr_blend_1_4[53], smurf_tnr_blend_1_0[54], odr_tnr_fp_yuvn_1_4[56], + // tnr_scaler_fp_1_1[57], image_upscaler_1_1[58], odr_tnr_scale_fp_yuv4n_1_4[59], + // ifd_segmap_cas_1_4[60], smurf_cas_1_0[61], odr_ofs_mp_1_4[63], + // b2i_ds_output_1_1[64], odr_ofs_dp_1_4[65] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x78EFEC738FFFF062, + 0x2}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgb_ir_2_0}[1], + // {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, rgbs_grid_1_1, ccm_3a_2_0, + // fr_grid_1_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sat_1_4}[5], + // {aestatistics_2_1}[6], {odr_ae_1_4}[7], {odr_af_std_1_4}[8], {ifd_pdaf_1_4}[9], + // {pext_1_0}[10], {pafstatistics_1_2}[11], {odr_pdaf_1_4}[12], {ifd_gmv_1_4}[13], + // {ifd_tnr_sp_bc_yuv4nm1_1_4}[14], {ifd_tnr_sp_bc_rs4nm1_1_4}[15], + // {ifd_tnr_fp_blend_yuvnm1_1_4}[16], {ifd_segmap_bnlm_1_4}[17], + // {smurf_bnlm_1_0}[18], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[19], + // {ifd_segmap_xnr_1_4}[20], {smurf_xnr_1_0}[21], {xnr_5_4, vcr_3_1, glim_2_0}[22], + // {ifd_segmap_acm_1_4}[23], {smurf_acm_1_0}[24], {acm_1_2, gammatm_v4, csc_1_1, + // b2i_ds_1_1}[25], {lbff_crop_espa_1_4}[26], {tnr7_spatial_1_1, + // tnr_scaler_lb_1_1}[27], {tnr7_ims_1_2}[28], {gmv_statistics_1_1}[29], + // {odr_gmv_feature_1_4}[30], {odr_gmv_match_1_4}[31], {ifd_segmap_tnr_bc_1_4}[32], + // {smurf_tnr_bc_1_0}[33], {tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[34], + // {ifd_segmap_tnr_blend_1_4}[35], {smurf_tnr_blend_1_0}[36], {tnr7_blend_1_1, + // odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[37], + // {odr_tnr_scale_fp_yuv4n_1_4}[38], {ifd_segmap_cas_1_4}[39], {smurf_cas_1_0}[40], + // {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[41], {odr_ofs_dp_1_4}[42] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0xFFFFFE738FFFFE73, + 0x3}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgb_ir_2_0}[2], + // {ifd_lsc_1_4}[3], {lsc_1_2, gd_2_2, wb_1_1}[4], {rgbs_grid_1_1}[5], + // {ccm_3a_2_0}[6], {fr_grid_1_0}[7], {odr_awb_std_1_4}[8], {odr_awb_sat_1_4}[9], + // {aestatistics_2_1}[10], {odr_ae_1_4}[11], {odr_af_std_1_4}[12], + // {ifd_pdaf_1_4}[13], {pext_1_0}[14], {pafstatistics_1_2}[15], {odr_pdaf_1_4}[16], + // {ifd_gmv_1_4}[17], {ifd_tnr_sp_bc_yuv4nm1_1_4}[18], + // {ifd_tnr_sp_bc_rs4nm1_1_4}[19], {ifd_tnr_fp_blend_yuvnm1_1_4}[20], + // {ifd_segmap_bnlm_1_4}[21], {smurf_bnlm_1_0}[22], {bnlm_3_4, bxt_demosaic, + // vcsc_2_0_b, gltm_2_0}[23], {ifd_segmap_xnr_1_4}[24], {smurf_xnr_1_0}[25], + // {xnr_5_4, vcr_3_1, glim_2_0}[26], {ifd_segmap_acm_1_4}[27], {smurf_acm_1_0}[28], + // {acm_1_2, gammatm_v4, csc_1_1}[29], {b2i_ds_1_1}[30], {lbff_crop_espa_1_4}[31], + // {tnr7_spatial_1_1}[32], {tnr_scaler_lb_1_1}[33], {tnr7_ims_1_2}[34], + // {gmv_statistics_1_1}[35], {odr_gmv_feature_1_4}[36], {odr_gmv_match_1_4}[37], + // {ifd_segmap_tnr_bc_1_4}[38], {smurf_tnr_bc_1_0}[39], {tnr7_bc_1_2}[40], + // {odr_tnr_sp_bc_rs4n_1_4}[41], {ifd_segmap_tnr_blend_1_4}[42], + // {smurf_tnr_blend_1_0}[43], {tnr7_blend_1_1}[44], {odr_tnr_fp_yuvn_1_4}[45], + // {tnr_scaler_fp_1_1}[46], {image_upscaler_1_1}[47], + // {odr_tnr_scale_fp_yuv4n_1_4}[48], {ifd_segmap_cas_1_4}[49], {smurf_cas_1_0}[50], + // {cas_1_1}[51], {odr_ofs_mp_1_4}[52], {b2i_ds_output_1_1}[53], {odr_ofs_dp_1_4}[54] + // } + + uint8_t systemApisSizes[66] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 0 /*rgb_ir_2_0*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_pdaf_1_4*/, + 24 /*pext_1_0*/, + 8 /*pafstatistics_1_2*/, + 220 /*odr_pdaf_1_4*/, + 220 /*ifd_gmv_1_4*/, + 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 220 /*ifd_segmap_bnlm_1_4*/, + 0 /*smurf_bnlm_1_0*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 220 /*ifd_segmap_xnr_1_4*/, + 0 /*smurf_xnr_1_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 220 /*ifd_segmap_acm_1_4*/, + 0 /*smurf_acm_1_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*tnr7_spatial_1_1*/, + 0 /*tnr_scaler_lb_1_1*/, + 0 /*tnr7_ims_1_2*/, + 20 /*gmv_statistics_1_1*/, + 220 /*odr_gmv_feature_1_4*/, + 220 /*odr_gmv_match_1_4*/, + 220 /*ifd_segmap_tnr_bc_1_4*/, + 0 /*smurf_tnr_bc_1_0*/, + 5 /*tnr7_bc_1_2*/, + 220 /*odr_tnr_sp_bc_rs4n_1_4*/, + 220 /*ifd_segmap_tnr_blend_1_4*/, + 0 /*smurf_tnr_blend_1_0*/, + 5 /*tnr7_blend_1_1*/, + 220 /*odr_tnr_fp_yuvn_1_4*/, + 0 /*tnr_scaler_fp_1_1*/, + 0 /*image_upscaler_1_1*/, + 220 /*odr_tnr_scale_fp_yuv4n_1_4*/, + 220 /*ifd_segmap_cas_1_4*/, + 0 /*smurf_cas_1_0*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[27].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf3NoGmvNoTnrWithSapOuterNode::Init( + LbffBayerPdaf3NoGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 45, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[45] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 43213 /*pext_1_0*/, + 14488 /*rgb_ir_2_0*/, + 44308 /*pafstatistics_1_2*/, + 26892 /*odr_pdaf_1_4*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 38544 /*odr_awb_std_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 35263 /*ifd_segmap_bnlm_1_4*/, + 54924 /*smurf_bnlm_1_0*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 9241 /*ifd_segmap_xnr_1_4*/, + 42329 /*smurf_xnr_1_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 51914 /*ifd_segmap_acm_1_4*/, + 28366 /*smurf_acm_1_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 28787 /*image_upscaler_1_1*/, + 20893 /*ifd_segmap_cas_1_4*/, + 37468 /*smurf_cas_1_0*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x1DF18C3FF1F1, + 0x0}; // { ifd_pipe_1_4[0], pext_1_0[4], rgb_ir_2_0[5], pafstatistics_1_2[6], + // odr_pdaf_1_4[7], ifd_lsc_1_4[8], rgbs_grid_1_1[12], ccm_3a_2_0[13], + // fr_grid_1_0[14], odr_awb_std_1_4[15], odr_awb_sat_1_4[16], aestatistics_2_1[17], + // odr_ae_1_4[18], odr_af_std_1_4[19], ifd_segmap_bnlm_1_4[20], smurf_bnlm_1_0[21], + // ifd_segmap_xnr_1_4[26], smurf_xnr_1_0[27], ifd_segmap_acm_1_4[31], + // smurf_acm_1_0[32], b2i_ds_1_1[36], lbff_crop_espa_1_4[37], image_upscaler_1_1[38], + // ifd_segmap_cas_1_4[39], smurf_cas_1_0[40], odr_ofs_mp_1_4[42], + // b2i_ds_output_1_1[43], odr_ofs_dp_1_4[44] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x13E39C7F83C2, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, pext_1_0, rgb_ir_2_0}[1], + // {pafstatistics_1_2}[2], {odr_pdaf_1_4}[3], {ifd_lsc_1_4}[4], {lsc_1_2, gd_2_2, + // wb_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0}[5], {odr_awb_std_1_4}[6], + // {odr_awb_sat_1_4}[7], {aestatistics_2_1}[8], {odr_ae_1_4}[9], + // {odr_af_std_1_4}[10], {ifd_segmap_bnlm_1_4}[11], {smurf_bnlm_1_0}[12], {bnlm_3_4, + // bxt_demosaic, vcsc_2_0_b, gltm_2_0}[13], {ifd_segmap_xnr_1_4}[14], + // {smurf_xnr_1_0}[15], {xnr_5_4, vcr_3_1, glim_2_0}[16], {ifd_segmap_acm_1_4}[17], + // {smurf_acm_1_0}[18], {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[19], + // {lbff_crop_espa_1_4}[20], {image_upscaler_1_1}[21], {ifd_segmap_cas_1_4}[22], + // {smurf_cas_1_0}[23], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[24], + // {odr_ofs_dp_1_4}[25] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x1FF39C7FF3F3, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {pext_1_0}[2], + // {rgb_ir_2_0}[3], {pafstatistics_1_2}[4], {odr_pdaf_1_4}[5], {ifd_lsc_1_4}[6], + // {lsc_1_2, gd_2_2, wb_1_1}[7], {rgbs_grid_1_1}[8], {ccm_3a_2_0}[9], + // {fr_grid_1_0}[10], {odr_awb_std_1_4}[11], {odr_awb_sat_1_4}[12], + // {aestatistics_2_1}[13], {odr_ae_1_4}[14], {odr_af_std_1_4}[15], + // {ifd_segmap_bnlm_1_4}[16], {smurf_bnlm_1_0}[17], {bnlm_3_4, bxt_demosaic, + // vcsc_2_0_b, gltm_2_0}[18], {ifd_segmap_xnr_1_4}[19], {smurf_xnr_1_0}[20], + // {xnr_5_4, vcr_3_1, glim_2_0}[21], {ifd_segmap_acm_1_4}[22], {smurf_acm_1_0}[23], + // {acm_1_2, gammatm_v4, csc_1_1}[24], {b2i_ds_1_1}[25], {lbff_crop_espa_1_4}[26], + // {image_upscaler_1_1}[27], {ifd_segmap_cas_1_4}[28], {smurf_cas_1_0}[29], + // {cas_1_1}[30], {odr_ofs_mp_1_4}[31], {b2i_ds_output_1_1}[32], {odr_ofs_dp_1_4}[33] + // } + + uint8_t systemApisSizes[45] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 24 /*pext_1_0*/, + 0 /*rgb_ir_2_0*/, + 8 /*pafstatistics_1_2*/, + 220 /*odr_pdaf_1_4*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_segmap_bnlm_1_4*/, + 0 /*smurf_bnlm_1_0*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 220 /*ifd_segmap_xnr_1_4*/, + 0 /*smurf_xnr_1_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 220 /*ifd_segmap_acm_1_4*/, + 0 /*smurf_acm_1_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*image_upscaler_1_1*/, + 220 /*ifd_segmap_cas_1_4*/, + 0 /*smurf_cas_1_0*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[22].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf3WithGmvNoTnrWithSapOuterNode::Init( + LbffBayerPdaf3WithGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 49, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[49] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 43213 /*pext_1_0*/, + 14488 /*rgb_ir_2_0*/, + 44308 /*pafstatistics_1_2*/, + 26892 /*odr_pdaf_1_4*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 38544 /*odr_awb_std_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 51073 /*ifd_gmv_1_4*/, + 35263 /*ifd_segmap_bnlm_1_4*/, + 54924 /*smurf_bnlm_1_0*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 9241 /*ifd_segmap_xnr_1_4*/, + 42329 /*smurf_xnr_1_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 51914 /*ifd_segmap_acm_1_4*/, + 28366 /*smurf_acm_1_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 28787 /*image_upscaler_1_1*/, + 40280 /*gmv_statistics_1_1*/, + 7416 /*odr_gmv_feature_1_4*/, + 41148 /*odr_gmv_match_1_4*/, + 20893 /*ifd_segmap_cas_1_4*/, + 37468 /*smurf_cas_1_0*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x1DFE3187FF1F1, + 0x0}; // { ifd_pipe_1_4[0], pext_1_0[4], rgb_ir_2_0[5], pafstatistics_1_2[6], + // odr_pdaf_1_4[7], ifd_lsc_1_4[8], rgbs_grid_1_1[12], ccm_3a_2_0[13], + // fr_grid_1_0[14], odr_awb_std_1_4[15], odr_awb_sat_1_4[16], aestatistics_2_1[17], + // odr_ae_1_4[18], odr_af_std_1_4[19], ifd_gmv_1_4[20], ifd_segmap_bnlm_1_4[21], + // smurf_bnlm_1_0[22], ifd_segmap_xnr_1_4[27], smurf_xnr_1_0[28], + // ifd_segmap_acm_1_4[32], smurf_acm_1_0[33], b2i_ds_1_1[37], lbff_crop_espa_1_4[38], + // image_upscaler_1_1[39], gmv_statistics_1_1[40], odr_gmv_feature_1_4[41], + // odr_gmv_match_1_4[42], ifd_segmap_cas_1_4[43], smurf_cas_1_0[44], + // odr_ofs_mp_1_4[46], b2i_ds_output_1_1[47], odr_ofs_dp_1_4[48] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x13FC738FF83C2, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, pext_1_0, rgb_ir_2_0}[1], + // {pafstatistics_1_2}[2], {odr_pdaf_1_4}[3], {ifd_lsc_1_4}[4], {lsc_1_2, gd_2_2, + // wb_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0}[5], {odr_awb_std_1_4}[6], + // {odr_awb_sat_1_4}[7], {aestatistics_2_1}[8], {odr_ae_1_4}[9], + // {odr_af_std_1_4}[10], {ifd_gmv_1_4}[11], {ifd_segmap_bnlm_1_4}[12], + // {smurf_bnlm_1_0}[13], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[14], + // {ifd_segmap_xnr_1_4}[15], {smurf_xnr_1_0}[16], {xnr_5_4, vcr_3_1, glim_2_0}[17], + // {ifd_segmap_acm_1_4}[18], {smurf_acm_1_0}[19], {acm_1_2, gammatm_v4, csc_1_1, + // b2i_ds_1_1}[20], {lbff_crop_espa_1_4}[21], {image_upscaler_1_1}[22], + // {gmv_statistics_1_1}[23], {odr_gmv_feature_1_4}[24], {odr_gmv_match_1_4}[25], + // {ifd_segmap_cas_1_4}[26], {smurf_cas_1_0}[27], {cas_1_1, odr_ofs_mp_1_4, + // b2i_ds_output_1_1}[28], {odr_ofs_dp_1_4}[29] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x1FFE738FFF3F3, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {pext_1_0}[2], + // {rgb_ir_2_0}[3], {pafstatistics_1_2}[4], {odr_pdaf_1_4}[5], {ifd_lsc_1_4}[6], + // {lsc_1_2, gd_2_2, wb_1_1}[7], {rgbs_grid_1_1}[8], {ccm_3a_2_0}[9], + // {fr_grid_1_0}[10], {odr_awb_std_1_4}[11], {odr_awb_sat_1_4}[12], + // {aestatistics_2_1}[13], {odr_ae_1_4}[14], {odr_af_std_1_4}[15], {ifd_gmv_1_4}[16], + // {ifd_segmap_bnlm_1_4}[17], {smurf_bnlm_1_0}[18], {bnlm_3_4, bxt_demosaic, + // vcsc_2_0_b, gltm_2_0}[19], {ifd_segmap_xnr_1_4}[20], {smurf_xnr_1_0}[21], + // {xnr_5_4, vcr_3_1, glim_2_0}[22], {ifd_segmap_acm_1_4}[23], {smurf_acm_1_0}[24], + // {acm_1_2, gammatm_v4, csc_1_1}[25], {b2i_ds_1_1}[26], {lbff_crop_espa_1_4}[27], + // {image_upscaler_1_1}[28], {gmv_statistics_1_1}[29], {odr_gmv_feature_1_4}[30], + // {odr_gmv_match_1_4}[31], {ifd_segmap_cas_1_4}[32], {smurf_cas_1_0}[33], + // {cas_1_1}[34], {odr_ofs_mp_1_4}[35], {b2i_ds_output_1_1}[36], {odr_ofs_dp_1_4}[37] + // } + + uint8_t systemApisSizes[49] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 24 /*pext_1_0*/, + 0 /*rgb_ir_2_0*/, + 8 /*pafstatistics_1_2*/, + 220 /*odr_pdaf_1_4*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_gmv_1_4*/, + 220 /*ifd_segmap_bnlm_1_4*/, + 0 /*smurf_bnlm_1_0*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 220 /*ifd_segmap_xnr_1_4*/, + 0 /*smurf_xnr_1_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 220 /*ifd_segmap_acm_1_4*/, + 0 /*smurf_acm_1_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*image_upscaler_1_1*/, + 20 /*gmv_statistics_1_1*/, + 220 /*odr_gmv_feature_1_4*/, + 220 /*odr_gmv_match_1_4*/, + 220 /*ifd_segmap_cas_1_4*/, + 0 /*smurf_cas_1_0*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[23].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf3NoGmvWithTnrWithSapOuterNode::Init( + LbffBayerPdaf3NoGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 61, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[61] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 43213 /*pext_1_0*/, + 14488 /*rgb_ir_2_0*/, + 44308 /*pafstatistics_1_2*/, + 26892 /*odr_pdaf_1_4*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 38544 /*odr_awb_std_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 35263 /*ifd_segmap_bnlm_1_4*/, + 54924 /*smurf_bnlm_1_0*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 9241 /*ifd_segmap_xnr_1_4*/, + 42329 /*smurf_xnr_1_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 51914 /*ifd_segmap_acm_1_4*/, + 28366 /*smurf_acm_1_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 2495 /*tnr7_spatial_1_1*/, + 29996 /*tnr_scaler_lb_1_1*/, + 23639 /*tnr7_ims_1_2*/, + 47873 /*ifd_segmap_tnr_bc_1_4*/, + 13101 /*smurf_tnr_bc_1_0*/, + 1502 /*tnr7_bc_1_2*/, + 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, + 14619 /*ifd_segmap_tnr_blend_1_4*/, + 42749 /*smurf_tnr_blend_1_0*/, + 20119 /*tnr7_blend_1_1*/, + 5215 /*odr_tnr_fp_yuvn_1_4*/, + 20623 /*tnr_scaler_fp_1_1*/, + 28787 /*image_upscaler_1_1*/, + 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/, + 20893 /*ifd_segmap_cas_1_4*/, + 37468 /*smurf_cas_1_0*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x1DFBB58C61FFF1F1, + 0x0}; // { ifd_pipe_1_4[0], pext_1_0[4], rgb_ir_2_0[5], pafstatistics_1_2[6], + // odr_pdaf_1_4[7], ifd_lsc_1_4[8], rgbs_grid_1_1[12], ccm_3a_2_0[13], + // fr_grid_1_0[14], odr_awb_std_1_4[15], odr_awb_sat_1_4[16], aestatistics_2_1[17], + // odr_ae_1_4[18], odr_af_std_1_4[19], ifd_tnr_sp_bc_yuv4nm1_1_4[20], + // ifd_tnr_sp_bc_rs4nm1_1_4[21], ifd_tnr_fp_blend_yuvnm1_1_4[22], + // ifd_segmap_bnlm_1_4[23], smurf_bnlm_1_0[24], ifd_segmap_xnr_1_4[29], + // smurf_xnr_1_0[30], ifd_segmap_acm_1_4[34], smurf_acm_1_0[35], b2i_ds_1_1[39], + // lbff_crop_espa_1_4[40], tnr_scaler_lb_1_1[42], ifd_segmap_tnr_bc_1_4[44], + // smurf_tnr_bc_1_0[45], odr_tnr_sp_bc_rs4n_1_4[47], ifd_segmap_tnr_blend_1_4[48], + // smurf_tnr_blend_1_0[49], odr_tnr_fp_yuvn_1_4[51], tnr_scaler_fp_1_1[52], + // image_upscaler_1_1[53], odr_tnr_scale_fp_yuv4n_1_4[54], ifd_segmap_cas_1_4[55], + // smurf_cas_1_0[56], odr_ofs_mp_1_4[58], b2i_ds_output_1_1[59], odr_ofs_dp_1_4[60] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x13C77B1CE3FF83C2, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, pext_1_0, rgb_ir_2_0}[1], + // {pafstatistics_1_2}[2], {odr_pdaf_1_4}[3], {ifd_lsc_1_4}[4], {lsc_1_2, gd_2_2, + // wb_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0}[5], {odr_awb_std_1_4}[6], + // {odr_awb_sat_1_4}[7], {aestatistics_2_1}[8], {odr_ae_1_4}[9], + // {odr_af_std_1_4}[10], {ifd_tnr_sp_bc_yuv4nm1_1_4}[11], + // {ifd_tnr_sp_bc_rs4nm1_1_4}[12], {ifd_tnr_fp_blend_yuvnm1_1_4}[13], + // {ifd_segmap_bnlm_1_4}[14], {smurf_bnlm_1_0}[15], {bnlm_3_4, bxt_demosaic, + // vcsc_2_0_b, gltm_2_0}[16], {ifd_segmap_xnr_1_4}[17], {smurf_xnr_1_0}[18], + // {xnr_5_4, vcr_3_1, glim_2_0}[19], {ifd_segmap_acm_1_4}[20], {smurf_acm_1_0}[21], + // {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[22], {lbff_crop_espa_1_4}[23], + // {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[24], {tnr7_ims_1_2}[25], + // {ifd_segmap_tnr_bc_1_4}[26], {smurf_tnr_bc_1_0}[27], {tnr7_bc_1_2, + // odr_tnr_sp_bc_rs4n_1_4}[28], {ifd_segmap_tnr_blend_1_4}[29], + // {smurf_tnr_blend_1_0}[30], {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, + // tnr_scaler_fp_1_1, image_upscaler_1_1}[31], {odr_tnr_scale_fp_yuv4n_1_4}[32], + // {ifd_segmap_cas_1_4}[33], {smurf_cas_1_0}[34], {cas_1_1, odr_ofs_mp_1_4, + // b2i_ds_output_1_1}[35], {odr_ofs_dp_1_4}[36] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x1FFFFF9CE3FFF3F3, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {pext_1_0}[2], + // {rgb_ir_2_0}[3], {pafstatistics_1_2}[4], {odr_pdaf_1_4}[5], {ifd_lsc_1_4}[6], + // {lsc_1_2, gd_2_2, wb_1_1}[7], {rgbs_grid_1_1}[8], {ccm_3a_2_0}[9], + // {fr_grid_1_0}[10], {odr_awb_std_1_4}[11], {odr_awb_sat_1_4}[12], + // {aestatistics_2_1}[13], {odr_ae_1_4}[14], {odr_af_std_1_4}[15], + // {ifd_tnr_sp_bc_yuv4nm1_1_4}[16], {ifd_tnr_sp_bc_rs4nm1_1_4}[17], + // {ifd_tnr_fp_blend_yuvnm1_1_4}[18], {ifd_segmap_bnlm_1_4}[19], + // {smurf_bnlm_1_0}[20], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[21], + // {ifd_segmap_xnr_1_4}[22], {smurf_xnr_1_0}[23], {xnr_5_4, vcr_3_1, glim_2_0}[24], + // {ifd_segmap_acm_1_4}[25], {smurf_acm_1_0}[26], {acm_1_2, gammatm_v4, csc_1_1}[27], + // {b2i_ds_1_1}[28], {lbff_crop_espa_1_4}[29], {tnr7_spatial_1_1}[30], + // {tnr_scaler_lb_1_1}[31], {tnr7_ims_1_2}[32], {ifd_segmap_tnr_bc_1_4}[33], + // {smurf_tnr_bc_1_0}[34], {tnr7_bc_1_2}[35], {odr_tnr_sp_bc_rs4n_1_4}[36], + // {ifd_segmap_tnr_blend_1_4}[37], {smurf_tnr_blend_1_0}[38], {tnr7_blend_1_1}[39], + // {odr_tnr_fp_yuvn_1_4}[40], {tnr_scaler_fp_1_1}[41], {image_upscaler_1_1}[42], + // {odr_tnr_scale_fp_yuv4n_1_4}[43], {ifd_segmap_cas_1_4}[44], {smurf_cas_1_0}[45], + // {cas_1_1}[46], {odr_ofs_mp_1_4}[47], {b2i_ds_output_1_1}[48], {odr_ofs_dp_1_4}[49] + // } + + uint8_t systemApisSizes[61] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 24 /*pext_1_0*/, + 0 /*rgb_ir_2_0*/, + 8 /*pafstatistics_1_2*/, + 220 /*odr_pdaf_1_4*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 220 /*ifd_segmap_bnlm_1_4*/, + 0 /*smurf_bnlm_1_0*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 220 /*ifd_segmap_xnr_1_4*/, + 0 /*smurf_xnr_1_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 220 /*ifd_segmap_acm_1_4*/, + 0 /*smurf_acm_1_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*tnr7_spatial_1_1*/, + 0 /*tnr_scaler_lb_1_1*/, + 0 /*tnr7_ims_1_2*/, + 220 /*ifd_segmap_tnr_bc_1_4*/, + 0 /*smurf_tnr_bc_1_0*/, + 5 /*tnr7_bc_1_2*/, + 220 /*odr_tnr_sp_bc_rs4n_1_4*/, + 220 /*ifd_segmap_tnr_blend_1_4*/, + 0 /*smurf_tnr_blend_1_0*/, + 5 /*tnr7_blend_1_1*/, + 220 /*odr_tnr_fp_yuvn_1_4*/, + 0 /*tnr_scaler_fp_1_1*/, + 0 /*image_upscaler_1_1*/, + 220 /*odr_tnr_scale_fp_yuv4n_1_4*/, + 220 /*ifd_segmap_cas_1_4*/, + 0 /*smurf_cas_1_0*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[25].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf3WithGmvWithTnrWithSapOuterNode::Init( + LbffBayerPdaf3WithGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 65, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[65] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 43213 /*pext_1_0*/, + 14488 /*rgb_ir_2_0*/, + 44308 /*pafstatistics_1_2*/, + 26892 /*odr_pdaf_1_4*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 38544 /*odr_awb_std_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 51073 /*ifd_gmv_1_4*/, + 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 35263 /*ifd_segmap_bnlm_1_4*/, + 54924 /*smurf_bnlm_1_0*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 9241 /*ifd_segmap_xnr_1_4*/, + 42329 /*smurf_xnr_1_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 51914 /*ifd_segmap_acm_1_4*/, + 28366 /*smurf_acm_1_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 2495 /*tnr7_spatial_1_1*/, + 29996 /*tnr_scaler_lb_1_1*/, + 23639 /*tnr7_ims_1_2*/, + 40280 /*gmv_statistics_1_1*/, + 7416 /*odr_gmv_feature_1_4*/, + 41148 /*odr_gmv_match_1_4*/, + 47873 /*ifd_segmap_tnr_bc_1_4*/, + 13101 /*smurf_tnr_bc_1_0*/, + 1502 /*tnr7_bc_1_2*/, + 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, + 14619 /*ifd_segmap_tnr_blend_1_4*/, + 42749 /*smurf_tnr_blend_1_0*/, + 20119 /*tnr7_blend_1_1*/, + 5215 /*odr_tnr_fp_yuvn_1_4*/, + 20623 /*tnr_scaler_fp_1_1*/, + 28787 /*image_upscaler_1_1*/, + 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/, + 20893 /*ifd_segmap_cas_1_4*/, + 37468 /*smurf_cas_1_0*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0xDFBBEB18C3FFF1F1, + 0x1}; // { ifd_pipe_1_4[0], pext_1_0[4], rgb_ir_2_0[5], pafstatistics_1_2[6], + // odr_pdaf_1_4[7], ifd_lsc_1_4[8], rgbs_grid_1_1[12], ccm_3a_2_0[13], + // fr_grid_1_0[14], odr_awb_std_1_4[15], odr_awb_sat_1_4[16], aestatistics_2_1[17], + // odr_ae_1_4[18], odr_af_std_1_4[19], ifd_gmv_1_4[20], + // ifd_tnr_sp_bc_yuv4nm1_1_4[21], ifd_tnr_sp_bc_rs4nm1_1_4[22], + // ifd_tnr_fp_blend_yuvnm1_1_4[23], ifd_segmap_bnlm_1_4[24], smurf_bnlm_1_0[25], + // ifd_segmap_xnr_1_4[30], smurf_xnr_1_0[31], ifd_segmap_acm_1_4[35], + // smurf_acm_1_0[36], b2i_ds_1_1[40], lbff_crop_espa_1_4[41], tnr_scaler_lb_1_1[43], + // gmv_statistics_1_1[45], odr_gmv_feature_1_4[46], odr_gmv_match_1_4[47], + // ifd_segmap_tnr_bc_1_4[48], smurf_tnr_bc_1_0[49], odr_tnr_sp_bc_rs4n_1_4[51], + // ifd_segmap_tnr_blend_1_4[52], smurf_tnr_blend_1_0[53], odr_tnr_fp_yuvn_1_4[55], + // tnr_scaler_fp_1_1[56], image_upscaler_1_1[57], odr_tnr_scale_fp_yuv4n_1_4[58], + // ifd_segmap_cas_1_4[59], smurf_cas_1_0[60], odr_ofs_mp_1_4[62], + // b2i_ds_output_1_1[63], odr_ofs_dp_1_4[64] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x3C77F639C7FF83C2, + 0x1}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, pext_1_0, rgb_ir_2_0}[1], + // {pafstatistics_1_2}[2], {odr_pdaf_1_4}[3], {ifd_lsc_1_4}[4], {lsc_1_2, gd_2_2, + // wb_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0}[5], {odr_awb_std_1_4}[6], + // {odr_awb_sat_1_4}[7], {aestatistics_2_1}[8], {odr_ae_1_4}[9], + // {odr_af_std_1_4}[10], {ifd_gmv_1_4}[11], {ifd_tnr_sp_bc_yuv4nm1_1_4}[12], + // {ifd_tnr_sp_bc_rs4nm1_1_4}[13], {ifd_tnr_fp_blend_yuvnm1_1_4}[14], + // {ifd_segmap_bnlm_1_4}[15], {smurf_bnlm_1_0}[16], {bnlm_3_4, bxt_demosaic, + // vcsc_2_0_b, gltm_2_0}[17], {ifd_segmap_xnr_1_4}[18], {smurf_xnr_1_0}[19], + // {xnr_5_4, vcr_3_1, glim_2_0}[20], {ifd_segmap_acm_1_4}[21], {smurf_acm_1_0}[22], + // {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[23], {lbff_crop_espa_1_4}[24], + // {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[25], {tnr7_ims_1_2}[26], + // {gmv_statistics_1_1}[27], {odr_gmv_feature_1_4}[28], {odr_gmv_match_1_4}[29], + // {ifd_segmap_tnr_bc_1_4}[30], {smurf_tnr_bc_1_0}[31], {tnr7_bc_1_2, + // odr_tnr_sp_bc_rs4n_1_4}[32], {ifd_segmap_tnr_blend_1_4}[33], + // {smurf_tnr_blend_1_0}[34], {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, + // tnr_scaler_fp_1_1, image_upscaler_1_1}[35], {odr_tnr_scale_fp_yuv4n_1_4}[36], + // {ifd_segmap_cas_1_4}[37], {smurf_cas_1_0}[38], {cas_1_1, odr_ofs_mp_1_4, + // b2i_ds_output_1_1}[39], {odr_ofs_dp_1_4}[40] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0xFFFFFF39C7FFF3F3, + 0x1}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {pext_1_0}[2], + // {rgb_ir_2_0}[3], {pafstatistics_1_2}[4], {odr_pdaf_1_4}[5], {ifd_lsc_1_4}[6], + // {lsc_1_2, gd_2_2, wb_1_1}[7], {rgbs_grid_1_1}[8], {ccm_3a_2_0}[9], + // {fr_grid_1_0}[10], {odr_awb_std_1_4}[11], {odr_awb_sat_1_4}[12], + // {aestatistics_2_1}[13], {odr_ae_1_4}[14], {odr_af_std_1_4}[15], {ifd_gmv_1_4}[16], + // {ifd_tnr_sp_bc_yuv4nm1_1_4}[17], {ifd_tnr_sp_bc_rs4nm1_1_4}[18], + // {ifd_tnr_fp_blend_yuvnm1_1_4}[19], {ifd_segmap_bnlm_1_4}[20], + // {smurf_bnlm_1_0}[21], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[22], + // {ifd_segmap_xnr_1_4}[23], {smurf_xnr_1_0}[24], {xnr_5_4, vcr_3_1, glim_2_0}[25], + // {ifd_segmap_acm_1_4}[26], {smurf_acm_1_0}[27], {acm_1_2, gammatm_v4, csc_1_1}[28], + // {b2i_ds_1_1}[29], {lbff_crop_espa_1_4}[30], {tnr7_spatial_1_1}[31], + // {tnr_scaler_lb_1_1}[32], {tnr7_ims_1_2}[33], {gmv_statistics_1_1}[34], + // {odr_gmv_feature_1_4}[35], {odr_gmv_match_1_4}[36], {ifd_segmap_tnr_bc_1_4}[37], + // {smurf_tnr_bc_1_0}[38], {tnr7_bc_1_2}[39], {odr_tnr_sp_bc_rs4n_1_4}[40], + // {ifd_segmap_tnr_blend_1_4}[41], {smurf_tnr_blend_1_0}[42], {tnr7_blend_1_1}[43], + // {odr_tnr_fp_yuvn_1_4}[44], {tnr_scaler_fp_1_1}[45], {image_upscaler_1_1}[46], + // {odr_tnr_scale_fp_yuv4n_1_4}[47], {ifd_segmap_cas_1_4}[48], {smurf_cas_1_0}[49], + // {cas_1_1}[50], {odr_ofs_mp_1_4}[51], {b2i_ds_output_1_1}[52], {odr_ofs_dp_1_4}[53] + // } + + uint8_t systemApisSizes[65] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 24 /*pext_1_0*/, + 0 /*rgb_ir_2_0*/, + 8 /*pafstatistics_1_2*/, + 220 /*odr_pdaf_1_4*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_gmv_1_4*/, + 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 220 /*ifd_segmap_bnlm_1_4*/, + 0 /*smurf_bnlm_1_0*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 220 /*ifd_segmap_xnr_1_4*/, + 0 /*smurf_xnr_1_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 220 /*ifd_segmap_acm_1_4*/, + 0 /*smurf_acm_1_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*tnr7_spatial_1_1*/, + 0 /*tnr_scaler_lb_1_1*/, + 0 /*tnr7_ims_1_2*/, + 20 /*gmv_statistics_1_1*/, + 220 /*odr_gmv_feature_1_4*/, + 220 /*odr_gmv_match_1_4*/, + 220 /*ifd_segmap_tnr_bc_1_4*/, + 0 /*smurf_tnr_bc_1_0*/, + 5 /*tnr7_bc_1_2*/, + 220 /*odr_tnr_sp_bc_rs4n_1_4*/, + 220 /*ifd_segmap_tnr_blend_1_4*/, + 0 /*smurf_tnr_blend_1_0*/, + 5 /*tnr7_blend_1_1*/, + 220 /*odr_tnr_fp_yuvn_1_4*/, + 0 /*tnr_scaler_fp_1_1*/, + 0 /*image_upscaler_1_1*/, + 220 /*odr_tnr_scale_fp_yuv4n_1_4*/, + 220 /*ifd_segmap_cas_1_4*/, + 0 /*smurf_cas_1_0*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[26].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void IsysDolWithCvOuterNode::Init(IsysDolWithCvOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(2, NodeTypes::Isys, 5, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[5] = {36280 /*crop_bpp_adjust_1_0*/, 5420 /*upipe_1_0*/, + 26150 /*isys_drainer_1_0*/, 11470 /*is_odr_a*/, 50407 /*is_odr_c*/}; + uint64_t kernelsRcbBitmap[] = { + 0x1B, 0x0}; // { crop_bpp_adjust_1_0[0], upipe_1_0[1], is_odr_a[3], is_odr_c[4] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x1E, 0x0}; // {{crop_bpp_adjust_1_0}[0], {upipe_1_0}[1], {isys_drainer_1_0}[2], + // {is_odr_a}[3], {is_odr_c}[4] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x1F, 0x0}; // {{crop_bpp_adjust_1_0}[0], {upipe_1_0}[1], {isys_drainer_1_0}[2], + // {is_odr_a}[3], {is_odr_c}[4] } + + uint8_t systemApisSizes[5] = {0 /*crop_bpp_adjust_1_0*/, 34 /*upipe_1_0*/, + 20 /*isys_drainer_1_0*/, 0 /*is_odr_a*/, 0 /*is_odr_c*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // set default inner Node + setInnerNode(None); +} + +void LbffDol2InputsNoGmvNoTnrWithSapOuterNode::Init( + LbffDol2InputsNoGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 45, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[45] = {52446 /*ifd_pipe_1_4*/, + 24678 /*ifd_pipe_long_1_4*/, + 54871 /*dol_lite_1_2*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 14488 /*rgb_ir_2_0*/, + 38544 /*odr_awb_std_1_4*/, + 53430 /*odr_awb_sve_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 26958 /*fr_grid_1_0*/, + 59136 /*odr_af_std_1_4*/, + 35263 /*ifd_segmap_bnlm_1_4*/, + 54924 /*smurf_bnlm_1_0*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 9241 /*ifd_segmap_xnr_1_4*/, + 42329 /*smurf_xnr_1_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 51914 /*ifd_segmap_acm_1_4*/, + 28366 /*smurf_acm_1_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 28787 /*image_upscaler_1_1*/, + 20893 /*ifd_segmap_cas_1_4*/, + 37468 /*smurf_cas_1_0*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x1DF18C3C7FC3, + 0x0}; // { ifd_pipe_1_4[0], ifd_pipe_long_1_4[1], rgbs_grid_1_1[6], ccm_3a_2_0[7], + // rgb_ir_2_0[8], odr_awb_std_1_4[9], odr_awb_sve_1_4[10], odr_awb_sat_1_4[11], + // aestatistics_2_1[12], odr_ae_1_4[13], ifd_lsc_1_4[14], fr_grid_1_0[18], + // odr_af_std_1_4[19], ifd_segmap_bnlm_1_4[20], smurf_bnlm_1_0[21], + // ifd_segmap_xnr_1_4[26], smurf_xnr_1_0[27], ifd_segmap_acm_1_4[31], + // smurf_acm_1_0[32], b2i_ds_1_1[36], lbff_crop_espa_1_4[37], image_upscaler_1_1[38], + // ifd_segmap_cas_1_4[39], smurf_cas_1_0[40], odr_ofs_mp_1_4[42], + // b2i_ds_output_1_1[43], odr_ofs_dp_1_4[44] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x13E39C78FE06, + 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {dol_lite_1_2, bxt_blc, + // linearization2_0, dpc_2_2, rgbs_grid_1_1, ccm_3a_2_0, rgb_ir_2_0}[2], + // {odr_awb_std_1_4}[3], {odr_awb_sve_1_4}[4], {odr_awb_sat_1_4}[5], + // {aestatistics_2_1}[6], {odr_ae_1_4}[7], {ifd_lsc_1_4}[8], {lsc_1_2, gd_2_2, + // wb_1_1, fr_grid_1_0}[9], {odr_af_std_1_4}[10], {ifd_segmap_bnlm_1_4}[11], + // {smurf_bnlm_1_0}[12], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[13], + // {ifd_segmap_xnr_1_4}[14], {smurf_xnr_1_0}[15], {xnr_5_4, vcr_3_1, glim_2_0}[16], + // {ifd_segmap_acm_1_4}[17], {smurf_acm_1_0}[18], {acm_1_2, gammatm_v4, csc_1_1, + // b2i_ds_1_1}[19], {lbff_crop_espa_1_4}[20], {image_upscaler_1_1}[21], + // {ifd_segmap_cas_1_4}[22], {smurf_cas_1_0}[23], {cas_1_1, odr_ofs_mp_1_4, + // b2i_ds_output_1_1}[24], {odr_ofs_dp_1_4}[25] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x1FF39C7CFFC7, + 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {dol_lite_1_2, bxt_blc, + // linearization2_0, dpc_2_2}[2], {rgbs_grid_1_1}[3], {ccm_3a_2_0}[4], + // {rgb_ir_2_0}[5], {odr_awb_std_1_4}[6], {odr_awb_sve_1_4}[7], {odr_awb_sat_1_4}[8], + // {aestatistics_2_1}[9], {odr_ae_1_4}[10], {ifd_lsc_1_4}[11], {lsc_1_2, gd_2_2, + // wb_1_1}[12], {fr_grid_1_0}[13], {odr_af_std_1_4}[14], {ifd_segmap_bnlm_1_4}[15], + // {smurf_bnlm_1_0}[16], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[17], + // {ifd_segmap_xnr_1_4}[18], {smurf_xnr_1_0}[19], {xnr_5_4, vcr_3_1, glim_2_0}[20], + // {ifd_segmap_acm_1_4}[21], {smurf_acm_1_0}[22], {acm_1_2, gammatm_v4, csc_1_1}[23], + // {b2i_ds_1_1}[24], {lbff_crop_espa_1_4}[25], {image_upscaler_1_1}[26], + // {ifd_segmap_cas_1_4}[27], {smurf_cas_1_0}[28], {cas_1_1}[29], + // {odr_ofs_mp_1_4}[30], {b2i_ds_output_1_1}[31], {odr_ofs_dp_1_4}[32] } + + uint8_t systemApisSizes[45] = {220 /*ifd_pipe_1_4*/, + 220 /*ifd_pipe_long_1_4*/, + 5 /*dol_lite_1_2*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 0 /*rgb_ir_2_0*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sve_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 20 /*fr_grid_1_0*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_segmap_bnlm_1_4*/, + 0 /*smurf_bnlm_1_0*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 220 /*ifd_segmap_xnr_1_4*/, + 0 /*smurf_xnr_1_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 220 /*ifd_segmap_acm_1_4*/, + 0 /*smurf_acm_1_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*image_upscaler_1_1*/, + 220 /*ifd_segmap_cas_1_4*/, + 0 /*smurf_cas_1_0*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[22].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffDol2InputsWithGmvNoTnrWithSapOuterNode::Init( + LbffDol2InputsWithGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 49, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[49] = {52446 /*ifd_pipe_1_4*/, + 24678 /*ifd_pipe_long_1_4*/, + 54871 /*dol_lite_1_2*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 14488 /*rgb_ir_2_0*/, + 38544 /*odr_awb_std_1_4*/, + 53430 /*odr_awb_sve_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 26958 /*fr_grid_1_0*/, + 59136 /*odr_af_std_1_4*/, + 51073 /*ifd_gmv_1_4*/, + 35263 /*ifd_segmap_bnlm_1_4*/, + 54924 /*smurf_bnlm_1_0*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 9241 /*ifd_segmap_xnr_1_4*/, + 42329 /*smurf_xnr_1_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 51914 /*ifd_segmap_acm_1_4*/, + 28366 /*smurf_acm_1_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 28787 /*image_upscaler_1_1*/, + 40280 /*gmv_statistics_1_1*/, + 7416 /*odr_gmv_feature_1_4*/, + 41148 /*odr_gmv_match_1_4*/, + 20893 /*ifd_segmap_cas_1_4*/, + 37468 /*smurf_cas_1_0*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x1DFE3187C7FC3, + 0x0}; // { ifd_pipe_1_4[0], ifd_pipe_long_1_4[1], rgbs_grid_1_1[6], ccm_3a_2_0[7], + // rgb_ir_2_0[8], odr_awb_std_1_4[9], odr_awb_sve_1_4[10], odr_awb_sat_1_4[11], + // aestatistics_2_1[12], odr_ae_1_4[13], ifd_lsc_1_4[14], fr_grid_1_0[18], + // odr_af_std_1_4[19], ifd_gmv_1_4[20], ifd_segmap_bnlm_1_4[21], smurf_bnlm_1_0[22], + // ifd_segmap_xnr_1_4[27], smurf_xnr_1_0[28], ifd_segmap_acm_1_4[32], + // smurf_acm_1_0[33], b2i_ds_1_1[37], lbff_crop_espa_1_4[38], image_upscaler_1_1[39], + // gmv_statistics_1_1[40], odr_gmv_feature_1_4[41], odr_gmv_match_1_4[42], + // ifd_segmap_cas_1_4[43], smurf_cas_1_0[44], odr_ofs_mp_1_4[46], + // b2i_ds_output_1_1[47], odr_ofs_dp_1_4[48] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x13FC738F8FE06, + 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {dol_lite_1_2, bxt_blc, + // linearization2_0, dpc_2_2, rgbs_grid_1_1, ccm_3a_2_0, rgb_ir_2_0}[2], + // {odr_awb_std_1_4}[3], {odr_awb_sve_1_4}[4], {odr_awb_sat_1_4}[5], + // {aestatistics_2_1}[6], {odr_ae_1_4}[7], {ifd_lsc_1_4}[8], {lsc_1_2, gd_2_2, + // wb_1_1, fr_grid_1_0}[9], {odr_af_std_1_4}[10], {ifd_gmv_1_4}[11], + // {ifd_segmap_bnlm_1_4}[12], {smurf_bnlm_1_0}[13], {bnlm_3_4, bxt_demosaic, + // vcsc_2_0_b, gltm_2_0}[14], {ifd_segmap_xnr_1_4}[15], {smurf_xnr_1_0}[16], + // {xnr_5_4, vcr_3_1, glim_2_0}[17], {ifd_segmap_acm_1_4}[18], {smurf_acm_1_0}[19], + // {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[20], {lbff_crop_espa_1_4}[21], + // {image_upscaler_1_1}[22], {gmv_statistics_1_1}[23], {odr_gmv_feature_1_4}[24], + // {odr_gmv_match_1_4}[25], {ifd_segmap_cas_1_4}[26], {smurf_cas_1_0}[27], {cas_1_1, + // odr_ofs_mp_1_4, b2i_ds_output_1_1}[28], {odr_ofs_dp_1_4}[29] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x1FFE738FCFFC7, + 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {dol_lite_1_2, bxt_blc, + // linearization2_0, dpc_2_2}[2], {rgbs_grid_1_1}[3], {ccm_3a_2_0}[4], + // {rgb_ir_2_0}[5], {odr_awb_std_1_4}[6], {odr_awb_sve_1_4}[7], {odr_awb_sat_1_4}[8], + // {aestatistics_2_1}[9], {odr_ae_1_4}[10], {ifd_lsc_1_4}[11], {lsc_1_2, gd_2_2, + // wb_1_1}[12], {fr_grid_1_0}[13], {odr_af_std_1_4}[14], {ifd_gmv_1_4}[15], + // {ifd_segmap_bnlm_1_4}[16], {smurf_bnlm_1_0}[17], {bnlm_3_4, bxt_demosaic, + // vcsc_2_0_b, gltm_2_0}[18], {ifd_segmap_xnr_1_4}[19], {smurf_xnr_1_0}[20], + // {xnr_5_4, vcr_3_1, glim_2_0}[21], {ifd_segmap_acm_1_4}[22], {smurf_acm_1_0}[23], + // {acm_1_2, gammatm_v4, csc_1_1}[24], {b2i_ds_1_1}[25], {lbff_crop_espa_1_4}[26], + // {image_upscaler_1_1}[27], {gmv_statistics_1_1}[28], {odr_gmv_feature_1_4}[29], + // {odr_gmv_match_1_4}[30], {ifd_segmap_cas_1_4}[31], {smurf_cas_1_0}[32], + // {cas_1_1}[33], {odr_ofs_mp_1_4}[34], {b2i_ds_output_1_1}[35], {odr_ofs_dp_1_4}[36] + // } + + uint8_t systemApisSizes[49] = {220 /*ifd_pipe_1_4*/, + 220 /*ifd_pipe_long_1_4*/, + 5 /*dol_lite_1_2*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 0 /*rgb_ir_2_0*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sve_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 20 /*fr_grid_1_0*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_gmv_1_4*/, + 220 /*ifd_segmap_bnlm_1_4*/, + 0 /*smurf_bnlm_1_0*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 220 /*ifd_segmap_xnr_1_4*/, + 0 /*smurf_xnr_1_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 220 /*ifd_segmap_acm_1_4*/, + 0 /*smurf_acm_1_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*image_upscaler_1_1*/, + 20 /*gmv_statistics_1_1*/, + 220 /*odr_gmv_feature_1_4*/, + 220 /*odr_gmv_match_1_4*/, + 220 /*ifd_segmap_cas_1_4*/, + 0 /*smurf_cas_1_0*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[23].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffDol2InputsNoGmvWithTnrWithSapOuterNode::Init( + LbffDol2InputsNoGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 61, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[61] = {52446 /*ifd_pipe_1_4*/, + 24678 /*ifd_pipe_long_1_4*/, + 54871 /*dol_lite_1_2*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 14488 /*rgb_ir_2_0*/, + 38544 /*odr_awb_std_1_4*/, + 53430 /*odr_awb_sve_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 26958 /*fr_grid_1_0*/, + 59136 /*odr_af_std_1_4*/, + 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 35263 /*ifd_segmap_bnlm_1_4*/, + 54924 /*smurf_bnlm_1_0*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 9241 /*ifd_segmap_xnr_1_4*/, + 42329 /*smurf_xnr_1_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 51914 /*ifd_segmap_acm_1_4*/, + 28366 /*smurf_acm_1_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 2495 /*tnr7_spatial_1_1*/, + 29996 /*tnr_scaler_lb_1_1*/, + 23639 /*tnr7_ims_1_2*/, + 47873 /*ifd_segmap_tnr_bc_1_4*/, + 13101 /*smurf_tnr_bc_1_0*/, + 1502 /*tnr7_bc_1_2*/, + 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, + 14619 /*ifd_segmap_tnr_blend_1_4*/, + 42749 /*smurf_tnr_blend_1_0*/, + 20119 /*tnr7_blend_1_1*/, + 5215 /*odr_tnr_fp_yuvn_1_4*/, + 20623 /*tnr_scaler_fp_1_1*/, + 28787 /*image_upscaler_1_1*/, + 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/, + 20893 /*ifd_segmap_cas_1_4*/, + 37468 /*smurf_cas_1_0*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x1DFBB58C61FC7FC3, + 0x0}; // { ifd_pipe_1_4[0], ifd_pipe_long_1_4[1], rgbs_grid_1_1[6], ccm_3a_2_0[7], + // rgb_ir_2_0[8], odr_awb_std_1_4[9], odr_awb_sve_1_4[10], odr_awb_sat_1_4[11], + // aestatistics_2_1[12], odr_ae_1_4[13], ifd_lsc_1_4[14], fr_grid_1_0[18], + // odr_af_std_1_4[19], ifd_tnr_sp_bc_yuv4nm1_1_4[20], ifd_tnr_sp_bc_rs4nm1_1_4[21], + // ifd_tnr_fp_blend_yuvnm1_1_4[22], ifd_segmap_bnlm_1_4[23], smurf_bnlm_1_0[24], + // ifd_segmap_xnr_1_4[29], smurf_xnr_1_0[30], ifd_segmap_acm_1_4[34], + // smurf_acm_1_0[35], b2i_ds_1_1[39], lbff_crop_espa_1_4[40], tnr_scaler_lb_1_1[42], + // ifd_segmap_tnr_bc_1_4[44], smurf_tnr_bc_1_0[45], odr_tnr_sp_bc_rs4n_1_4[47], + // ifd_segmap_tnr_blend_1_4[48], smurf_tnr_blend_1_0[49], odr_tnr_fp_yuvn_1_4[51], + // tnr_scaler_fp_1_1[52], image_upscaler_1_1[53], odr_tnr_scale_fp_yuv4n_1_4[54], + // ifd_segmap_cas_1_4[55], smurf_cas_1_0[56], odr_ofs_mp_1_4[58], + // b2i_ds_output_1_1[59], odr_ofs_dp_1_4[60] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x13C77B1CE3F8FE06, + 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {dol_lite_1_2, bxt_blc, + // linearization2_0, dpc_2_2, rgbs_grid_1_1, ccm_3a_2_0, rgb_ir_2_0}[2], + // {odr_awb_std_1_4}[3], {odr_awb_sve_1_4}[4], {odr_awb_sat_1_4}[5], + // {aestatistics_2_1}[6], {odr_ae_1_4}[7], {ifd_lsc_1_4}[8], {lsc_1_2, gd_2_2, + // wb_1_1, fr_grid_1_0}[9], {odr_af_std_1_4}[10], {ifd_tnr_sp_bc_yuv4nm1_1_4}[11], + // {ifd_tnr_sp_bc_rs4nm1_1_4}[12], {ifd_tnr_fp_blend_yuvnm1_1_4}[13], + // {ifd_segmap_bnlm_1_4}[14], {smurf_bnlm_1_0}[15], {bnlm_3_4, bxt_demosaic, + // vcsc_2_0_b, gltm_2_0}[16], {ifd_segmap_xnr_1_4}[17], {smurf_xnr_1_0}[18], + // {xnr_5_4, vcr_3_1, glim_2_0}[19], {ifd_segmap_acm_1_4}[20], {smurf_acm_1_0}[21], + // {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[22], {lbff_crop_espa_1_4}[23], + // {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[24], {tnr7_ims_1_2}[25], + // {ifd_segmap_tnr_bc_1_4}[26], {smurf_tnr_bc_1_0}[27], {tnr7_bc_1_2, + // odr_tnr_sp_bc_rs4n_1_4}[28], {ifd_segmap_tnr_blend_1_4}[29], + // {smurf_tnr_blend_1_0}[30], {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, + // tnr_scaler_fp_1_1, image_upscaler_1_1}[31], {odr_tnr_scale_fp_yuv4n_1_4}[32], + // {ifd_segmap_cas_1_4}[33], {smurf_cas_1_0}[34], {cas_1_1, odr_ofs_mp_1_4, + // b2i_ds_output_1_1}[35], {odr_ofs_dp_1_4}[36] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x1FFFFF9CE3FCFFC7, + 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {dol_lite_1_2, bxt_blc, + // linearization2_0, dpc_2_2}[2], {rgbs_grid_1_1}[3], {ccm_3a_2_0}[4], + // {rgb_ir_2_0}[5], {odr_awb_std_1_4}[6], {odr_awb_sve_1_4}[7], {odr_awb_sat_1_4}[8], + // {aestatistics_2_1}[9], {odr_ae_1_4}[10], {ifd_lsc_1_4}[11], {lsc_1_2, gd_2_2, + // wb_1_1}[12], {fr_grid_1_0}[13], {odr_af_std_1_4}[14], + // {ifd_tnr_sp_bc_yuv4nm1_1_4}[15], {ifd_tnr_sp_bc_rs4nm1_1_4}[16], + // {ifd_tnr_fp_blend_yuvnm1_1_4}[17], {ifd_segmap_bnlm_1_4}[18], + // {smurf_bnlm_1_0}[19], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[20], + // {ifd_segmap_xnr_1_4}[21], {smurf_xnr_1_0}[22], {xnr_5_4, vcr_3_1, glim_2_0}[23], + // {ifd_segmap_acm_1_4}[24], {smurf_acm_1_0}[25], {acm_1_2, gammatm_v4, csc_1_1}[26], + // {b2i_ds_1_1}[27], {lbff_crop_espa_1_4}[28], {tnr7_spatial_1_1}[29], + // {tnr_scaler_lb_1_1}[30], {tnr7_ims_1_2}[31], {ifd_segmap_tnr_bc_1_4}[32], + // {smurf_tnr_bc_1_0}[33], {tnr7_bc_1_2}[34], {odr_tnr_sp_bc_rs4n_1_4}[35], + // {ifd_segmap_tnr_blend_1_4}[36], {smurf_tnr_blend_1_0}[37], {tnr7_blend_1_1}[38], + // {odr_tnr_fp_yuvn_1_4}[39], {tnr_scaler_fp_1_1}[40], {image_upscaler_1_1}[41], + // {odr_tnr_scale_fp_yuv4n_1_4}[42], {ifd_segmap_cas_1_4}[43], {smurf_cas_1_0}[44], + // {cas_1_1}[45], {odr_ofs_mp_1_4}[46], {b2i_ds_output_1_1}[47], {odr_ofs_dp_1_4}[48] + // } + + uint8_t systemApisSizes[61] = {220 /*ifd_pipe_1_4*/, + 220 /*ifd_pipe_long_1_4*/, + 5 /*dol_lite_1_2*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 0 /*rgb_ir_2_0*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sve_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 20 /*fr_grid_1_0*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 220 /*ifd_segmap_bnlm_1_4*/, + 0 /*smurf_bnlm_1_0*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 220 /*ifd_segmap_xnr_1_4*/, + 0 /*smurf_xnr_1_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 220 /*ifd_segmap_acm_1_4*/, + 0 /*smurf_acm_1_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*tnr7_spatial_1_1*/, + 0 /*tnr_scaler_lb_1_1*/, + 0 /*tnr7_ims_1_2*/, + 220 /*ifd_segmap_tnr_bc_1_4*/, + 0 /*smurf_tnr_bc_1_0*/, + 5 /*tnr7_bc_1_2*/, + 220 /*odr_tnr_sp_bc_rs4n_1_4*/, + 220 /*ifd_segmap_tnr_blend_1_4*/, + 0 /*smurf_tnr_blend_1_0*/, + 5 /*tnr7_blend_1_1*/, + 220 /*odr_tnr_fp_yuvn_1_4*/, + 0 /*tnr_scaler_fp_1_1*/, + 0 /*image_upscaler_1_1*/, + 220 /*odr_tnr_scale_fp_yuv4n_1_4*/, + 220 /*ifd_segmap_cas_1_4*/, + 0 /*smurf_cas_1_0*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[25].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffDol2InputsWithGmvWithTnrWithSapOuterNode::Init( + LbffDol2InputsWithGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 65, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[65] = {52446 /*ifd_pipe_1_4*/, + 24678 /*ifd_pipe_long_1_4*/, + 54871 /*dol_lite_1_2*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 14488 /*rgb_ir_2_0*/, + 38544 /*odr_awb_std_1_4*/, + 53430 /*odr_awb_sve_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 26958 /*fr_grid_1_0*/, + 59136 /*odr_af_std_1_4*/, + 51073 /*ifd_gmv_1_4*/, + 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 35263 /*ifd_segmap_bnlm_1_4*/, + 54924 /*smurf_bnlm_1_0*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 9241 /*ifd_segmap_xnr_1_4*/, + 42329 /*smurf_xnr_1_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 51914 /*ifd_segmap_acm_1_4*/, + 28366 /*smurf_acm_1_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 2495 /*tnr7_spatial_1_1*/, + 29996 /*tnr_scaler_lb_1_1*/, + 23639 /*tnr7_ims_1_2*/, + 40280 /*gmv_statistics_1_1*/, + 7416 /*odr_gmv_feature_1_4*/, + 41148 /*odr_gmv_match_1_4*/, + 47873 /*ifd_segmap_tnr_bc_1_4*/, + 13101 /*smurf_tnr_bc_1_0*/, + 1502 /*tnr7_bc_1_2*/, + 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, + 14619 /*ifd_segmap_tnr_blend_1_4*/, + 42749 /*smurf_tnr_blend_1_0*/, + 20119 /*tnr7_blend_1_1*/, + 5215 /*odr_tnr_fp_yuvn_1_4*/, + 20623 /*tnr_scaler_fp_1_1*/, + 28787 /*image_upscaler_1_1*/, + 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/, + 20893 /*ifd_segmap_cas_1_4*/, + 37468 /*smurf_cas_1_0*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0xDFBBEB18C3FC7FC3, + 0x1}; // { ifd_pipe_1_4[0], ifd_pipe_long_1_4[1], rgbs_grid_1_1[6], ccm_3a_2_0[7], + // rgb_ir_2_0[8], odr_awb_std_1_4[9], odr_awb_sve_1_4[10], odr_awb_sat_1_4[11], + // aestatistics_2_1[12], odr_ae_1_4[13], ifd_lsc_1_4[14], fr_grid_1_0[18], + // odr_af_std_1_4[19], ifd_gmv_1_4[20], ifd_tnr_sp_bc_yuv4nm1_1_4[21], + // ifd_tnr_sp_bc_rs4nm1_1_4[22], ifd_tnr_fp_blend_yuvnm1_1_4[23], + // ifd_segmap_bnlm_1_4[24], smurf_bnlm_1_0[25], ifd_segmap_xnr_1_4[30], + // smurf_xnr_1_0[31], ifd_segmap_acm_1_4[35], smurf_acm_1_0[36], b2i_ds_1_1[40], + // lbff_crop_espa_1_4[41], tnr_scaler_lb_1_1[43], gmv_statistics_1_1[45], + // odr_gmv_feature_1_4[46], odr_gmv_match_1_4[47], ifd_segmap_tnr_bc_1_4[48], + // smurf_tnr_bc_1_0[49], odr_tnr_sp_bc_rs4n_1_4[51], ifd_segmap_tnr_blend_1_4[52], + // smurf_tnr_blend_1_0[53], odr_tnr_fp_yuvn_1_4[55], tnr_scaler_fp_1_1[56], + // image_upscaler_1_1[57], odr_tnr_scale_fp_yuv4n_1_4[58], ifd_segmap_cas_1_4[59], + // smurf_cas_1_0[60], odr_ofs_mp_1_4[62], b2i_ds_output_1_1[63], odr_ofs_dp_1_4[64] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x3C77F639C7F8FE06, + 0x1}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {dol_lite_1_2, bxt_blc, + // linearization2_0, dpc_2_2, rgbs_grid_1_1, ccm_3a_2_0, rgb_ir_2_0}[2], + // {odr_awb_std_1_4}[3], {odr_awb_sve_1_4}[4], {odr_awb_sat_1_4}[5], + // {aestatistics_2_1}[6], {odr_ae_1_4}[7], {ifd_lsc_1_4}[8], {lsc_1_2, gd_2_2, + // wb_1_1, fr_grid_1_0}[9], {odr_af_std_1_4}[10], {ifd_gmv_1_4}[11], + // {ifd_tnr_sp_bc_yuv4nm1_1_4}[12], {ifd_tnr_sp_bc_rs4nm1_1_4}[13], + // {ifd_tnr_fp_blend_yuvnm1_1_4}[14], {ifd_segmap_bnlm_1_4}[15], + // {smurf_bnlm_1_0}[16], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[17], + // {ifd_segmap_xnr_1_4}[18], {smurf_xnr_1_0}[19], {xnr_5_4, vcr_3_1, glim_2_0}[20], + // {ifd_segmap_acm_1_4}[21], {smurf_acm_1_0}[22], {acm_1_2, gammatm_v4, csc_1_1, + // b2i_ds_1_1}[23], {lbff_crop_espa_1_4}[24], {tnr7_spatial_1_1, + // tnr_scaler_lb_1_1}[25], {tnr7_ims_1_2}[26], {gmv_statistics_1_1}[27], + // {odr_gmv_feature_1_4}[28], {odr_gmv_match_1_4}[29], {ifd_segmap_tnr_bc_1_4}[30], + // {smurf_tnr_bc_1_0}[31], {tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[32], + // {ifd_segmap_tnr_blend_1_4}[33], {smurf_tnr_blend_1_0}[34], {tnr7_blend_1_1, + // odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[35], + // {odr_tnr_scale_fp_yuv4n_1_4}[36], {ifd_segmap_cas_1_4}[37], {smurf_cas_1_0}[38], + // {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[39], {odr_ofs_dp_1_4}[40] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0xFFFFFF39C7FCFFC7, + 0x1}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {dol_lite_1_2, bxt_blc, + // linearization2_0, dpc_2_2}[2], {rgbs_grid_1_1}[3], {ccm_3a_2_0}[4], + // {rgb_ir_2_0}[5], {odr_awb_std_1_4}[6], {odr_awb_sve_1_4}[7], {odr_awb_sat_1_4}[8], + // {aestatistics_2_1}[9], {odr_ae_1_4}[10], {ifd_lsc_1_4}[11], {lsc_1_2, gd_2_2, + // wb_1_1}[12], {fr_grid_1_0}[13], {odr_af_std_1_4}[14], {ifd_gmv_1_4}[15], + // {ifd_tnr_sp_bc_yuv4nm1_1_4}[16], {ifd_tnr_sp_bc_rs4nm1_1_4}[17], + // {ifd_tnr_fp_blend_yuvnm1_1_4}[18], {ifd_segmap_bnlm_1_4}[19], + // {smurf_bnlm_1_0}[20], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[21], + // {ifd_segmap_xnr_1_4}[22], {smurf_xnr_1_0}[23], {xnr_5_4, vcr_3_1, glim_2_0}[24], + // {ifd_segmap_acm_1_4}[25], {smurf_acm_1_0}[26], {acm_1_2, gammatm_v4, csc_1_1}[27], + // {b2i_ds_1_1}[28], {lbff_crop_espa_1_4}[29], {tnr7_spatial_1_1}[30], + // {tnr_scaler_lb_1_1}[31], {tnr7_ims_1_2}[32], {gmv_statistics_1_1}[33], + // {odr_gmv_feature_1_4}[34], {odr_gmv_match_1_4}[35], {ifd_segmap_tnr_bc_1_4}[36], + // {smurf_tnr_bc_1_0}[37], {tnr7_bc_1_2}[38], {odr_tnr_sp_bc_rs4n_1_4}[39], + // {ifd_segmap_tnr_blend_1_4}[40], {smurf_tnr_blend_1_0}[41], {tnr7_blend_1_1}[42], + // {odr_tnr_fp_yuvn_1_4}[43], {tnr_scaler_fp_1_1}[44], {image_upscaler_1_1}[45], + // {odr_tnr_scale_fp_yuv4n_1_4}[46], {ifd_segmap_cas_1_4}[47], {smurf_cas_1_0}[48], + // {cas_1_1}[49], {odr_ofs_mp_1_4}[50], {b2i_ds_output_1_1}[51], {odr_ofs_dp_1_4}[52] + // } + + uint8_t systemApisSizes[65] = {220 /*ifd_pipe_1_4*/, + 220 /*ifd_pipe_long_1_4*/, + 5 /*dol_lite_1_2*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 0 /*rgb_ir_2_0*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sve_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 20 /*fr_grid_1_0*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_gmv_1_4*/, + 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 220 /*ifd_segmap_bnlm_1_4*/, + 0 /*smurf_bnlm_1_0*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 220 /*ifd_segmap_xnr_1_4*/, + 0 /*smurf_xnr_1_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 220 /*ifd_segmap_acm_1_4*/, + 0 /*smurf_acm_1_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*tnr7_spatial_1_1*/, + 0 /*tnr_scaler_lb_1_1*/, + 0 /*tnr7_ims_1_2*/, + 20 /*gmv_statistics_1_1*/, + 220 /*odr_gmv_feature_1_4*/, + 220 /*odr_gmv_match_1_4*/, + 220 /*ifd_segmap_tnr_bc_1_4*/, + 0 /*smurf_tnr_bc_1_0*/, + 5 /*tnr7_bc_1_2*/, + 220 /*odr_tnr_sp_bc_rs4n_1_4*/, + 220 /*ifd_segmap_tnr_blend_1_4*/, + 0 /*smurf_tnr_blend_1_0*/, + 5 /*tnr7_blend_1_1*/, + 220 /*odr_tnr_fp_yuvn_1_4*/, + 0 /*tnr_scaler_fp_1_1*/, + 0 /*image_upscaler_1_1*/, + 220 /*odr_tnr_scale_fp_yuv4n_1_4*/, + 220 /*ifd_segmap_cas_1_4*/, + 0 /*smurf_cas_1_0*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[26].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffDol3InputsNoGmvNoTnrWithSapOuterNode::Init( + LbffDol3InputsNoGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 46, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[46] = {52446 /*ifd_pipe_1_4*/, + 24678 /*ifd_pipe_long_1_4*/, + 4386 /*ifd_pipe_short_smth_1_4*/, + 54871 /*dol_lite_1_2*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 14488 /*rgb_ir_2_0*/, + 38544 /*odr_awb_std_1_4*/, + 53430 /*odr_awb_sve_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 26958 /*fr_grid_1_0*/, + 59136 /*odr_af_std_1_4*/, + 35263 /*ifd_segmap_bnlm_1_4*/, + 54924 /*smurf_bnlm_1_0*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 9241 /*ifd_segmap_xnr_1_4*/, + 42329 /*smurf_xnr_1_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 51914 /*ifd_segmap_acm_1_4*/, + 28366 /*smurf_acm_1_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 28787 /*image_upscaler_1_1*/, + 20893 /*ifd_segmap_cas_1_4*/, + 37468 /*smurf_cas_1_0*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x3BE31878FF87, + 0x0}; // { ifd_pipe_1_4[0], ifd_pipe_long_1_4[1], ifd_pipe_short_smth_1_4[2], + // rgbs_grid_1_1[7], ccm_3a_2_0[8], rgb_ir_2_0[9], odr_awb_std_1_4[10], + // odr_awb_sve_1_4[11], odr_awb_sat_1_4[12], aestatistics_2_1[13], odr_ae_1_4[14], + // ifd_lsc_1_4[15], fr_grid_1_0[19], odr_af_std_1_4[20], ifd_segmap_bnlm_1_4[21], + // smurf_bnlm_1_0[22], ifd_segmap_xnr_1_4[27], smurf_xnr_1_0[28], + // ifd_segmap_acm_1_4[32], smurf_acm_1_0[33], b2i_ds_1_1[37], lbff_crop_espa_1_4[38], + // image_upscaler_1_1[39], ifd_segmap_cas_1_4[40], smurf_cas_1_0[41], + // odr_ofs_mp_1_4[43], b2i_ds_output_1_1[44], odr_ofs_dp_1_4[45] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x27C738F1FC0E, + 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {ifd_pipe_short_smth_1_4}[2], + // {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2, rgbs_grid_1_1, ccm_3a_2_0, + // rgb_ir_2_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sve_1_4}[5], {odr_awb_sat_1_4}[6], + // {aestatistics_2_1}[7], {odr_ae_1_4}[8], {ifd_lsc_1_4}[9], {lsc_1_2, gd_2_2, + // wb_1_1, fr_grid_1_0}[10], {odr_af_std_1_4}[11], {ifd_segmap_bnlm_1_4}[12], + // {smurf_bnlm_1_0}[13], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[14], + // {ifd_segmap_xnr_1_4}[15], {smurf_xnr_1_0}[16], {xnr_5_4, vcr_3_1, glim_2_0}[17], + // {ifd_segmap_acm_1_4}[18], {smurf_acm_1_0}[19], {acm_1_2, gammatm_v4, csc_1_1, + // b2i_ds_1_1}[20], {lbff_crop_espa_1_4}[21], {image_upscaler_1_1}[22], + // {ifd_segmap_cas_1_4}[23], {smurf_cas_1_0}[24], {cas_1_1, odr_ofs_mp_1_4, + // b2i_ds_output_1_1}[25], {odr_ofs_dp_1_4}[26] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x3FE738F9FF8F, + 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {ifd_pipe_short_smth_1_4}[2], + // {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2}[3], {rgbs_grid_1_1}[4], + // {ccm_3a_2_0}[5], {rgb_ir_2_0}[6], {odr_awb_std_1_4}[7], {odr_awb_sve_1_4}[8], + // {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], {odr_ae_1_4}[11], {ifd_lsc_1_4}[12], + // {lsc_1_2, gd_2_2, wb_1_1}[13], {fr_grid_1_0}[14], {odr_af_std_1_4}[15], + // {ifd_segmap_bnlm_1_4}[16], {smurf_bnlm_1_0}[17], {bnlm_3_4, bxt_demosaic, + // vcsc_2_0_b, gltm_2_0}[18], {ifd_segmap_xnr_1_4}[19], {smurf_xnr_1_0}[20], + // {xnr_5_4, vcr_3_1, glim_2_0}[21], {ifd_segmap_acm_1_4}[22], {smurf_acm_1_0}[23], + // {acm_1_2, gammatm_v4, csc_1_1}[24], {b2i_ds_1_1}[25], {lbff_crop_espa_1_4}[26], + // {image_upscaler_1_1}[27], {ifd_segmap_cas_1_4}[28], {smurf_cas_1_0}[29], + // {cas_1_1}[30], {odr_ofs_mp_1_4}[31], {b2i_ds_output_1_1}[32], {odr_ofs_dp_1_4}[33] + // } + + uint8_t systemApisSizes[46] = {220 /*ifd_pipe_1_4*/, + 220 /*ifd_pipe_long_1_4*/, + 220 /*ifd_pipe_short_smth_1_4*/, + 5 /*dol_lite_1_2*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 0 /*rgb_ir_2_0*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sve_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 20 /*fr_grid_1_0*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_segmap_bnlm_1_4*/, + 0 /*smurf_bnlm_1_0*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 220 /*ifd_segmap_xnr_1_4*/, + 0 /*smurf_xnr_1_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 220 /*ifd_segmap_acm_1_4*/, + 0 /*smurf_acm_1_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*image_upscaler_1_1*/, + 220 /*ifd_segmap_cas_1_4*/, + 0 /*smurf_cas_1_0*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[23].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffDol3InputsWithGmvNoTnrWithSapOuterNode::Init( + LbffDol3InputsWithGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 50, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[50] = {52446 /*ifd_pipe_1_4*/, + 24678 /*ifd_pipe_long_1_4*/, + 4386 /*ifd_pipe_short_smth_1_4*/, + 54871 /*dol_lite_1_2*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 14488 /*rgb_ir_2_0*/, + 38544 /*odr_awb_std_1_4*/, + 53430 /*odr_awb_sve_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 26958 /*fr_grid_1_0*/, + 59136 /*odr_af_std_1_4*/, + 51073 /*ifd_gmv_1_4*/, + 35263 /*ifd_segmap_bnlm_1_4*/, + 54924 /*smurf_bnlm_1_0*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 9241 /*ifd_segmap_xnr_1_4*/, + 42329 /*smurf_xnr_1_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 51914 /*ifd_segmap_acm_1_4*/, + 28366 /*smurf_acm_1_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 28787 /*image_upscaler_1_1*/, + 40280 /*gmv_statistics_1_1*/, + 7416 /*odr_gmv_feature_1_4*/, + 41148 /*odr_gmv_match_1_4*/, + 20893 /*ifd_segmap_cas_1_4*/, + 37468 /*smurf_cas_1_0*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x3BFC630F8FF87, + 0x0}; // { ifd_pipe_1_4[0], ifd_pipe_long_1_4[1], ifd_pipe_short_smth_1_4[2], + // rgbs_grid_1_1[7], ccm_3a_2_0[8], rgb_ir_2_0[9], odr_awb_std_1_4[10], + // odr_awb_sve_1_4[11], odr_awb_sat_1_4[12], aestatistics_2_1[13], odr_ae_1_4[14], + // ifd_lsc_1_4[15], fr_grid_1_0[19], odr_af_std_1_4[20], ifd_gmv_1_4[21], + // ifd_segmap_bnlm_1_4[22], smurf_bnlm_1_0[23], ifd_segmap_xnr_1_4[28], + // smurf_xnr_1_0[29], ifd_segmap_acm_1_4[33], smurf_acm_1_0[34], b2i_ds_1_1[38], + // lbff_crop_espa_1_4[39], image_upscaler_1_1[40], gmv_statistics_1_1[41], + // odr_gmv_feature_1_4[42], odr_gmv_match_1_4[43], ifd_segmap_cas_1_4[44], + // smurf_cas_1_0[45], odr_ofs_mp_1_4[47], b2i_ds_output_1_1[48], odr_ofs_dp_1_4[49] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x27F8E71F1FC0E, + 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {ifd_pipe_short_smth_1_4}[2], + // {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2, rgbs_grid_1_1, ccm_3a_2_0, + // rgb_ir_2_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sve_1_4}[5], {odr_awb_sat_1_4}[6], + // {aestatistics_2_1}[7], {odr_ae_1_4}[8], {ifd_lsc_1_4}[9], {lsc_1_2, gd_2_2, + // wb_1_1, fr_grid_1_0}[10], {odr_af_std_1_4}[11], {ifd_gmv_1_4}[12], + // {ifd_segmap_bnlm_1_4}[13], {smurf_bnlm_1_0}[14], {bnlm_3_4, bxt_demosaic, + // vcsc_2_0_b, gltm_2_0}[15], {ifd_segmap_xnr_1_4}[16], {smurf_xnr_1_0}[17], + // {xnr_5_4, vcr_3_1, glim_2_0}[18], {ifd_segmap_acm_1_4}[19], {smurf_acm_1_0}[20], + // {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[21], {lbff_crop_espa_1_4}[22], + // {image_upscaler_1_1}[23], {gmv_statistics_1_1}[24], {odr_gmv_feature_1_4}[25], + // {odr_gmv_match_1_4}[26], {ifd_segmap_cas_1_4}[27], {smurf_cas_1_0}[28], {cas_1_1, + // odr_ofs_mp_1_4, b2i_ds_output_1_1}[29], {odr_ofs_dp_1_4}[30] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x3FFCE71F9FF8F, + 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {ifd_pipe_short_smth_1_4}[2], + // {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2}[3], {rgbs_grid_1_1}[4], + // {ccm_3a_2_0}[5], {rgb_ir_2_0}[6], {odr_awb_std_1_4}[7], {odr_awb_sve_1_4}[8], + // {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], {odr_ae_1_4}[11], {ifd_lsc_1_4}[12], + // {lsc_1_2, gd_2_2, wb_1_1}[13], {fr_grid_1_0}[14], {odr_af_std_1_4}[15], + // {ifd_gmv_1_4}[16], {ifd_segmap_bnlm_1_4}[17], {smurf_bnlm_1_0}[18], {bnlm_3_4, + // bxt_demosaic, vcsc_2_0_b, gltm_2_0}[19], {ifd_segmap_xnr_1_4}[20], + // {smurf_xnr_1_0}[21], {xnr_5_4, vcr_3_1, glim_2_0}[22], {ifd_segmap_acm_1_4}[23], + // {smurf_acm_1_0}[24], {acm_1_2, gammatm_v4, csc_1_1}[25], {b2i_ds_1_1}[26], + // {lbff_crop_espa_1_4}[27], {image_upscaler_1_1}[28], {gmv_statistics_1_1}[29], + // {odr_gmv_feature_1_4}[30], {odr_gmv_match_1_4}[31], {ifd_segmap_cas_1_4}[32], + // {smurf_cas_1_0}[33], {cas_1_1}[34], {odr_ofs_mp_1_4}[35], {b2i_ds_output_1_1}[36], + // {odr_ofs_dp_1_4}[37] } + + uint8_t systemApisSizes[50] = {220 /*ifd_pipe_1_4*/, + 220 /*ifd_pipe_long_1_4*/, + 220 /*ifd_pipe_short_smth_1_4*/, + 5 /*dol_lite_1_2*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 0 /*rgb_ir_2_0*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sve_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 20 /*fr_grid_1_0*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_gmv_1_4*/, + 220 /*ifd_segmap_bnlm_1_4*/, + 0 /*smurf_bnlm_1_0*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 220 /*ifd_segmap_xnr_1_4*/, + 0 /*smurf_xnr_1_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 220 /*ifd_segmap_acm_1_4*/, + 0 /*smurf_acm_1_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*image_upscaler_1_1*/, + 20 /*gmv_statistics_1_1*/, + 220 /*odr_gmv_feature_1_4*/, + 220 /*odr_gmv_match_1_4*/, + 220 /*ifd_segmap_cas_1_4*/, + 0 /*smurf_cas_1_0*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[24].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffDol3InputsNoGmvWithTnrWithSapOuterNode::Init( + LbffDol3InputsNoGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 62, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[62] = {52446 /*ifd_pipe_1_4*/, + 24678 /*ifd_pipe_long_1_4*/, + 4386 /*ifd_pipe_short_smth_1_4*/, + 54871 /*dol_lite_1_2*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 14488 /*rgb_ir_2_0*/, + 38544 /*odr_awb_std_1_4*/, + 53430 /*odr_awb_sve_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 26958 /*fr_grid_1_0*/, + 59136 /*odr_af_std_1_4*/, + 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 35263 /*ifd_segmap_bnlm_1_4*/, + 54924 /*smurf_bnlm_1_0*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 9241 /*ifd_segmap_xnr_1_4*/, + 42329 /*smurf_xnr_1_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 51914 /*ifd_segmap_acm_1_4*/, + 28366 /*smurf_acm_1_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 2495 /*tnr7_spatial_1_1*/, + 29996 /*tnr_scaler_lb_1_1*/, + 23639 /*tnr7_ims_1_2*/, + 47873 /*ifd_segmap_tnr_bc_1_4*/, + 13101 /*smurf_tnr_bc_1_0*/, + 1502 /*tnr7_bc_1_2*/, + 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, + 14619 /*ifd_segmap_tnr_blend_1_4*/, + 42749 /*smurf_tnr_blend_1_0*/, + 20119 /*tnr7_blend_1_1*/, + 5215 /*odr_tnr_fp_yuvn_1_4*/, + 20623 /*tnr_scaler_fp_1_1*/, + 28787 /*image_upscaler_1_1*/, + 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/, + 20893 /*ifd_segmap_cas_1_4*/, + 37468 /*smurf_cas_1_0*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x3BF76B18C3F8FF87, + 0x0}; // { ifd_pipe_1_4[0], ifd_pipe_long_1_4[1], ifd_pipe_short_smth_1_4[2], + // rgbs_grid_1_1[7], ccm_3a_2_0[8], rgb_ir_2_0[9], odr_awb_std_1_4[10], + // odr_awb_sve_1_4[11], odr_awb_sat_1_4[12], aestatistics_2_1[13], odr_ae_1_4[14], + // ifd_lsc_1_4[15], fr_grid_1_0[19], odr_af_std_1_4[20], + // ifd_tnr_sp_bc_yuv4nm1_1_4[21], ifd_tnr_sp_bc_rs4nm1_1_4[22], + // ifd_tnr_fp_blend_yuvnm1_1_4[23], ifd_segmap_bnlm_1_4[24], smurf_bnlm_1_0[25], + // ifd_segmap_xnr_1_4[30], smurf_xnr_1_0[31], ifd_segmap_acm_1_4[35], + // smurf_acm_1_0[36], b2i_ds_1_1[40], lbff_crop_espa_1_4[41], tnr_scaler_lb_1_1[43], + // ifd_segmap_tnr_bc_1_4[45], smurf_tnr_bc_1_0[46], odr_tnr_sp_bc_rs4n_1_4[48], + // ifd_segmap_tnr_blend_1_4[49], smurf_tnr_blend_1_0[50], odr_tnr_fp_yuvn_1_4[52], + // tnr_scaler_fp_1_1[53], image_upscaler_1_1[54], odr_tnr_scale_fp_yuv4n_1_4[55], + // ifd_segmap_cas_1_4[56], smurf_cas_1_0[57], odr_ofs_mp_1_4[59], + // b2i_ds_output_1_1[60], odr_ofs_dp_1_4[61] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x278EF639C7F1FC0E, + 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {ifd_pipe_short_smth_1_4}[2], + // {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2, rgbs_grid_1_1, ccm_3a_2_0, + // rgb_ir_2_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sve_1_4}[5], {odr_awb_sat_1_4}[6], + // {aestatistics_2_1}[7], {odr_ae_1_4}[8], {ifd_lsc_1_4}[9], {lsc_1_2, gd_2_2, + // wb_1_1, fr_grid_1_0}[10], {odr_af_std_1_4}[11], {ifd_tnr_sp_bc_yuv4nm1_1_4}[12], + // {ifd_tnr_sp_bc_rs4nm1_1_4}[13], {ifd_tnr_fp_blend_yuvnm1_1_4}[14], + // {ifd_segmap_bnlm_1_4}[15], {smurf_bnlm_1_0}[16], {bnlm_3_4, bxt_demosaic, + // vcsc_2_0_b, gltm_2_0}[17], {ifd_segmap_xnr_1_4}[18], {smurf_xnr_1_0}[19], + // {xnr_5_4, vcr_3_1, glim_2_0}[20], {ifd_segmap_acm_1_4}[21], {smurf_acm_1_0}[22], + // {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[23], {lbff_crop_espa_1_4}[24], + // {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[25], {tnr7_ims_1_2}[26], + // {ifd_segmap_tnr_bc_1_4}[27], {smurf_tnr_bc_1_0}[28], {tnr7_bc_1_2, + // odr_tnr_sp_bc_rs4n_1_4}[29], {ifd_segmap_tnr_blend_1_4}[30], + // {smurf_tnr_blend_1_0}[31], {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, + // tnr_scaler_fp_1_1, image_upscaler_1_1}[32], {odr_tnr_scale_fp_yuv4n_1_4}[33], + // {ifd_segmap_cas_1_4}[34], {smurf_cas_1_0}[35], {cas_1_1, odr_ofs_mp_1_4, + // b2i_ds_output_1_1}[36], {odr_ofs_dp_1_4}[37] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x3FFFFF39C7F9FF8F, + 0x0}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {ifd_pipe_short_smth_1_4}[2], + // {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2}[3], {rgbs_grid_1_1}[4], + // {ccm_3a_2_0}[5], {rgb_ir_2_0}[6], {odr_awb_std_1_4}[7], {odr_awb_sve_1_4}[8], + // {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], {odr_ae_1_4}[11], {ifd_lsc_1_4}[12], + // {lsc_1_2, gd_2_2, wb_1_1}[13], {fr_grid_1_0}[14], {odr_af_std_1_4}[15], + // {ifd_tnr_sp_bc_yuv4nm1_1_4}[16], {ifd_tnr_sp_bc_rs4nm1_1_4}[17], + // {ifd_tnr_fp_blend_yuvnm1_1_4}[18], {ifd_segmap_bnlm_1_4}[19], + // {smurf_bnlm_1_0}[20], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[21], + // {ifd_segmap_xnr_1_4}[22], {smurf_xnr_1_0}[23], {xnr_5_4, vcr_3_1, glim_2_0}[24], + // {ifd_segmap_acm_1_4}[25], {smurf_acm_1_0}[26], {acm_1_2, gammatm_v4, csc_1_1}[27], + // {b2i_ds_1_1}[28], {lbff_crop_espa_1_4}[29], {tnr7_spatial_1_1}[30], + // {tnr_scaler_lb_1_1}[31], {tnr7_ims_1_2}[32], {ifd_segmap_tnr_bc_1_4}[33], + // {smurf_tnr_bc_1_0}[34], {tnr7_bc_1_2}[35], {odr_tnr_sp_bc_rs4n_1_4}[36], + // {ifd_segmap_tnr_blend_1_4}[37], {smurf_tnr_blend_1_0}[38], {tnr7_blend_1_1}[39], + // {odr_tnr_fp_yuvn_1_4}[40], {tnr_scaler_fp_1_1}[41], {image_upscaler_1_1}[42], + // {odr_tnr_scale_fp_yuv4n_1_4}[43], {ifd_segmap_cas_1_4}[44], {smurf_cas_1_0}[45], + // {cas_1_1}[46], {odr_ofs_mp_1_4}[47], {b2i_ds_output_1_1}[48], {odr_ofs_dp_1_4}[49] + // } + + uint8_t systemApisSizes[62] = {220 /*ifd_pipe_1_4*/, + 220 /*ifd_pipe_long_1_4*/, + 220 /*ifd_pipe_short_smth_1_4*/, + 5 /*dol_lite_1_2*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 0 /*rgb_ir_2_0*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sve_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 20 /*fr_grid_1_0*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 220 /*ifd_segmap_bnlm_1_4*/, + 0 /*smurf_bnlm_1_0*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 220 /*ifd_segmap_xnr_1_4*/, + 0 /*smurf_xnr_1_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 220 /*ifd_segmap_acm_1_4*/, + 0 /*smurf_acm_1_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*tnr7_spatial_1_1*/, + 0 /*tnr_scaler_lb_1_1*/, + 0 /*tnr7_ims_1_2*/, + 220 /*ifd_segmap_tnr_bc_1_4*/, + 0 /*smurf_tnr_bc_1_0*/, + 5 /*tnr7_bc_1_2*/, + 220 /*odr_tnr_sp_bc_rs4n_1_4*/, + 220 /*ifd_segmap_tnr_blend_1_4*/, + 0 /*smurf_tnr_blend_1_0*/, + 5 /*tnr7_blend_1_1*/, + 220 /*odr_tnr_fp_yuvn_1_4*/, + 0 /*tnr_scaler_fp_1_1*/, + 0 /*image_upscaler_1_1*/, + 220 /*odr_tnr_scale_fp_yuv4n_1_4*/, + 220 /*ifd_segmap_cas_1_4*/, + 0 /*smurf_cas_1_0*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[26].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffDol3InputsWithGmvWithTnrWithSapOuterNode::Init( + LbffDol3InputsWithGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 66, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[66] = {52446 /*ifd_pipe_1_4*/, + 24678 /*ifd_pipe_long_1_4*/, + 4386 /*ifd_pipe_short_smth_1_4*/, + 54871 /*dol_lite_1_2*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 14488 /*rgb_ir_2_0*/, + 38544 /*odr_awb_std_1_4*/, + 53430 /*odr_awb_sve_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 26958 /*fr_grid_1_0*/, + 59136 /*odr_af_std_1_4*/, + 51073 /*ifd_gmv_1_4*/, + 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 35263 /*ifd_segmap_bnlm_1_4*/, + 54924 /*smurf_bnlm_1_0*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 9241 /*ifd_segmap_xnr_1_4*/, + 42329 /*smurf_xnr_1_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 51914 /*ifd_segmap_acm_1_4*/, + 28366 /*smurf_acm_1_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 2495 /*tnr7_spatial_1_1*/, + 29996 /*tnr_scaler_lb_1_1*/, + 23639 /*tnr7_ims_1_2*/, + 40280 /*gmv_statistics_1_1*/, + 7416 /*odr_gmv_feature_1_4*/, + 41148 /*odr_gmv_match_1_4*/, + 47873 /*ifd_segmap_tnr_bc_1_4*/, + 13101 /*smurf_tnr_bc_1_0*/, + 1502 /*tnr7_bc_1_2*/, + 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, + 14619 /*ifd_segmap_tnr_blend_1_4*/, + 42749 /*smurf_tnr_blend_1_0*/, + 20119 /*tnr7_blend_1_1*/, + 5215 /*odr_tnr_fp_yuvn_1_4*/, + 20623 /*tnr_scaler_fp_1_1*/, + 28787 /*image_upscaler_1_1*/, + 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/, + 20893 /*ifd_segmap_cas_1_4*/, + 37468 /*smurf_cas_1_0*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0xBF77D63187F8FF87, + 0x3}; // { ifd_pipe_1_4[0], ifd_pipe_long_1_4[1], ifd_pipe_short_smth_1_4[2], + // rgbs_grid_1_1[7], ccm_3a_2_0[8], rgb_ir_2_0[9], odr_awb_std_1_4[10], + // odr_awb_sve_1_4[11], odr_awb_sat_1_4[12], aestatistics_2_1[13], odr_ae_1_4[14], + // ifd_lsc_1_4[15], fr_grid_1_0[19], odr_af_std_1_4[20], ifd_gmv_1_4[21], + // ifd_tnr_sp_bc_yuv4nm1_1_4[22], ifd_tnr_sp_bc_rs4nm1_1_4[23], + // ifd_tnr_fp_blend_yuvnm1_1_4[24], ifd_segmap_bnlm_1_4[25], smurf_bnlm_1_0[26], + // ifd_segmap_xnr_1_4[31], smurf_xnr_1_0[32], ifd_segmap_acm_1_4[36], + // smurf_acm_1_0[37], b2i_ds_1_1[41], lbff_crop_espa_1_4[42], tnr_scaler_lb_1_1[44], + // gmv_statistics_1_1[46], odr_gmv_feature_1_4[47], odr_gmv_match_1_4[48], + // ifd_segmap_tnr_bc_1_4[49], smurf_tnr_bc_1_0[50], odr_tnr_sp_bc_rs4n_1_4[52], + // ifd_segmap_tnr_blend_1_4[53], smurf_tnr_blend_1_0[54], odr_tnr_fp_yuvn_1_4[56], + // tnr_scaler_fp_1_1[57], image_upscaler_1_1[58], odr_tnr_scale_fp_yuv4n_1_4[59], + // ifd_segmap_cas_1_4[60], smurf_cas_1_0[61], odr_ofs_mp_1_4[63], + // b2i_ds_output_1_1[64], odr_ofs_dp_1_4[65] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x78EFEC738FF1FC0E, + 0x2}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {ifd_pipe_short_smth_1_4}[2], + // {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2, rgbs_grid_1_1, ccm_3a_2_0, + // rgb_ir_2_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sve_1_4}[5], {odr_awb_sat_1_4}[6], + // {aestatistics_2_1}[7], {odr_ae_1_4}[8], {ifd_lsc_1_4}[9], {lsc_1_2, gd_2_2, + // wb_1_1, fr_grid_1_0}[10], {odr_af_std_1_4}[11], {ifd_gmv_1_4}[12], + // {ifd_tnr_sp_bc_yuv4nm1_1_4}[13], {ifd_tnr_sp_bc_rs4nm1_1_4}[14], + // {ifd_tnr_fp_blend_yuvnm1_1_4}[15], {ifd_segmap_bnlm_1_4}[16], + // {smurf_bnlm_1_0}[17], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[18], + // {ifd_segmap_xnr_1_4}[19], {smurf_xnr_1_0}[20], {xnr_5_4, vcr_3_1, glim_2_0}[21], + // {ifd_segmap_acm_1_4}[22], {smurf_acm_1_0}[23], {acm_1_2, gammatm_v4, csc_1_1, + // b2i_ds_1_1}[24], {lbff_crop_espa_1_4}[25], {tnr7_spatial_1_1, + // tnr_scaler_lb_1_1}[26], {tnr7_ims_1_2}[27], {gmv_statistics_1_1}[28], + // {odr_gmv_feature_1_4}[29], {odr_gmv_match_1_4}[30], {ifd_segmap_tnr_bc_1_4}[31], + // {smurf_tnr_bc_1_0}[32], {tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[33], + // {ifd_segmap_tnr_blend_1_4}[34], {smurf_tnr_blend_1_0}[35], {tnr7_blend_1_1, + // odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[36], + // {odr_tnr_scale_fp_yuv4n_1_4}[37], {ifd_segmap_cas_1_4}[38], {smurf_cas_1_0}[39], + // {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[40], {odr_ofs_dp_1_4}[41] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0xFFFFFE738FF9FF8F, + 0x3}; // {{ifd_pipe_1_4}[0], {ifd_pipe_long_1_4}[1], {ifd_pipe_short_smth_1_4}[2], + // {dol_lite_1_2, bxt_blc, linearization2_0, dpc_2_2}[3], {rgbs_grid_1_1}[4], + // {ccm_3a_2_0}[5], {rgb_ir_2_0}[6], {odr_awb_std_1_4}[7], {odr_awb_sve_1_4}[8], + // {odr_awb_sat_1_4}[9], {aestatistics_2_1}[10], {odr_ae_1_4}[11], {ifd_lsc_1_4}[12], + // {lsc_1_2, gd_2_2, wb_1_1}[13], {fr_grid_1_0}[14], {odr_af_std_1_4}[15], + // {ifd_gmv_1_4}[16], {ifd_tnr_sp_bc_yuv4nm1_1_4}[17], + // {ifd_tnr_sp_bc_rs4nm1_1_4}[18], {ifd_tnr_fp_blend_yuvnm1_1_4}[19], + // {ifd_segmap_bnlm_1_4}[20], {smurf_bnlm_1_0}[21], {bnlm_3_4, bxt_demosaic, + // vcsc_2_0_b, gltm_2_0}[22], {ifd_segmap_xnr_1_4}[23], {smurf_xnr_1_0}[24], + // {xnr_5_4, vcr_3_1, glim_2_0}[25], {ifd_segmap_acm_1_4}[26], {smurf_acm_1_0}[27], + // {acm_1_2, gammatm_v4, csc_1_1}[28], {b2i_ds_1_1}[29], {lbff_crop_espa_1_4}[30], + // {tnr7_spatial_1_1}[31], {tnr_scaler_lb_1_1}[32], {tnr7_ims_1_2}[33], + // {gmv_statistics_1_1}[34], {odr_gmv_feature_1_4}[35], {odr_gmv_match_1_4}[36], + // {ifd_segmap_tnr_bc_1_4}[37], {smurf_tnr_bc_1_0}[38], {tnr7_bc_1_2}[39], + // {odr_tnr_sp_bc_rs4n_1_4}[40], {ifd_segmap_tnr_blend_1_4}[41], + // {smurf_tnr_blend_1_0}[42], {tnr7_blend_1_1}[43], {odr_tnr_fp_yuvn_1_4}[44], + // {tnr_scaler_fp_1_1}[45], {image_upscaler_1_1}[46], + // {odr_tnr_scale_fp_yuv4n_1_4}[47], {ifd_segmap_cas_1_4}[48], {smurf_cas_1_0}[49], + // {cas_1_1}[50], {odr_ofs_mp_1_4}[51], {b2i_ds_output_1_1}[52], {odr_ofs_dp_1_4}[53] + // } + + uint8_t systemApisSizes[66] = {220 /*ifd_pipe_1_4*/, + 220 /*ifd_pipe_long_1_4*/, + 220 /*ifd_pipe_short_smth_1_4*/, + 5 /*dol_lite_1_2*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 0 /*rgb_ir_2_0*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sve_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 20 /*fr_grid_1_0*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_gmv_1_4*/, + 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 220 /*ifd_segmap_bnlm_1_4*/, + 0 /*smurf_bnlm_1_0*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 220 /*ifd_segmap_xnr_1_4*/, + 0 /*smurf_xnr_1_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 220 /*ifd_segmap_acm_1_4*/, + 0 /*smurf_acm_1_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*tnr7_spatial_1_1*/, + 0 /*tnr_scaler_lb_1_1*/, + 0 /*tnr7_ims_1_2*/, + 20 /*gmv_statistics_1_1*/, + 220 /*odr_gmv_feature_1_4*/, + 220 /*odr_gmv_match_1_4*/, + 220 /*ifd_segmap_tnr_bc_1_4*/, + 0 /*smurf_tnr_bc_1_0*/, + 5 /*tnr7_bc_1_2*/, + 220 /*odr_tnr_sp_bc_rs4n_1_4*/, + 220 /*ifd_segmap_tnr_blend_1_4*/, + 0 /*smurf_tnr_blend_1_0*/, + 5 /*tnr7_blend_1_1*/, + 220 /*odr_tnr_fp_yuvn_1_4*/, + 0 /*tnr_scaler_fp_1_1*/, + 0 /*image_upscaler_1_1*/, + 220 /*odr_tnr_scale_fp_yuv4n_1_4*/, + 220 /*ifd_segmap_cas_1_4*/, + 0 /*smurf_cas_1_0*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[27].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffRgbIrNoGmvNoTnrWithSapOuterNode::Init( + LbffRgbIrNoGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 44, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[44] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 15021 /*rgbs_grid_1_1*/, + 14488 /*rgb_ir_2_0*/, + 60297 /*odr_ir_1_4*/, + 38544 /*odr_awb_std_1_4*/, + 53430 /*odr_awb_sve_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 35263 /*ifd_segmap_bnlm_1_4*/, + 54924 /*smurf_bnlm_1_0*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 9241 /*ifd_segmap_xnr_1_4*/, + 42329 /*smurf_xnr_1_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 51914 /*ifd_segmap_acm_1_4*/, + 28366 /*smurf_acm_1_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 28787 /*image_upscaler_1_1*/, + 20893 /*ifd_segmap_cas_1_4*/, + 37468 /*smurf_cas_1_0*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0xEF8C61FC7F1, + 0x0}; // { ifd_pipe_1_4[0], rgbs_grid_1_1[4], rgb_ir_2_0[5], odr_ir_1_4[6], + // odr_awb_std_1_4[7], odr_awb_sve_1_4[8], odr_awb_sat_1_4[9], ifd_lsc_1_4[10], + // ccm_3a_2_0[14], fr_grid_1_0[15], aestatistics_2_1[16], odr_ae_1_4[17], + // odr_af_std_1_4[18], ifd_segmap_bnlm_1_4[19], smurf_bnlm_1_0[20], + // ifd_segmap_xnr_1_4[25], smurf_xnr_1_0[26], ifd_segmap_acm_1_4[30], + // smurf_acm_1_0[31], b2i_ds_1_1[35], lbff_crop_espa_1_4[36], image_upscaler_1_1[37], + // ifd_segmap_cas_1_4[38], smurf_cas_1_0[39], odr_ofs_mp_1_4[41], + // b2i_ds_output_1_1[42], odr_ofs_dp_1_4[43] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x9F1CE3F0FC2, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgbs_grid_1_1, + // rgb_ir_2_0}[1], {odr_ir_1_4}[2], {odr_awb_std_1_4}[3], {odr_awb_sve_1_4}[4], + // {odr_awb_sat_1_4}[5], {ifd_lsc_1_4}[6], {lsc_1_2, gd_2_2, wb_1_1, ccm_3a_2_0, + // fr_grid_1_0}[7], {aestatistics_2_1}[8], {odr_ae_1_4}[9], {odr_af_std_1_4}[10], + // {ifd_segmap_bnlm_1_4}[11], {smurf_bnlm_1_0}[12], {bnlm_3_4, bxt_demosaic, + // vcsc_2_0_b, gltm_2_0}[13], {ifd_segmap_xnr_1_4}[14], {smurf_xnr_1_0}[15], + // {xnr_5_4, vcr_3_1, glim_2_0}[16], {ifd_segmap_acm_1_4}[17], {smurf_acm_1_0}[18], + // {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[19], {lbff_crop_espa_1_4}[20], + // {image_upscaler_1_1}[21], {ifd_segmap_cas_1_4}[22], {smurf_cas_1_0}[23], {cas_1_1, + // odr_ofs_mp_1_4, b2i_ds_output_1_1}[24], {odr_ofs_dp_1_4}[25] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0xFF9CE3FCFF3, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgbs_grid_1_1}[2], + // {rgb_ir_2_0}[3], {odr_ir_1_4}[4], {odr_awb_std_1_4}[5], {odr_awb_sve_1_4}[6], + // {odr_awb_sat_1_4}[7], {ifd_lsc_1_4}[8], {lsc_1_2, gd_2_2, wb_1_1}[9], + // {ccm_3a_2_0}[10], {fr_grid_1_0}[11], {aestatistics_2_1}[12], {odr_ae_1_4}[13], + // {odr_af_std_1_4}[14], {ifd_segmap_bnlm_1_4}[15], {smurf_bnlm_1_0}[16], {bnlm_3_4, + // bxt_demosaic, vcsc_2_0_b, gltm_2_0}[17], {ifd_segmap_xnr_1_4}[18], + // {smurf_xnr_1_0}[19], {xnr_5_4, vcr_3_1, glim_2_0}[20], {ifd_segmap_acm_1_4}[21], + // {smurf_acm_1_0}[22], {acm_1_2, gammatm_v4, csc_1_1}[23], {b2i_ds_1_1}[24], + // {lbff_crop_espa_1_4}[25], {image_upscaler_1_1}[26], {ifd_segmap_cas_1_4}[27], + // {smurf_cas_1_0}[28], {cas_1_1}[29], {odr_ofs_mp_1_4}[30], {b2i_ds_output_1_1}[31], + // {odr_ofs_dp_1_4}[32] } + + uint8_t systemApisSizes[44] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 24 /*rgbs_grid_1_1*/, + 0 /*rgb_ir_2_0*/, + 220 /*odr_ir_1_4*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sve_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_segmap_bnlm_1_4*/, + 0 /*smurf_bnlm_1_0*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 220 /*ifd_segmap_xnr_1_4*/, + 0 /*smurf_xnr_1_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 220 /*ifd_segmap_acm_1_4*/, + 0 /*smurf_acm_1_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*image_upscaler_1_1*/, + 220 /*ifd_segmap_cas_1_4*/, + 0 /*smurf_cas_1_0*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[21].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffRgbIrWithGmvNoTnrWithSapOuterNode::Init( + LbffRgbIrWithGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 48, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[48] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 15021 /*rgbs_grid_1_1*/, + 14488 /*rgb_ir_2_0*/, + 60297 /*odr_ir_1_4*/, + 38544 /*odr_awb_std_1_4*/, + 53430 /*odr_awb_sve_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 51073 /*ifd_gmv_1_4*/, + 35263 /*ifd_segmap_bnlm_1_4*/, + 54924 /*smurf_bnlm_1_0*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 9241 /*ifd_segmap_xnr_1_4*/, + 42329 /*smurf_xnr_1_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 51914 /*ifd_segmap_acm_1_4*/, + 28366 /*smurf_acm_1_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 28787 /*image_upscaler_1_1*/, + 40280 /*gmv_statistics_1_1*/, + 7416 /*odr_gmv_feature_1_4*/, + 41148 /*odr_gmv_match_1_4*/, + 20893 /*ifd_segmap_cas_1_4*/, + 37468 /*smurf_cas_1_0*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0xEFF18C3FC7F1, + 0x0}; // { ifd_pipe_1_4[0], rgbs_grid_1_1[4], rgb_ir_2_0[5], odr_ir_1_4[6], + // odr_awb_std_1_4[7], odr_awb_sve_1_4[8], odr_awb_sat_1_4[9], ifd_lsc_1_4[10], + // ccm_3a_2_0[14], fr_grid_1_0[15], aestatistics_2_1[16], odr_ae_1_4[17], + // odr_af_std_1_4[18], ifd_gmv_1_4[19], ifd_segmap_bnlm_1_4[20], smurf_bnlm_1_0[21], + // ifd_segmap_xnr_1_4[26], smurf_xnr_1_0[27], ifd_segmap_acm_1_4[31], + // smurf_acm_1_0[32], b2i_ds_1_1[36], lbff_crop_espa_1_4[37], image_upscaler_1_1[38], + // gmv_statistics_1_1[39], odr_gmv_feature_1_4[40], odr_gmv_match_1_4[41], + // ifd_segmap_cas_1_4[42], smurf_cas_1_0[43], odr_ofs_mp_1_4[45], + // b2i_ds_output_1_1[46], odr_ofs_dp_1_4[47] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x9FE39C7F0FC2, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgbs_grid_1_1, + // rgb_ir_2_0}[1], {odr_ir_1_4}[2], {odr_awb_std_1_4}[3], {odr_awb_sve_1_4}[4], + // {odr_awb_sat_1_4}[5], {ifd_lsc_1_4}[6], {lsc_1_2, gd_2_2, wb_1_1, ccm_3a_2_0, + // fr_grid_1_0}[7], {aestatistics_2_1}[8], {odr_ae_1_4}[9], {odr_af_std_1_4}[10], + // {ifd_gmv_1_4}[11], {ifd_segmap_bnlm_1_4}[12], {smurf_bnlm_1_0}[13], {bnlm_3_4, + // bxt_demosaic, vcsc_2_0_b, gltm_2_0}[14], {ifd_segmap_xnr_1_4}[15], + // {smurf_xnr_1_0}[16], {xnr_5_4, vcr_3_1, glim_2_0}[17], {ifd_segmap_acm_1_4}[18], + // {smurf_acm_1_0}[19], {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[20], + // {lbff_crop_espa_1_4}[21], {image_upscaler_1_1}[22], {gmv_statistics_1_1}[23], + // {odr_gmv_feature_1_4}[24], {odr_gmv_match_1_4}[25], {ifd_segmap_cas_1_4}[26], + // {smurf_cas_1_0}[27], {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[28], + // {odr_ofs_dp_1_4}[29] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0xFFF39C7FCFF3, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgbs_grid_1_1}[2], + // {rgb_ir_2_0}[3], {odr_ir_1_4}[4], {odr_awb_std_1_4}[5], {odr_awb_sve_1_4}[6], + // {odr_awb_sat_1_4}[7], {ifd_lsc_1_4}[8], {lsc_1_2, gd_2_2, wb_1_1}[9], + // {ccm_3a_2_0}[10], {fr_grid_1_0}[11], {aestatistics_2_1}[12], {odr_ae_1_4}[13], + // {odr_af_std_1_4}[14], {ifd_gmv_1_4}[15], {ifd_segmap_bnlm_1_4}[16], + // {smurf_bnlm_1_0}[17], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[18], + // {ifd_segmap_xnr_1_4}[19], {smurf_xnr_1_0}[20], {xnr_5_4, vcr_3_1, glim_2_0}[21], + // {ifd_segmap_acm_1_4}[22], {smurf_acm_1_0}[23], {acm_1_2, gammatm_v4, csc_1_1}[24], + // {b2i_ds_1_1}[25], {lbff_crop_espa_1_4}[26], {image_upscaler_1_1}[27], + // {gmv_statistics_1_1}[28], {odr_gmv_feature_1_4}[29], {odr_gmv_match_1_4}[30], + // {ifd_segmap_cas_1_4}[31], {smurf_cas_1_0}[32], {cas_1_1}[33], + // {odr_ofs_mp_1_4}[34], {b2i_ds_output_1_1}[35], {odr_ofs_dp_1_4}[36] } + + uint8_t systemApisSizes[48] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 24 /*rgbs_grid_1_1*/, + 0 /*rgb_ir_2_0*/, + 220 /*odr_ir_1_4*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sve_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_gmv_1_4*/, + 220 /*ifd_segmap_bnlm_1_4*/, + 0 /*smurf_bnlm_1_0*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 220 /*ifd_segmap_xnr_1_4*/, + 0 /*smurf_xnr_1_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 220 /*ifd_segmap_acm_1_4*/, + 0 /*smurf_acm_1_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*image_upscaler_1_1*/, + 20 /*gmv_statistics_1_1*/, + 220 /*odr_gmv_feature_1_4*/, + 220 /*odr_gmv_match_1_4*/, + 220 /*ifd_segmap_cas_1_4*/, + 0 /*smurf_cas_1_0*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[22].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffRgbIrNoGmvWithTnrWithSapOuterNode::Init( + LbffRgbIrNoGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 60, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[60] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 15021 /*rgbs_grid_1_1*/, + 14488 /*rgb_ir_2_0*/, + 60297 /*odr_ir_1_4*/, + 38544 /*odr_awb_std_1_4*/, + 53430 /*odr_awb_sve_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 35263 /*ifd_segmap_bnlm_1_4*/, + 54924 /*smurf_bnlm_1_0*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 9241 /*ifd_segmap_xnr_1_4*/, + 42329 /*smurf_xnr_1_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 51914 /*ifd_segmap_acm_1_4*/, + 28366 /*smurf_acm_1_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 2495 /*tnr7_spatial_1_1*/, + 29996 /*tnr_scaler_lb_1_1*/, + 23639 /*tnr7_ims_1_2*/, + 47873 /*ifd_segmap_tnr_bc_1_4*/, + 13101 /*smurf_tnr_bc_1_0*/, + 1502 /*tnr7_bc_1_2*/, + 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, + 14619 /*ifd_segmap_tnr_blend_1_4*/, + 42749 /*smurf_tnr_blend_1_0*/, + 20119 /*tnr7_blend_1_1*/, + 5215 /*odr_tnr_fp_yuvn_1_4*/, + 20623 /*tnr_scaler_fp_1_1*/, + 28787 /*image_upscaler_1_1*/, + 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/, + 20893 /*ifd_segmap_cas_1_4*/, + 37468 /*smurf_cas_1_0*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0xEFDDAC630FFC7F1, + 0x0}; // { ifd_pipe_1_4[0], rgbs_grid_1_1[4], rgb_ir_2_0[5], odr_ir_1_4[6], + // odr_awb_std_1_4[7], odr_awb_sve_1_4[8], odr_awb_sat_1_4[9], ifd_lsc_1_4[10], + // ccm_3a_2_0[14], fr_grid_1_0[15], aestatistics_2_1[16], odr_ae_1_4[17], + // odr_af_std_1_4[18], ifd_tnr_sp_bc_yuv4nm1_1_4[19], ifd_tnr_sp_bc_rs4nm1_1_4[20], + // ifd_tnr_fp_blend_yuvnm1_1_4[21], ifd_segmap_bnlm_1_4[22], smurf_bnlm_1_0[23], + // ifd_segmap_xnr_1_4[28], smurf_xnr_1_0[29], ifd_segmap_acm_1_4[33], + // smurf_acm_1_0[34], b2i_ds_1_1[38], lbff_crop_espa_1_4[39], tnr_scaler_lb_1_1[41], + // ifd_segmap_tnr_bc_1_4[43], smurf_tnr_bc_1_0[44], odr_tnr_sp_bc_rs4n_1_4[46], + // ifd_segmap_tnr_blend_1_4[47], smurf_tnr_blend_1_0[48], odr_tnr_fp_yuvn_1_4[50], + // tnr_scaler_fp_1_1[51], image_upscaler_1_1[52], odr_tnr_scale_fp_yuv4n_1_4[53], + // ifd_segmap_cas_1_4[54], smurf_cas_1_0[55], odr_ofs_mp_1_4[57], + // b2i_ds_output_1_1[58], odr_ofs_dp_1_4[59] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x9E3BD8E71FF0FC2, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgbs_grid_1_1, + // rgb_ir_2_0}[1], {odr_ir_1_4}[2], {odr_awb_std_1_4}[3], {odr_awb_sve_1_4}[4], + // {odr_awb_sat_1_4}[5], {ifd_lsc_1_4}[6], {lsc_1_2, gd_2_2, wb_1_1, ccm_3a_2_0, + // fr_grid_1_0}[7], {aestatistics_2_1}[8], {odr_ae_1_4}[9], {odr_af_std_1_4}[10], + // {ifd_tnr_sp_bc_yuv4nm1_1_4}[11], {ifd_tnr_sp_bc_rs4nm1_1_4}[12], + // {ifd_tnr_fp_blend_yuvnm1_1_4}[13], {ifd_segmap_bnlm_1_4}[14], + // {smurf_bnlm_1_0}[15], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[16], + // {ifd_segmap_xnr_1_4}[17], {smurf_xnr_1_0}[18], {xnr_5_4, vcr_3_1, glim_2_0}[19], + // {ifd_segmap_acm_1_4}[20], {smurf_acm_1_0}[21], {acm_1_2, gammatm_v4, csc_1_1, + // b2i_ds_1_1}[22], {lbff_crop_espa_1_4}[23], {tnr7_spatial_1_1, + // tnr_scaler_lb_1_1}[24], {tnr7_ims_1_2}[25], {ifd_segmap_tnr_bc_1_4}[26], + // {smurf_tnr_bc_1_0}[27], {tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[28], + // {ifd_segmap_tnr_blend_1_4}[29], {smurf_tnr_blend_1_0}[30], {tnr7_blend_1_1, + // odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[31], + // {odr_tnr_scale_fp_yuv4n_1_4}[32], {ifd_segmap_cas_1_4}[33], {smurf_cas_1_0}[34], + // {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[35], {odr_ofs_dp_1_4}[36] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0xFFFFFCE71FFCFF3, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgbs_grid_1_1}[2], + // {rgb_ir_2_0}[3], {odr_ir_1_4}[4], {odr_awb_std_1_4}[5], {odr_awb_sve_1_4}[6], + // {odr_awb_sat_1_4}[7], {ifd_lsc_1_4}[8], {lsc_1_2, gd_2_2, wb_1_1}[9], + // {ccm_3a_2_0}[10], {fr_grid_1_0}[11], {aestatistics_2_1}[12], {odr_ae_1_4}[13], + // {odr_af_std_1_4}[14], {ifd_tnr_sp_bc_yuv4nm1_1_4}[15], + // {ifd_tnr_sp_bc_rs4nm1_1_4}[16], {ifd_tnr_fp_blend_yuvnm1_1_4}[17], + // {ifd_segmap_bnlm_1_4}[18], {smurf_bnlm_1_0}[19], {bnlm_3_4, bxt_demosaic, + // vcsc_2_0_b, gltm_2_0}[20], {ifd_segmap_xnr_1_4}[21], {smurf_xnr_1_0}[22], + // {xnr_5_4, vcr_3_1, glim_2_0}[23], {ifd_segmap_acm_1_4}[24], {smurf_acm_1_0}[25], + // {acm_1_2, gammatm_v4, csc_1_1}[26], {b2i_ds_1_1}[27], {lbff_crop_espa_1_4}[28], + // {tnr7_spatial_1_1}[29], {tnr_scaler_lb_1_1}[30], {tnr7_ims_1_2}[31], + // {ifd_segmap_tnr_bc_1_4}[32], {smurf_tnr_bc_1_0}[33], {tnr7_bc_1_2}[34], + // {odr_tnr_sp_bc_rs4n_1_4}[35], {ifd_segmap_tnr_blend_1_4}[36], + // {smurf_tnr_blend_1_0}[37], {tnr7_blend_1_1}[38], {odr_tnr_fp_yuvn_1_4}[39], + // {tnr_scaler_fp_1_1}[40], {image_upscaler_1_1}[41], + // {odr_tnr_scale_fp_yuv4n_1_4}[42], {ifd_segmap_cas_1_4}[43], {smurf_cas_1_0}[44], + // {cas_1_1}[45], {odr_ofs_mp_1_4}[46], {b2i_ds_output_1_1}[47], {odr_ofs_dp_1_4}[48] + // } + + uint8_t systemApisSizes[60] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 24 /*rgbs_grid_1_1*/, + 0 /*rgb_ir_2_0*/, + 220 /*odr_ir_1_4*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sve_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 220 /*ifd_segmap_bnlm_1_4*/, + 0 /*smurf_bnlm_1_0*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 220 /*ifd_segmap_xnr_1_4*/, + 0 /*smurf_xnr_1_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 220 /*ifd_segmap_acm_1_4*/, + 0 /*smurf_acm_1_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*tnr7_spatial_1_1*/, + 0 /*tnr_scaler_lb_1_1*/, + 0 /*tnr7_ims_1_2*/, + 220 /*ifd_segmap_tnr_bc_1_4*/, + 0 /*smurf_tnr_bc_1_0*/, + 5 /*tnr7_bc_1_2*/, + 220 /*odr_tnr_sp_bc_rs4n_1_4*/, + 220 /*ifd_segmap_tnr_blend_1_4*/, + 0 /*smurf_tnr_blend_1_0*/, + 5 /*tnr7_blend_1_1*/, + 220 /*odr_tnr_fp_yuvn_1_4*/, + 0 /*tnr_scaler_fp_1_1*/, + 0 /*image_upscaler_1_1*/, + 220 /*odr_tnr_scale_fp_yuv4n_1_4*/, + 220 /*ifd_segmap_cas_1_4*/, + 0 /*smurf_cas_1_0*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[24].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffRgbIrWithGmvWithTnrWithSapOuterNode::Init( + LbffRgbIrWithGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 64, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[64] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 15021 /*rgbs_grid_1_1*/, + 14488 /*rgb_ir_2_0*/, + 60297 /*odr_ir_1_4*/, + 38544 /*odr_awb_std_1_4*/, + 53430 /*odr_awb_sve_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 51073 /*ifd_gmv_1_4*/, + 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 35263 /*ifd_segmap_bnlm_1_4*/, + 54924 /*smurf_bnlm_1_0*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 9241 /*ifd_segmap_xnr_1_4*/, + 42329 /*smurf_xnr_1_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 51914 /*ifd_segmap_acm_1_4*/, + 28366 /*smurf_acm_1_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 2495 /*tnr7_spatial_1_1*/, + 29996 /*tnr_scaler_lb_1_1*/, + 23639 /*tnr7_ims_1_2*/, + 40280 /*gmv_statistics_1_1*/, + 7416 /*odr_gmv_feature_1_4*/, + 41148 /*odr_gmv_match_1_4*/, + 47873 /*ifd_segmap_tnr_bc_1_4*/, + 13101 /*smurf_tnr_bc_1_0*/, + 1502 /*tnr7_bc_1_2*/, + 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, + 14619 /*ifd_segmap_tnr_blend_1_4*/, + 42749 /*smurf_tnr_blend_1_0*/, + 20119 /*tnr7_blend_1_1*/, + 5215 /*odr_tnr_fp_yuvn_1_4*/, + 20623 /*tnr_scaler_fp_1_1*/, + 28787 /*image_upscaler_1_1*/, + 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/, + 20893 /*ifd_segmap_cas_1_4*/, + 37468 /*smurf_cas_1_0*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0xEFDDF58C61FFC7F1, + 0x0}; // { ifd_pipe_1_4[0], rgbs_grid_1_1[4], rgb_ir_2_0[5], odr_ir_1_4[6], + // odr_awb_std_1_4[7], odr_awb_sve_1_4[8], odr_awb_sat_1_4[9], ifd_lsc_1_4[10], + // ccm_3a_2_0[14], fr_grid_1_0[15], aestatistics_2_1[16], odr_ae_1_4[17], + // odr_af_std_1_4[18], ifd_gmv_1_4[19], ifd_tnr_sp_bc_yuv4nm1_1_4[20], + // ifd_tnr_sp_bc_rs4nm1_1_4[21], ifd_tnr_fp_blend_yuvnm1_1_4[22], + // ifd_segmap_bnlm_1_4[23], smurf_bnlm_1_0[24], ifd_segmap_xnr_1_4[29], + // smurf_xnr_1_0[30], ifd_segmap_acm_1_4[34], smurf_acm_1_0[35], b2i_ds_1_1[39], + // lbff_crop_espa_1_4[40], tnr_scaler_lb_1_1[42], gmv_statistics_1_1[44], + // odr_gmv_feature_1_4[45], odr_gmv_match_1_4[46], ifd_segmap_tnr_bc_1_4[47], + // smurf_tnr_bc_1_0[48], odr_tnr_sp_bc_rs4n_1_4[50], ifd_segmap_tnr_blend_1_4[51], + // smurf_tnr_blend_1_0[52], odr_tnr_fp_yuvn_1_4[54], tnr_scaler_fp_1_1[55], + // image_upscaler_1_1[56], odr_tnr_scale_fp_yuv4n_1_4[57], ifd_segmap_cas_1_4[58], + // smurf_cas_1_0[59], odr_ofs_mp_1_4[61], b2i_ds_output_1_1[62], odr_ofs_dp_1_4[63] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x9E3BFB1CE3FF0FC2, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, rgbs_grid_1_1, + // rgb_ir_2_0}[1], {odr_ir_1_4}[2], {odr_awb_std_1_4}[3], {odr_awb_sve_1_4}[4], + // {odr_awb_sat_1_4}[5], {ifd_lsc_1_4}[6], {lsc_1_2, gd_2_2, wb_1_1, ccm_3a_2_0, + // fr_grid_1_0}[7], {aestatistics_2_1}[8], {odr_ae_1_4}[9], {odr_af_std_1_4}[10], + // {ifd_gmv_1_4}[11], {ifd_tnr_sp_bc_yuv4nm1_1_4}[12], + // {ifd_tnr_sp_bc_rs4nm1_1_4}[13], {ifd_tnr_fp_blend_yuvnm1_1_4}[14], + // {ifd_segmap_bnlm_1_4}[15], {smurf_bnlm_1_0}[16], {bnlm_3_4, bxt_demosaic, + // vcsc_2_0_b, gltm_2_0}[17], {ifd_segmap_xnr_1_4}[18], {smurf_xnr_1_0}[19], + // {xnr_5_4, vcr_3_1, glim_2_0}[20], {ifd_segmap_acm_1_4}[21], {smurf_acm_1_0}[22], + // {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[23], {lbff_crop_espa_1_4}[24], + // {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[25], {tnr7_ims_1_2}[26], + // {gmv_statistics_1_1}[27], {odr_gmv_feature_1_4}[28], {odr_gmv_match_1_4}[29], + // {ifd_segmap_tnr_bc_1_4}[30], {smurf_tnr_bc_1_0}[31], {tnr7_bc_1_2, + // odr_tnr_sp_bc_rs4n_1_4}[32], {ifd_segmap_tnr_blend_1_4}[33], + // {smurf_tnr_blend_1_0}[34], {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, + // tnr_scaler_fp_1_1, image_upscaler_1_1}[35], {odr_tnr_scale_fp_yuv4n_1_4}[36], + // {ifd_segmap_cas_1_4}[37], {smurf_cas_1_0}[38], {cas_1_1, odr_ofs_mp_1_4, + // b2i_ds_output_1_1}[39], {odr_ofs_dp_1_4}[40] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0xFFFFFF9CE3FFCFF3, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], {rgbs_grid_1_1}[2], + // {rgb_ir_2_0}[3], {odr_ir_1_4}[4], {odr_awb_std_1_4}[5], {odr_awb_sve_1_4}[6], + // {odr_awb_sat_1_4}[7], {ifd_lsc_1_4}[8], {lsc_1_2, gd_2_2, wb_1_1}[9], + // {ccm_3a_2_0}[10], {fr_grid_1_0}[11], {aestatistics_2_1}[12], {odr_ae_1_4}[13], + // {odr_af_std_1_4}[14], {ifd_gmv_1_4}[15], {ifd_tnr_sp_bc_yuv4nm1_1_4}[16], + // {ifd_tnr_sp_bc_rs4nm1_1_4}[17], {ifd_tnr_fp_blend_yuvnm1_1_4}[18], + // {ifd_segmap_bnlm_1_4}[19], {smurf_bnlm_1_0}[20], {bnlm_3_4, bxt_demosaic, + // vcsc_2_0_b, gltm_2_0}[21], {ifd_segmap_xnr_1_4}[22], {smurf_xnr_1_0}[23], + // {xnr_5_4, vcr_3_1, glim_2_0}[24], {ifd_segmap_acm_1_4}[25], {smurf_acm_1_0}[26], + // {acm_1_2, gammatm_v4, csc_1_1}[27], {b2i_ds_1_1}[28], {lbff_crop_espa_1_4}[29], + // {tnr7_spatial_1_1}[30], {tnr_scaler_lb_1_1}[31], {tnr7_ims_1_2}[32], + // {gmv_statistics_1_1}[33], {odr_gmv_feature_1_4}[34], {odr_gmv_match_1_4}[35], + // {ifd_segmap_tnr_bc_1_4}[36], {smurf_tnr_bc_1_0}[37], {tnr7_bc_1_2}[38], + // {odr_tnr_sp_bc_rs4n_1_4}[39], {ifd_segmap_tnr_blend_1_4}[40], + // {smurf_tnr_blend_1_0}[41], {tnr7_blend_1_1}[42], {odr_tnr_fp_yuvn_1_4}[43], + // {tnr_scaler_fp_1_1}[44], {image_upscaler_1_1}[45], + // {odr_tnr_scale_fp_yuv4n_1_4}[46], {ifd_segmap_cas_1_4}[47], {smurf_cas_1_0}[48], + // {cas_1_1}[49], {odr_ofs_mp_1_4}[50], {b2i_ds_output_1_1}[51], {odr_ofs_dp_1_4}[52] + // } + + uint8_t systemApisSizes[64] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 24 /*rgbs_grid_1_1*/, + 0 /*rgb_ir_2_0*/, + 220 /*odr_ir_1_4*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sve_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_gmv_1_4*/, + 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 220 /*ifd_segmap_bnlm_1_4*/, + 0 /*smurf_bnlm_1_0*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 220 /*ifd_segmap_xnr_1_4*/, + 0 /*smurf_xnr_1_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 220 /*ifd_segmap_acm_1_4*/, + 0 /*smurf_acm_1_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*tnr7_spatial_1_1*/, + 0 /*tnr_scaler_lb_1_1*/, + 0 /*tnr7_ims_1_2*/, + 20 /*gmv_statistics_1_1*/, + 220 /*odr_gmv_feature_1_4*/, + 220 /*odr_gmv_match_1_4*/, + 220 /*ifd_segmap_tnr_bc_1_4*/, + 0 /*smurf_tnr_bc_1_0*/, + 5 /*tnr7_bc_1_2*/, + 220 /*odr_tnr_sp_bc_rs4n_1_4*/, + 220 /*ifd_segmap_tnr_blend_1_4*/, + 0 /*smurf_tnr_blend_1_0*/, + 5 /*tnr7_blend_1_1*/, + 220 /*odr_tnr_fp_yuvn_1_4*/, + 0 /*tnr_scaler_fp_1_1*/, + 0 /*image_upscaler_1_1*/, + 220 /*odr_tnr_scale_fp_yuv4n_1_4*/, + 220 /*ifd_segmap_cas_1_4*/, + 0 /*smurf_cas_1_0*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[25].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffIrNoGmvNoTnrWithSapOuterNode::Init( + LbffIrNoGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 41, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[41] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 33184 /*dpc_2_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 38544 /*odr_awb_std_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 35263 /*ifd_segmap_bnlm_1_4*/, + 54924 /*smurf_bnlm_1_0*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 9241 /*ifd_segmap_xnr_1_4*/, + 42329 /*smurf_xnr_1_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 51914 /*ifd_segmap_acm_1_4*/, + 28366 /*smurf_acm_1_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 28787 /*image_upscaler_1_1*/, + 20893 /*ifd_segmap_cas_1_4*/, + 37468 /*smurf_cas_1_0*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x1DF18C3FF09, + 0x0}; // { ifd_pipe_1_4[0], ifd_lsc_1_4[3], rgbs_grid_1_1[8], ccm_3a_2_0[9], + // fr_grid_1_0[10], odr_awb_std_1_4[11], odr_awb_sat_1_4[12], aestatistics_2_1[13], + // odr_ae_1_4[14], odr_af_std_1_4[15], ifd_segmap_bnlm_1_4[16], smurf_bnlm_1_0[17], + // ifd_segmap_xnr_1_4[22], smurf_xnr_1_0[23], ifd_segmap_acm_1_4[27], + // smurf_acm_1_0[28], b2i_ds_1_1[32], lbff_crop_espa_1_4[33], image_upscaler_1_1[34], + // ifd_segmap_cas_1_4[35], smurf_cas_1_0[36], odr_ofs_mp_1_4[38], + // b2i_ds_output_1_1[39], odr_ofs_dp_1_4[40] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x13E39C7F81A, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, + // dpc_2_2, gd_2_2, wb_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0}[3], + // {odr_awb_std_1_4}[4], {odr_awb_sat_1_4}[5], {aestatistics_2_1}[6], + // {odr_ae_1_4}[7], {odr_af_std_1_4}[8], {ifd_segmap_bnlm_1_4}[9], + // {smurf_bnlm_1_0}[10], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[11], + // {ifd_segmap_xnr_1_4}[12], {smurf_xnr_1_0}[13], {xnr_5_4, vcr_3_1, glim_2_0}[14], + // {ifd_segmap_acm_1_4}[15], {smurf_acm_1_0}[16], {acm_1_2, gammatm_v4, csc_1_1, + // b2i_ds_1_1}[17], {lbff_crop_espa_1_4}[18], {image_upscaler_1_1}[19], + // {ifd_segmap_cas_1_4}[20], {smurf_cas_1_0}[21], {cas_1_1, odr_ofs_mp_1_4, + // b2i_ds_output_1_1}[22], {odr_ofs_dp_1_4}[23] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x1FF39C7FF1B, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, + // dpc_2_2, gd_2_2, wb_1_1}[3], {rgbs_grid_1_1}[4], {ccm_3a_2_0}[5], + // {fr_grid_1_0}[6], {odr_awb_std_1_4}[7], {odr_awb_sat_1_4}[8], + // {aestatistics_2_1}[9], {odr_ae_1_4}[10], {odr_af_std_1_4}[11], + // {ifd_segmap_bnlm_1_4}[12], {smurf_bnlm_1_0}[13], {bnlm_3_4, bxt_demosaic, + // vcsc_2_0_b, gltm_2_0}[14], {ifd_segmap_xnr_1_4}[15], {smurf_xnr_1_0}[16], + // {xnr_5_4, vcr_3_1, glim_2_0}[17], {ifd_segmap_acm_1_4}[18], {smurf_acm_1_0}[19], + // {acm_1_2, gammatm_v4, csc_1_1}[20], {b2i_ds_1_1}[21], {lbff_crop_espa_1_4}[22], + // {image_upscaler_1_1}[23], {ifd_segmap_cas_1_4}[24], {smurf_cas_1_0}[25], + // {cas_1_1}[26], {odr_ofs_mp_1_4}[27], {b2i_ds_output_1_1}[28], {odr_ofs_dp_1_4}[29] + // } + + uint8_t systemApisSizes[41] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 20 /*dpc_2_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_segmap_bnlm_1_4*/, + 0 /*smurf_bnlm_1_0*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 220 /*ifd_segmap_xnr_1_4*/, + 0 /*smurf_xnr_1_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 220 /*ifd_segmap_acm_1_4*/, + 0 /*smurf_acm_1_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*image_upscaler_1_1*/, + 220 /*ifd_segmap_cas_1_4*/, + 0 /*smurf_cas_1_0*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[18].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffIrWithGmvNoTnrWithSapOuterNode::Init( + LbffIrWithGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 45, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[45] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 33184 /*dpc_2_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 38544 /*odr_awb_std_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 51073 /*ifd_gmv_1_4*/, + 35263 /*ifd_segmap_bnlm_1_4*/, + 54924 /*smurf_bnlm_1_0*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 9241 /*ifd_segmap_xnr_1_4*/, + 42329 /*smurf_xnr_1_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 51914 /*ifd_segmap_acm_1_4*/, + 28366 /*smurf_acm_1_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 28787 /*image_upscaler_1_1*/, + 40280 /*gmv_statistics_1_1*/, + 7416 /*odr_gmv_feature_1_4*/, + 41148 /*odr_gmv_match_1_4*/, + 20893 /*ifd_segmap_cas_1_4*/, + 37468 /*smurf_cas_1_0*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x1DFE3187FF09, + 0x0}; // { ifd_pipe_1_4[0], ifd_lsc_1_4[3], rgbs_grid_1_1[8], ccm_3a_2_0[9], + // fr_grid_1_0[10], odr_awb_std_1_4[11], odr_awb_sat_1_4[12], aestatistics_2_1[13], + // odr_ae_1_4[14], odr_af_std_1_4[15], ifd_gmv_1_4[16], ifd_segmap_bnlm_1_4[17], + // smurf_bnlm_1_0[18], ifd_segmap_xnr_1_4[23], smurf_xnr_1_0[24], + // ifd_segmap_acm_1_4[28], smurf_acm_1_0[29], b2i_ds_1_1[33], lbff_crop_espa_1_4[34], + // image_upscaler_1_1[35], gmv_statistics_1_1[36], odr_gmv_feature_1_4[37], + // odr_gmv_match_1_4[38], ifd_segmap_cas_1_4[39], smurf_cas_1_0[40], + // odr_ofs_mp_1_4[42], b2i_ds_output_1_1[43], odr_ofs_dp_1_4[44] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x13FC738FF81A, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, + // dpc_2_2, gd_2_2, wb_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0}[3], + // {odr_awb_std_1_4}[4], {odr_awb_sat_1_4}[5], {aestatistics_2_1}[6], + // {odr_ae_1_4}[7], {odr_af_std_1_4}[8], {ifd_gmv_1_4}[9], {ifd_segmap_bnlm_1_4}[10], + // {smurf_bnlm_1_0}[11], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[12], + // {ifd_segmap_xnr_1_4}[13], {smurf_xnr_1_0}[14], {xnr_5_4, vcr_3_1, glim_2_0}[15], + // {ifd_segmap_acm_1_4}[16], {smurf_acm_1_0}[17], {acm_1_2, gammatm_v4, csc_1_1, + // b2i_ds_1_1}[18], {lbff_crop_espa_1_4}[19], {image_upscaler_1_1}[20], + // {gmv_statistics_1_1}[21], {odr_gmv_feature_1_4}[22], {odr_gmv_match_1_4}[23], + // {ifd_segmap_cas_1_4}[24], {smurf_cas_1_0}[25], {cas_1_1, odr_ofs_mp_1_4, + // b2i_ds_output_1_1}[26], {odr_ofs_dp_1_4}[27] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x1FFE738FFF1B, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, + // dpc_2_2, gd_2_2, wb_1_1}[3], {rgbs_grid_1_1}[4], {ccm_3a_2_0}[5], + // {fr_grid_1_0}[6], {odr_awb_std_1_4}[7], {odr_awb_sat_1_4}[8], + // {aestatistics_2_1}[9], {odr_ae_1_4}[10], {odr_af_std_1_4}[11], {ifd_gmv_1_4}[12], + // {ifd_segmap_bnlm_1_4}[13], {smurf_bnlm_1_0}[14], {bnlm_3_4, bxt_demosaic, + // vcsc_2_0_b, gltm_2_0}[15], {ifd_segmap_xnr_1_4}[16], {smurf_xnr_1_0}[17], + // {xnr_5_4, vcr_3_1, glim_2_0}[18], {ifd_segmap_acm_1_4}[19], {smurf_acm_1_0}[20], + // {acm_1_2, gammatm_v4, csc_1_1}[21], {b2i_ds_1_1}[22], {lbff_crop_espa_1_4}[23], + // {image_upscaler_1_1}[24], {gmv_statistics_1_1}[25], {odr_gmv_feature_1_4}[26], + // {odr_gmv_match_1_4}[27], {ifd_segmap_cas_1_4}[28], {smurf_cas_1_0}[29], + // {cas_1_1}[30], {odr_ofs_mp_1_4}[31], {b2i_ds_output_1_1}[32], {odr_ofs_dp_1_4}[33] + // } + + uint8_t systemApisSizes[45] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 20 /*dpc_2_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_gmv_1_4*/, + 220 /*ifd_segmap_bnlm_1_4*/, + 0 /*smurf_bnlm_1_0*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 220 /*ifd_segmap_xnr_1_4*/, + 0 /*smurf_xnr_1_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 220 /*ifd_segmap_acm_1_4*/, + 0 /*smurf_acm_1_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*image_upscaler_1_1*/, + 20 /*gmv_statistics_1_1*/, + 220 /*odr_gmv_feature_1_4*/, + 220 /*odr_gmv_match_1_4*/, + 220 /*ifd_segmap_cas_1_4*/, + 0 /*smurf_cas_1_0*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[19].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffIrNoGmvWithTnrWithSapOuterNode::Init( + LbffIrNoGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 57, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[57] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 33184 /*dpc_2_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 38544 /*odr_awb_std_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 35263 /*ifd_segmap_bnlm_1_4*/, + 54924 /*smurf_bnlm_1_0*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 9241 /*ifd_segmap_xnr_1_4*/, + 42329 /*smurf_xnr_1_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 51914 /*ifd_segmap_acm_1_4*/, + 28366 /*smurf_acm_1_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 2495 /*tnr7_spatial_1_1*/, + 29996 /*tnr_scaler_lb_1_1*/, + 23639 /*tnr7_ims_1_2*/, + 47873 /*ifd_segmap_tnr_bc_1_4*/, + 13101 /*smurf_tnr_bc_1_0*/, + 1502 /*tnr7_bc_1_2*/, + 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, + 14619 /*ifd_segmap_tnr_blend_1_4*/, + 42749 /*smurf_tnr_blend_1_0*/, + 20119 /*tnr7_blend_1_1*/, + 5215 /*odr_tnr_fp_yuvn_1_4*/, + 20623 /*tnr_scaler_fp_1_1*/, + 28787 /*image_upscaler_1_1*/, + 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/, + 20893 /*ifd_segmap_cas_1_4*/, + 37468 /*smurf_cas_1_0*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x1DFBB58C61FFF09, + 0x0}; // { ifd_pipe_1_4[0], ifd_lsc_1_4[3], rgbs_grid_1_1[8], ccm_3a_2_0[9], + // fr_grid_1_0[10], odr_awb_std_1_4[11], odr_awb_sat_1_4[12], aestatistics_2_1[13], + // odr_ae_1_4[14], odr_af_std_1_4[15], ifd_tnr_sp_bc_yuv4nm1_1_4[16], + // ifd_tnr_sp_bc_rs4nm1_1_4[17], ifd_tnr_fp_blend_yuvnm1_1_4[18], + // ifd_segmap_bnlm_1_4[19], smurf_bnlm_1_0[20], ifd_segmap_xnr_1_4[25], + // smurf_xnr_1_0[26], ifd_segmap_acm_1_4[30], smurf_acm_1_0[31], b2i_ds_1_1[35], + // lbff_crop_espa_1_4[36], tnr_scaler_lb_1_1[38], ifd_segmap_tnr_bc_1_4[40], + // smurf_tnr_bc_1_0[41], odr_tnr_sp_bc_rs4n_1_4[43], ifd_segmap_tnr_blend_1_4[44], + // smurf_tnr_blend_1_0[45], odr_tnr_fp_yuvn_1_4[47], tnr_scaler_fp_1_1[48], + // image_upscaler_1_1[49], odr_tnr_scale_fp_yuv4n_1_4[50], ifd_segmap_cas_1_4[51], + // smurf_cas_1_0[52], odr_ofs_mp_1_4[54], b2i_ds_output_1_1[55], odr_ofs_dp_1_4[56] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x13C77B1CE3FF81A, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, + // dpc_2_2, gd_2_2, wb_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0}[3], + // {odr_awb_std_1_4}[4], {odr_awb_sat_1_4}[5], {aestatistics_2_1}[6], + // {odr_ae_1_4}[7], {odr_af_std_1_4}[8], {ifd_tnr_sp_bc_yuv4nm1_1_4}[9], + // {ifd_tnr_sp_bc_rs4nm1_1_4}[10], {ifd_tnr_fp_blend_yuvnm1_1_4}[11], + // {ifd_segmap_bnlm_1_4}[12], {smurf_bnlm_1_0}[13], {bnlm_3_4, bxt_demosaic, + // vcsc_2_0_b, gltm_2_0}[14], {ifd_segmap_xnr_1_4}[15], {smurf_xnr_1_0}[16], + // {xnr_5_4, vcr_3_1, glim_2_0}[17], {ifd_segmap_acm_1_4}[18], {smurf_acm_1_0}[19], + // {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[20], {lbff_crop_espa_1_4}[21], + // {tnr7_spatial_1_1, tnr_scaler_lb_1_1}[22], {tnr7_ims_1_2}[23], + // {ifd_segmap_tnr_bc_1_4}[24], {smurf_tnr_bc_1_0}[25], {tnr7_bc_1_2, + // odr_tnr_sp_bc_rs4n_1_4}[26], {ifd_segmap_tnr_blend_1_4}[27], + // {smurf_tnr_blend_1_0}[28], {tnr7_blend_1_1, odr_tnr_fp_yuvn_1_4, + // tnr_scaler_fp_1_1, image_upscaler_1_1}[29], {odr_tnr_scale_fp_yuv4n_1_4}[30], + // {ifd_segmap_cas_1_4}[31], {smurf_cas_1_0}[32], {cas_1_1, odr_ofs_mp_1_4, + // b2i_ds_output_1_1}[33], {odr_ofs_dp_1_4}[34] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x1FFFFF9CE3FFF1B, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, + // dpc_2_2, gd_2_2, wb_1_1}[3], {rgbs_grid_1_1}[4], {ccm_3a_2_0}[5], + // {fr_grid_1_0}[6], {odr_awb_std_1_4}[7], {odr_awb_sat_1_4}[8], + // {aestatistics_2_1}[9], {odr_ae_1_4}[10], {odr_af_std_1_4}[11], + // {ifd_tnr_sp_bc_yuv4nm1_1_4}[12], {ifd_tnr_sp_bc_rs4nm1_1_4}[13], + // {ifd_tnr_fp_blend_yuvnm1_1_4}[14], {ifd_segmap_bnlm_1_4}[15], + // {smurf_bnlm_1_0}[16], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[17], + // {ifd_segmap_xnr_1_4}[18], {smurf_xnr_1_0}[19], {xnr_5_4, vcr_3_1, glim_2_0}[20], + // {ifd_segmap_acm_1_4}[21], {smurf_acm_1_0}[22], {acm_1_2, gammatm_v4, csc_1_1}[23], + // {b2i_ds_1_1}[24], {lbff_crop_espa_1_4}[25], {tnr7_spatial_1_1}[26], + // {tnr_scaler_lb_1_1}[27], {tnr7_ims_1_2}[28], {ifd_segmap_tnr_bc_1_4}[29], + // {smurf_tnr_bc_1_0}[30], {tnr7_bc_1_2}[31], {odr_tnr_sp_bc_rs4n_1_4}[32], + // {ifd_segmap_tnr_blend_1_4}[33], {smurf_tnr_blend_1_0}[34], {tnr7_blend_1_1}[35], + // {odr_tnr_fp_yuvn_1_4}[36], {tnr_scaler_fp_1_1}[37], {image_upscaler_1_1}[38], + // {odr_tnr_scale_fp_yuv4n_1_4}[39], {ifd_segmap_cas_1_4}[40], {smurf_cas_1_0}[41], + // {cas_1_1}[42], {odr_ofs_mp_1_4}[43], {b2i_ds_output_1_1}[44], {odr_ofs_dp_1_4}[45] + // } + + uint8_t systemApisSizes[57] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 20 /*dpc_2_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 220 /*ifd_segmap_bnlm_1_4*/, + 0 /*smurf_bnlm_1_0*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 220 /*ifd_segmap_xnr_1_4*/, + 0 /*smurf_xnr_1_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 220 /*ifd_segmap_acm_1_4*/, + 0 /*smurf_acm_1_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*tnr7_spatial_1_1*/, + 0 /*tnr_scaler_lb_1_1*/, + 0 /*tnr7_ims_1_2*/, + 220 /*ifd_segmap_tnr_bc_1_4*/, + 0 /*smurf_tnr_bc_1_0*/, + 5 /*tnr7_bc_1_2*/, + 220 /*odr_tnr_sp_bc_rs4n_1_4*/, + 220 /*ifd_segmap_tnr_blend_1_4*/, + 0 /*smurf_tnr_blend_1_0*/, + 5 /*tnr7_blend_1_1*/, + 220 /*odr_tnr_fp_yuvn_1_4*/, + 0 /*tnr_scaler_fp_1_1*/, + 0 /*image_upscaler_1_1*/, + 220 /*odr_tnr_scale_fp_yuv4n_1_4*/, + 220 /*ifd_segmap_cas_1_4*/, + 0 /*smurf_cas_1_0*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[21].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffIrWithGmvWithTnrWithSapOuterNode::Init( + LbffIrWithGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 61, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[61] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 33184 /*dpc_2_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 38544 /*odr_awb_std_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 51073 /*ifd_gmv_1_4*/, + 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 35263 /*ifd_segmap_bnlm_1_4*/, + 54924 /*smurf_bnlm_1_0*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 9241 /*ifd_segmap_xnr_1_4*/, + 42329 /*smurf_xnr_1_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 51914 /*ifd_segmap_acm_1_4*/, + 28366 /*smurf_acm_1_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 2495 /*tnr7_spatial_1_1*/, + 29996 /*tnr_scaler_lb_1_1*/, + 23639 /*tnr7_ims_1_2*/, + 40280 /*gmv_statistics_1_1*/, + 7416 /*odr_gmv_feature_1_4*/, + 41148 /*odr_gmv_match_1_4*/, + 47873 /*ifd_segmap_tnr_bc_1_4*/, + 13101 /*smurf_tnr_bc_1_0*/, + 1502 /*tnr7_bc_1_2*/, + 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, + 14619 /*ifd_segmap_tnr_blend_1_4*/, + 42749 /*smurf_tnr_blend_1_0*/, + 20119 /*tnr7_blend_1_1*/, + 5215 /*odr_tnr_fp_yuvn_1_4*/, + 20623 /*tnr_scaler_fp_1_1*/, + 28787 /*image_upscaler_1_1*/, + 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/, + 20893 /*ifd_segmap_cas_1_4*/, + 37468 /*smurf_cas_1_0*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x1DFBBEB18C3FFF09, + 0x0}; // { ifd_pipe_1_4[0], ifd_lsc_1_4[3], rgbs_grid_1_1[8], ccm_3a_2_0[9], + // fr_grid_1_0[10], odr_awb_std_1_4[11], odr_awb_sat_1_4[12], aestatistics_2_1[13], + // odr_ae_1_4[14], odr_af_std_1_4[15], ifd_gmv_1_4[16], + // ifd_tnr_sp_bc_yuv4nm1_1_4[17], ifd_tnr_sp_bc_rs4nm1_1_4[18], + // ifd_tnr_fp_blend_yuvnm1_1_4[19], ifd_segmap_bnlm_1_4[20], smurf_bnlm_1_0[21], + // ifd_segmap_xnr_1_4[26], smurf_xnr_1_0[27], ifd_segmap_acm_1_4[31], + // smurf_acm_1_0[32], b2i_ds_1_1[36], lbff_crop_espa_1_4[37], tnr_scaler_lb_1_1[39], + // gmv_statistics_1_1[41], odr_gmv_feature_1_4[42], odr_gmv_match_1_4[43], + // ifd_segmap_tnr_bc_1_4[44], smurf_tnr_bc_1_0[45], odr_tnr_sp_bc_rs4n_1_4[47], + // ifd_segmap_tnr_blend_1_4[48], smurf_tnr_blend_1_0[49], odr_tnr_fp_yuvn_1_4[51], + // tnr_scaler_fp_1_1[52], image_upscaler_1_1[53], odr_tnr_scale_fp_yuv4n_1_4[54], + // ifd_segmap_cas_1_4[55], smurf_cas_1_0[56], odr_ofs_mp_1_4[58], + // b2i_ds_output_1_1[59], odr_ofs_dp_1_4[60] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x13C77F639C7FF81A, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, + // dpc_2_2, gd_2_2, wb_1_1, rgbs_grid_1_1, ccm_3a_2_0, fr_grid_1_0}[3], + // {odr_awb_std_1_4}[4], {odr_awb_sat_1_4}[5], {aestatistics_2_1}[6], + // {odr_ae_1_4}[7], {odr_af_std_1_4}[8], {ifd_gmv_1_4}[9], + // {ifd_tnr_sp_bc_yuv4nm1_1_4}[10], {ifd_tnr_sp_bc_rs4nm1_1_4}[11], + // {ifd_tnr_fp_blend_yuvnm1_1_4}[12], {ifd_segmap_bnlm_1_4}[13], + // {smurf_bnlm_1_0}[14], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[15], + // {ifd_segmap_xnr_1_4}[16], {smurf_xnr_1_0}[17], {xnr_5_4, vcr_3_1, glim_2_0}[18], + // {ifd_segmap_acm_1_4}[19], {smurf_acm_1_0}[20], {acm_1_2, gammatm_v4, csc_1_1, + // b2i_ds_1_1}[21], {lbff_crop_espa_1_4}[22], {tnr7_spatial_1_1, + // tnr_scaler_lb_1_1}[23], {tnr7_ims_1_2}[24], {gmv_statistics_1_1}[25], + // {odr_gmv_feature_1_4}[26], {odr_gmv_match_1_4}[27], {ifd_segmap_tnr_bc_1_4}[28], + // {smurf_tnr_bc_1_0}[29], {tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[30], + // {ifd_segmap_tnr_blend_1_4}[31], {smurf_tnr_blend_1_0}[32], {tnr7_blend_1_1, + // odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[33], + // {odr_tnr_scale_fp_yuv4n_1_4}[34], {ifd_segmap_cas_1_4}[35], {smurf_cas_1_0}[36], + // {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[37], {odr_ofs_dp_1_4}[38] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x1FFFFFF39C7FFF1B, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, + // dpc_2_2, gd_2_2, wb_1_1}[3], {rgbs_grid_1_1}[4], {ccm_3a_2_0}[5], + // {fr_grid_1_0}[6], {odr_awb_std_1_4}[7], {odr_awb_sat_1_4}[8], + // {aestatistics_2_1}[9], {odr_ae_1_4}[10], {odr_af_std_1_4}[11], {ifd_gmv_1_4}[12], + // {ifd_tnr_sp_bc_yuv4nm1_1_4}[13], {ifd_tnr_sp_bc_rs4nm1_1_4}[14], + // {ifd_tnr_fp_blend_yuvnm1_1_4}[15], {ifd_segmap_bnlm_1_4}[16], + // {smurf_bnlm_1_0}[17], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[18], + // {ifd_segmap_xnr_1_4}[19], {smurf_xnr_1_0}[20], {xnr_5_4, vcr_3_1, glim_2_0}[21], + // {ifd_segmap_acm_1_4}[22], {smurf_acm_1_0}[23], {acm_1_2, gammatm_v4, csc_1_1}[24], + // {b2i_ds_1_1}[25], {lbff_crop_espa_1_4}[26], {tnr7_spatial_1_1}[27], + // {tnr_scaler_lb_1_1}[28], {tnr7_ims_1_2}[29], {gmv_statistics_1_1}[30], + // {odr_gmv_feature_1_4}[31], {odr_gmv_match_1_4}[32], {ifd_segmap_tnr_bc_1_4}[33], + // {smurf_tnr_bc_1_0}[34], {tnr7_bc_1_2}[35], {odr_tnr_sp_bc_rs4n_1_4}[36], + // {ifd_segmap_tnr_blend_1_4}[37], {smurf_tnr_blend_1_0}[38], {tnr7_blend_1_1}[39], + // {odr_tnr_fp_yuvn_1_4}[40], {tnr_scaler_fp_1_1}[41], {image_upscaler_1_1}[42], + // {odr_tnr_scale_fp_yuv4n_1_4}[43], {ifd_segmap_cas_1_4}[44], {smurf_cas_1_0}[45], + // {cas_1_1}[46], {odr_ofs_mp_1_4}[47], {b2i_ds_output_1_1}[48], {odr_ofs_dp_1_4}[49] + // } + + uint8_t systemApisSizes[61] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 20 /*dpc_2_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_gmv_1_4*/, + 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 220 /*ifd_segmap_bnlm_1_4*/, + 0 /*smurf_bnlm_1_0*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 220 /*ifd_segmap_xnr_1_4*/, + 0 /*smurf_xnr_1_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 220 /*ifd_segmap_acm_1_4*/, + 0 /*smurf_acm_1_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*tnr7_spatial_1_1*/, + 0 /*tnr_scaler_lb_1_1*/, + 0 /*tnr7_ims_1_2*/, + 20 /*gmv_statistics_1_1*/, + 220 /*odr_gmv_feature_1_4*/, + 220 /*odr_gmv_match_1_4*/, + 220 /*ifd_segmap_tnr_bc_1_4*/, + 0 /*smurf_tnr_bc_1_0*/, + 5 /*tnr7_bc_1_2*/, + 220 /*odr_tnr_sp_bc_rs4n_1_4*/, + 220 /*ifd_segmap_tnr_blend_1_4*/, + 0 /*smurf_tnr_blend_1_0*/, + 5 /*tnr7_blend_1_1*/, + 220 /*odr_tnr_fp_yuvn_1_4*/, + 0 /*tnr_scaler_fp_1_1*/, + 0 /*image_upscaler_1_1*/, + 220 /*odr_tnr_scale_fp_yuv4n_1_4*/, + 220 /*ifd_segmap_cas_1_4*/, + 0 /*smurf_cas_1_0*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[22].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode::Init( + LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 47, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[47] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 54812 /*odr_dpc_pdaf_1_4*/, + 14488 /*rgb_ir_2_0*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 38544 /*odr_awb_std_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 22427 /*ifd_pdaf_1_4*/, + 43213 /*pext_1_0*/, + 44308 /*pafstatistics_1_2*/, + 26892 /*odr_pdaf_1_4*/, + 35263 /*ifd_segmap_bnlm_1_4*/, + 54924 /*smurf_bnlm_1_0*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 9241 /*ifd_segmap_xnr_1_4*/, + 42329 /*smurf_xnr_1_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 51914 /*ifd_segmap_acm_1_4*/, + 28366 /*smurf_acm_1_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 28787 /*image_upscaler_1_1*/, + 20893 /*ifd_segmap_cas_1_4*/, + 37468 /*smurf_cas_1_0*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x77C630FFFC71, + 0x0}; // { ifd_pipe_1_4[0], odr_dpc_pdaf_1_4[4], rgb_ir_2_0[5], ifd_lsc_1_4[6], + // rgbs_grid_1_1[10], ccm_3a_2_0[11], fr_grid_1_0[12], odr_awb_std_1_4[13], + // odr_awb_sat_1_4[14], aestatistics_2_1[15], odr_ae_1_4[16], odr_af_std_1_4[17], + // ifd_pdaf_1_4[18], pext_1_0[19], pafstatistics_1_2[20], odr_pdaf_1_4[21], + // ifd_segmap_bnlm_1_4[22], smurf_bnlm_1_0[23], ifd_segmap_xnr_1_4[28], + // smurf_xnr_1_0[29], ifd_segmap_acm_1_4[33], smurf_acm_1_0[34], b2i_ds_1_1[38], + // lbff_crop_espa_1_4[39], image_upscaler_1_1[40], ifd_segmap_cas_1_4[41], + // smurf_cas_1_0[42], odr_ofs_mp_1_4[44], b2i_ds_output_1_1[45], odr_ofs_dp_1_4[46] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x4F8E71FFE0C2, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, odr_dpc_pdaf_1_4, + // rgb_ir_2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, rgbs_grid_1_1, + // ccm_3a_2_0, fr_grid_1_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sat_1_4}[5], + // {aestatistics_2_1}[6], {odr_ae_1_4}[7], {odr_af_std_1_4}[8], {ifd_pdaf_1_4}[9], + // {pext_1_0}[10], {pafstatistics_1_2}[11], {odr_pdaf_1_4}[12], + // {ifd_segmap_bnlm_1_4}[13], {smurf_bnlm_1_0}[14], {bnlm_3_4, bxt_demosaic, + // vcsc_2_0_b, gltm_2_0}[15], {ifd_segmap_xnr_1_4}[16], {smurf_xnr_1_0}[17], + // {xnr_5_4, vcr_3_1, glim_2_0}[18], {ifd_segmap_acm_1_4}[19], {smurf_acm_1_0}[20], + // {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[21], {lbff_crop_espa_1_4}[22], + // {image_upscaler_1_1}[23], {ifd_segmap_cas_1_4}[24], {smurf_cas_1_0}[25], {cas_1_1, + // odr_ofs_mp_1_4, b2i_ds_output_1_1}[26], {odr_ofs_dp_1_4}[27] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x7FCE71FFFCF3, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], + // {odr_dpc_pdaf_1_4}[2], {rgb_ir_2_0}[3], {ifd_lsc_1_4}[4], {lsc_1_2, gd_2_2, + // wb_1_1}[5], {rgbs_grid_1_1}[6], {ccm_3a_2_0}[7], {fr_grid_1_0}[8], + // {odr_awb_std_1_4}[9], {odr_awb_sat_1_4}[10], {aestatistics_2_1}[11], + // {odr_ae_1_4}[12], {odr_af_std_1_4}[13], {ifd_pdaf_1_4}[14], {pext_1_0}[15], + // {pafstatistics_1_2}[16], {odr_pdaf_1_4}[17], {ifd_segmap_bnlm_1_4}[18], + // {smurf_bnlm_1_0}[19], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[20], + // {ifd_segmap_xnr_1_4}[21], {smurf_xnr_1_0}[22], {xnr_5_4, vcr_3_1, glim_2_0}[23], + // {ifd_segmap_acm_1_4}[24], {smurf_acm_1_0}[25], {acm_1_2, gammatm_v4, csc_1_1}[26], + // {b2i_ds_1_1}[27], {lbff_crop_espa_1_4}[28], {image_upscaler_1_1}[29], + // {ifd_segmap_cas_1_4}[30], {smurf_cas_1_0}[31], {cas_1_1}[32], + // {odr_ofs_mp_1_4}[33], {b2i_ds_output_1_1}[34], {odr_ofs_dp_1_4}[35] } + + uint8_t systemApisSizes[47] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 220 /*odr_dpc_pdaf_1_4*/, + 0 /*rgb_ir_2_0*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_pdaf_1_4*/, + 24 /*pext_1_0*/, + 8 /*pafstatistics_1_2*/, + 220 /*odr_pdaf_1_4*/, + 220 /*ifd_segmap_bnlm_1_4*/, + 0 /*smurf_bnlm_1_0*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 220 /*ifd_segmap_xnr_1_4*/, + 0 /*smurf_xnr_1_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 220 /*ifd_segmap_acm_1_4*/, + 0 /*smurf_acm_1_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*image_upscaler_1_1*/, + 220 /*ifd_segmap_cas_1_4*/, + 0 /*smurf_cas_1_0*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[24].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode::Init( + LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 51, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[51] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 54812 /*odr_dpc_pdaf_1_4*/, + 14488 /*rgb_ir_2_0*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 38544 /*odr_awb_std_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 22427 /*ifd_pdaf_1_4*/, + 43213 /*pext_1_0*/, + 44308 /*pafstatistics_1_2*/, + 26892 /*odr_pdaf_1_4*/, + 51073 /*ifd_gmv_1_4*/, + 35263 /*ifd_segmap_bnlm_1_4*/, + 54924 /*smurf_bnlm_1_0*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 9241 /*ifd_segmap_xnr_1_4*/, + 42329 /*smurf_xnr_1_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 51914 /*ifd_segmap_acm_1_4*/, + 28366 /*smurf_acm_1_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 28787 /*image_upscaler_1_1*/, + 40280 /*gmv_statistics_1_1*/, + 7416 /*odr_gmv_feature_1_4*/, + 41148 /*odr_gmv_match_1_4*/, + 20893 /*ifd_segmap_cas_1_4*/, + 37468 /*smurf_cas_1_0*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x77F8C61FFFC71, + 0x0}; // { ifd_pipe_1_4[0], odr_dpc_pdaf_1_4[4], rgb_ir_2_0[5], ifd_lsc_1_4[6], + // rgbs_grid_1_1[10], ccm_3a_2_0[11], fr_grid_1_0[12], odr_awb_std_1_4[13], + // odr_awb_sat_1_4[14], aestatistics_2_1[15], odr_ae_1_4[16], odr_af_std_1_4[17], + // ifd_pdaf_1_4[18], pext_1_0[19], pafstatistics_1_2[20], odr_pdaf_1_4[21], + // ifd_gmv_1_4[22], ifd_segmap_bnlm_1_4[23], smurf_bnlm_1_0[24], + // ifd_segmap_xnr_1_4[29], smurf_xnr_1_0[30], ifd_segmap_acm_1_4[34], + // smurf_acm_1_0[35], b2i_ds_1_1[39], lbff_crop_espa_1_4[40], image_upscaler_1_1[41], + // gmv_statistics_1_1[42], odr_gmv_feature_1_4[43], odr_gmv_match_1_4[44], + // ifd_segmap_cas_1_4[45], smurf_cas_1_0[46], odr_ofs_mp_1_4[48], + // b2i_ds_output_1_1[49], odr_ofs_dp_1_4[50] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x4FF1CE3FFE0C2, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, odr_dpc_pdaf_1_4, + // rgb_ir_2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, rgbs_grid_1_1, + // ccm_3a_2_0, fr_grid_1_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sat_1_4}[5], + // {aestatistics_2_1}[6], {odr_ae_1_4}[7], {odr_af_std_1_4}[8], {ifd_pdaf_1_4}[9], + // {pext_1_0}[10], {pafstatistics_1_2}[11], {odr_pdaf_1_4}[12], {ifd_gmv_1_4}[13], + // {ifd_segmap_bnlm_1_4}[14], {smurf_bnlm_1_0}[15], {bnlm_3_4, bxt_demosaic, + // vcsc_2_0_b, gltm_2_0}[16], {ifd_segmap_xnr_1_4}[17], {smurf_xnr_1_0}[18], + // {xnr_5_4, vcr_3_1, glim_2_0}[19], {ifd_segmap_acm_1_4}[20], {smurf_acm_1_0}[21], + // {acm_1_2, gammatm_v4, csc_1_1, b2i_ds_1_1}[22], {lbff_crop_espa_1_4}[23], + // {image_upscaler_1_1}[24], {gmv_statistics_1_1}[25], {odr_gmv_feature_1_4}[26], + // {odr_gmv_match_1_4}[27], {ifd_segmap_cas_1_4}[28], {smurf_cas_1_0}[29], {cas_1_1, + // odr_ofs_mp_1_4, b2i_ds_output_1_1}[30], {odr_ofs_dp_1_4}[31] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x7FF9CE3FFFCF3, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], + // {odr_dpc_pdaf_1_4}[2], {rgb_ir_2_0}[3], {ifd_lsc_1_4}[4], {lsc_1_2, gd_2_2, + // wb_1_1}[5], {rgbs_grid_1_1}[6], {ccm_3a_2_0}[7], {fr_grid_1_0}[8], + // {odr_awb_std_1_4}[9], {odr_awb_sat_1_4}[10], {aestatistics_2_1}[11], + // {odr_ae_1_4}[12], {odr_af_std_1_4}[13], {ifd_pdaf_1_4}[14], {pext_1_0}[15], + // {pafstatistics_1_2}[16], {odr_pdaf_1_4}[17], {ifd_gmv_1_4}[18], + // {ifd_segmap_bnlm_1_4}[19], {smurf_bnlm_1_0}[20], {bnlm_3_4, bxt_demosaic, + // vcsc_2_0_b, gltm_2_0}[21], {ifd_segmap_xnr_1_4}[22], {smurf_xnr_1_0}[23], + // {xnr_5_4, vcr_3_1, glim_2_0}[24], {ifd_segmap_acm_1_4}[25], {smurf_acm_1_0}[26], + // {acm_1_2, gammatm_v4, csc_1_1}[27], {b2i_ds_1_1}[28], {lbff_crop_espa_1_4}[29], + // {image_upscaler_1_1}[30], {gmv_statistics_1_1}[31], {odr_gmv_feature_1_4}[32], + // {odr_gmv_match_1_4}[33], {ifd_segmap_cas_1_4}[34], {smurf_cas_1_0}[35], + // {cas_1_1}[36], {odr_ofs_mp_1_4}[37], {b2i_ds_output_1_1}[38], {odr_ofs_dp_1_4}[39] + // } + + uint8_t systemApisSizes[51] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 220 /*odr_dpc_pdaf_1_4*/, + 0 /*rgb_ir_2_0*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_pdaf_1_4*/, + 24 /*pext_1_0*/, + 8 /*pafstatistics_1_2*/, + 220 /*odr_pdaf_1_4*/, + 220 /*ifd_gmv_1_4*/, + 220 /*ifd_segmap_bnlm_1_4*/, + 0 /*smurf_bnlm_1_0*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 220 /*ifd_segmap_xnr_1_4*/, + 0 /*smurf_xnr_1_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 220 /*ifd_segmap_acm_1_4*/, + 0 /*smurf_acm_1_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*image_upscaler_1_1*/, + 20 /*gmv_statistics_1_1*/, + 220 /*odr_gmv_feature_1_4*/, + 220 /*odr_gmv_match_1_4*/, + 220 /*ifd_segmap_cas_1_4*/, + 0 /*smurf_cas_1_0*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[25].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode::Init( + LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 63, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[63] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 54812 /*odr_dpc_pdaf_1_4*/, + 14488 /*rgb_ir_2_0*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 38544 /*odr_awb_std_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 22427 /*ifd_pdaf_1_4*/, + 43213 /*pext_1_0*/, + 44308 /*pafstatistics_1_2*/, + 26892 /*odr_pdaf_1_4*/, + 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 35263 /*ifd_segmap_bnlm_1_4*/, + 54924 /*smurf_bnlm_1_0*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 9241 /*ifd_segmap_xnr_1_4*/, + 42329 /*smurf_xnr_1_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 51914 /*ifd_segmap_acm_1_4*/, + 28366 /*smurf_acm_1_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 2495 /*tnr7_spatial_1_1*/, + 29996 /*tnr_scaler_lb_1_1*/, + 23639 /*tnr7_ims_1_2*/, + 47873 /*ifd_segmap_tnr_bc_1_4*/, + 13101 /*smurf_tnr_bc_1_0*/, + 1502 /*tnr7_bc_1_2*/, + 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, + 14619 /*ifd_segmap_tnr_blend_1_4*/, + 42749 /*smurf_tnr_blend_1_0*/, + 20119 /*tnr7_blend_1_1*/, + 5215 /*odr_tnr_fp_yuvn_1_4*/, + 20623 /*tnr_scaler_fp_1_1*/, + 28787 /*image_upscaler_1_1*/, + 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/, + 20893 /*ifd_segmap_cas_1_4*/, + 37468 /*smurf_cas_1_0*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x77EED63187FFFC71, + 0x0}; // { ifd_pipe_1_4[0], odr_dpc_pdaf_1_4[4], rgb_ir_2_0[5], ifd_lsc_1_4[6], + // rgbs_grid_1_1[10], ccm_3a_2_0[11], fr_grid_1_0[12], odr_awb_std_1_4[13], + // odr_awb_sat_1_4[14], aestatistics_2_1[15], odr_ae_1_4[16], odr_af_std_1_4[17], + // ifd_pdaf_1_4[18], pext_1_0[19], pafstatistics_1_2[20], odr_pdaf_1_4[21], + // ifd_tnr_sp_bc_yuv4nm1_1_4[22], ifd_tnr_sp_bc_rs4nm1_1_4[23], + // ifd_tnr_fp_blend_yuvnm1_1_4[24], ifd_segmap_bnlm_1_4[25], smurf_bnlm_1_0[26], + // ifd_segmap_xnr_1_4[31], smurf_xnr_1_0[32], ifd_segmap_acm_1_4[36], + // smurf_acm_1_0[37], b2i_ds_1_1[41], lbff_crop_espa_1_4[42], tnr_scaler_lb_1_1[44], + // ifd_segmap_tnr_bc_1_4[46], smurf_tnr_bc_1_0[47], odr_tnr_sp_bc_rs4n_1_4[49], + // ifd_segmap_tnr_blend_1_4[50], smurf_tnr_blend_1_0[51], odr_tnr_fp_yuvn_1_4[53], + // tnr_scaler_fp_1_1[54], image_upscaler_1_1[55], odr_tnr_scale_fp_yuv4n_1_4[56], + // ifd_segmap_cas_1_4[57], smurf_cas_1_0[58], odr_ofs_mp_1_4[60], + // b2i_ds_output_1_1[61], odr_ofs_dp_1_4[62] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0x4F1DEC738FFFE0C2, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, odr_dpc_pdaf_1_4, + // rgb_ir_2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, rgbs_grid_1_1, + // ccm_3a_2_0, fr_grid_1_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sat_1_4}[5], + // {aestatistics_2_1}[6], {odr_ae_1_4}[7], {odr_af_std_1_4}[8], {ifd_pdaf_1_4}[9], + // {pext_1_0}[10], {pafstatistics_1_2}[11], {odr_pdaf_1_4}[12], + // {ifd_tnr_sp_bc_yuv4nm1_1_4}[13], {ifd_tnr_sp_bc_rs4nm1_1_4}[14], + // {ifd_tnr_fp_blend_yuvnm1_1_4}[15], {ifd_segmap_bnlm_1_4}[16], + // {smurf_bnlm_1_0}[17], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[18], + // {ifd_segmap_xnr_1_4}[19], {smurf_xnr_1_0}[20], {xnr_5_4, vcr_3_1, glim_2_0}[21], + // {ifd_segmap_acm_1_4}[22], {smurf_acm_1_0}[23], {acm_1_2, gammatm_v4, csc_1_1, + // b2i_ds_1_1}[24], {lbff_crop_espa_1_4}[25], {tnr7_spatial_1_1, + // tnr_scaler_lb_1_1}[26], {tnr7_ims_1_2}[27], {ifd_segmap_tnr_bc_1_4}[28], + // {smurf_tnr_bc_1_0}[29], {tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[30], + // {ifd_segmap_tnr_blend_1_4}[31], {smurf_tnr_blend_1_0}[32], {tnr7_blend_1_1, + // odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[33], + // {odr_tnr_scale_fp_yuv4n_1_4}[34], {ifd_segmap_cas_1_4}[35], {smurf_cas_1_0}[36], + // {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[37], {odr_ofs_dp_1_4}[38] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0x7FFFFE738FFFFCF3, + 0x0}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], + // {odr_dpc_pdaf_1_4}[2], {rgb_ir_2_0}[3], {ifd_lsc_1_4}[4], {lsc_1_2, gd_2_2, + // wb_1_1}[5], {rgbs_grid_1_1}[6], {ccm_3a_2_0}[7], {fr_grid_1_0}[8], + // {odr_awb_std_1_4}[9], {odr_awb_sat_1_4}[10], {aestatistics_2_1}[11], + // {odr_ae_1_4}[12], {odr_af_std_1_4}[13], {ifd_pdaf_1_4}[14], {pext_1_0}[15], + // {pafstatistics_1_2}[16], {odr_pdaf_1_4}[17], {ifd_tnr_sp_bc_yuv4nm1_1_4}[18], + // {ifd_tnr_sp_bc_rs4nm1_1_4}[19], {ifd_tnr_fp_blend_yuvnm1_1_4}[20], + // {ifd_segmap_bnlm_1_4}[21], {smurf_bnlm_1_0}[22], {bnlm_3_4, bxt_demosaic, + // vcsc_2_0_b, gltm_2_0}[23], {ifd_segmap_xnr_1_4}[24], {smurf_xnr_1_0}[25], + // {xnr_5_4, vcr_3_1, glim_2_0}[26], {ifd_segmap_acm_1_4}[27], {smurf_acm_1_0}[28], + // {acm_1_2, gammatm_v4, csc_1_1}[29], {b2i_ds_1_1}[30], {lbff_crop_espa_1_4}[31], + // {tnr7_spatial_1_1}[32], {tnr_scaler_lb_1_1}[33], {tnr7_ims_1_2}[34], + // {ifd_segmap_tnr_bc_1_4}[35], {smurf_tnr_bc_1_0}[36], {tnr7_bc_1_2}[37], + // {odr_tnr_sp_bc_rs4n_1_4}[38], {ifd_segmap_tnr_blend_1_4}[39], + // {smurf_tnr_blend_1_0}[40], {tnr7_blend_1_1}[41], {odr_tnr_fp_yuvn_1_4}[42], + // {tnr_scaler_fp_1_1}[43], {image_upscaler_1_1}[44], + // {odr_tnr_scale_fp_yuv4n_1_4}[45], {ifd_segmap_cas_1_4}[46], {smurf_cas_1_0}[47], + // {cas_1_1}[48], {odr_ofs_mp_1_4}[49], {b2i_ds_output_1_1}[50], {odr_ofs_dp_1_4}[51] + // } + + uint8_t systemApisSizes[63] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 220 /*odr_dpc_pdaf_1_4*/, + 0 /*rgb_ir_2_0*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_pdaf_1_4*/, + 24 /*pext_1_0*/, + 8 /*pafstatistics_1_2*/, + 220 /*odr_pdaf_1_4*/, + 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 220 /*ifd_segmap_bnlm_1_4*/, + 0 /*smurf_bnlm_1_0*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 220 /*ifd_segmap_xnr_1_4*/, + 0 /*smurf_xnr_1_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 220 /*ifd_segmap_acm_1_4*/, + 0 /*smurf_acm_1_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*tnr7_spatial_1_1*/, + 0 /*tnr_scaler_lb_1_1*/, + 0 /*tnr7_ims_1_2*/, + 220 /*ifd_segmap_tnr_bc_1_4*/, + 0 /*smurf_tnr_bc_1_0*/, + 5 /*tnr7_bc_1_2*/, + 220 /*odr_tnr_sp_bc_rs4n_1_4*/, + 220 /*ifd_segmap_tnr_blend_1_4*/, + 0 /*smurf_tnr_blend_1_0*/, + 5 /*tnr7_blend_1_1*/, + 220 /*odr_tnr_fp_yuvn_1_4*/, + 0 /*tnr_scaler_fp_1_1*/, + 0 /*image_upscaler_1_1*/, + 220 /*odr_tnr_scale_fp_yuv4n_1_4*/, + 220 /*ifd_segmap_cas_1_4*/, + 0 /*smurf_cas_1_0*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[27].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +void LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode::Init( + LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration) { + OuterNode::Init(0, NodeTypes::Cb, 67, selectedGraphConfiguration->tuningMode, + selectedGraphConfiguration->streamId, + selectedGraphConfiguration->numberOfFragments); + + uint16_t kernelsUuids[67] = {52446 /*ifd_pipe_1_4*/, + 11700 /*bxt_blc*/, + 10326 /*linearization2_0*/, + 33184 /*dpc_2_2*/, + 54812 /*odr_dpc_pdaf_1_4*/, + 14488 /*rgb_ir_2_0*/, + 29313 /*ifd_lsc_1_4*/, + 2144 /*lsc_1_2*/, + 13882 /*gd_2_2*/, + 5144 /*wb_1_1*/, + 15021 /*rgbs_grid_1_1*/, + 62344 /*ccm_3a_2_0*/, + 26958 /*fr_grid_1_0*/, + 38544 /*odr_awb_std_1_4*/, + 1248 /*odr_awb_sat_1_4*/, + 55073 /*aestatistics_2_1*/, + 62556 /*odr_ae_1_4*/, + 59136 /*odr_af_std_1_4*/, + 22427 /*ifd_pdaf_1_4*/, + 43213 /*pext_1_0*/, + 44308 /*pafstatistics_1_2*/, + 26892 /*odr_pdaf_1_4*/, + 51073 /*ifd_gmv_1_4*/, + 7357 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 62054 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 16295 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 35263 /*ifd_segmap_bnlm_1_4*/, + 54924 /*smurf_bnlm_1_0*/, + 45146 /*bnlm_3_4*/, + 48695 /*bxt_demosaic*/, + 13708 /*vcsc_2_0_b*/, + 54721 /*gltm_2_0*/, + 9241 /*ifd_segmap_xnr_1_4*/, + 42329 /*smurf_xnr_1_0*/, + 30019 /*xnr_5_4*/, + 36035 /*vcr_3_1*/, + 36029 /*glim_2_0*/, + 51914 /*ifd_segmap_acm_1_4*/, + 28366 /*smurf_acm_1_0*/, + 17531 /*acm_1_2*/, + 5394 /*gammatm_v4*/, + 62703 /*csc_1_1*/, + 40299 /*b2i_ds_1_1*/, + 65466 /*lbff_crop_espa_1_4*/, + 2495 /*tnr7_spatial_1_1*/, + 29996 /*tnr_scaler_lb_1_1*/, + 23639 /*tnr7_ims_1_2*/, + 40280 /*gmv_statistics_1_1*/, + 7416 /*odr_gmv_feature_1_4*/, + 41148 /*odr_gmv_match_1_4*/, + 47873 /*ifd_segmap_tnr_bc_1_4*/, + 13101 /*smurf_tnr_bc_1_0*/, + 1502 /*tnr7_bc_1_2*/, + 63731 /*odr_tnr_sp_bc_rs4n_1_4*/, + 14619 /*ifd_segmap_tnr_blend_1_4*/, + 42749 /*smurf_tnr_blend_1_0*/, + 20119 /*tnr7_blend_1_1*/, + 5215 /*odr_tnr_fp_yuvn_1_4*/, + 20623 /*tnr_scaler_fp_1_1*/, + 28787 /*image_upscaler_1_1*/, + 65437 /*odr_tnr_scale_fp_yuv4n_1_4*/, + 20893 /*ifd_segmap_cas_1_4*/, + 37468 /*smurf_cas_1_0*/, + 9385 /*cas_1_1*/, + 16460 /*odr_ofs_mp_1_4*/, + 50136 /*b2i_ds_output_1_1*/, + 37951 /*odr_ofs_dp_1_4*/}; + uint64_t kernelsRcbBitmap[] = { + 0x7EEFAC630FFFFC71, + 0x7}; // { ifd_pipe_1_4[0], odr_dpc_pdaf_1_4[4], rgb_ir_2_0[5], ifd_lsc_1_4[6], + // rgbs_grid_1_1[10], ccm_3a_2_0[11], fr_grid_1_0[12], odr_awb_std_1_4[13], + // odr_awb_sat_1_4[14], aestatistics_2_1[15], odr_ae_1_4[16], odr_af_std_1_4[17], + // ifd_pdaf_1_4[18], pext_1_0[19], pafstatistics_1_2[20], odr_pdaf_1_4[21], + // ifd_gmv_1_4[22], ifd_tnr_sp_bc_yuv4nm1_1_4[23], ifd_tnr_sp_bc_rs4nm1_1_4[24], + // ifd_tnr_fp_blend_yuvnm1_1_4[25], ifd_segmap_bnlm_1_4[26], smurf_bnlm_1_0[27], + // ifd_segmap_xnr_1_4[32], smurf_xnr_1_0[33], ifd_segmap_acm_1_4[37], + // smurf_acm_1_0[38], b2i_ds_1_1[42], lbff_crop_espa_1_4[43], tnr_scaler_lb_1_1[45], + // gmv_statistics_1_1[47], odr_gmv_feature_1_4[48], odr_gmv_match_1_4[49], + // ifd_segmap_tnr_bc_1_4[50], smurf_tnr_bc_1_0[51], odr_tnr_sp_bc_rs4n_1_4[53], + // ifd_segmap_tnr_blend_1_4[54], smurf_tnr_blend_1_0[55], odr_tnr_fp_yuvn_1_4[57], + // tnr_scaler_fp_1_1[58], image_upscaler_1_1[59], odr_tnr_scale_fp_yuv4n_1_4[60], + // ifd_segmap_cas_1_4[61], smurf_cas_1_0[62], odr_ofs_mp_1_4[64], + // b2i_ds_output_1_1[65], odr_ofs_dp_1_4[66] } + uint64_t kernelsResolutionHistoryGroupBitmap[] = { + 0xF1DFD8E71FFFE0C2, + 0x4}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2, odr_dpc_pdaf_1_4, + // rgb_ir_2_0}[1], {ifd_lsc_1_4}[2], {lsc_1_2, gd_2_2, wb_1_1, rgbs_grid_1_1, + // ccm_3a_2_0, fr_grid_1_0}[3], {odr_awb_std_1_4}[4], {odr_awb_sat_1_4}[5], + // {aestatistics_2_1}[6], {odr_ae_1_4}[7], {odr_af_std_1_4}[8], {ifd_pdaf_1_4}[9], + // {pext_1_0}[10], {pafstatistics_1_2}[11], {odr_pdaf_1_4}[12], {ifd_gmv_1_4}[13], + // {ifd_tnr_sp_bc_yuv4nm1_1_4}[14], {ifd_tnr_sp_bc_rs4nm1_1_4}[15], + // {ifd_tnr_fp_blend_yuvnm1_1_4}[16], {ifd_segmap_bnlm_1_4}[17], + // {smurf_bnlm_1_0}[18], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[19], + // {ifd_segmap_xnr_1_4}[20], {smurf_xnr_1_0}[21], {xnr_5_4, vcr_3_1, glim_2_0}[22], + // {ifd_segmap_acm_1_4}[23], {smurf_acm_1_0}[24], {acm_1_2, gammatm_v4, csc_1_1, + // b2i_ds_1_1}[25], {lbff_crop_espa_1_4}[26], {tnr7_spatial_1_1, + // tnr_scaler_lb_1_1}[27], {tnr7_ims_1_2}[28], {gmv_statistics_1_1}[29], + // {odr_gmv_feature_1_4}[30], {odr_gmv_match_1_4}[31], {ifd_segmap_tnr_bc_1_4}[32], + // {smurf_tnr_bc_1_0}[33], {tnr7_bc_1_2, odr_tnr_sp_bc_rs4n_1_4}[34], + // {ifd_segmap_tnr_blend_1_4}[35], {smurf_tnr_blend_1_0}[36], {tnr7_blend_1_1, + // odr_tnr_fp_yuvn_1_4, tnr_scaler_fp_1_1, image_upscaler_1_1}[37], + // {odr_tnr_scale_fp_yuv4n_1_4}[38], {ifd_segmap_cas_1_4}[39], {smurf_cas_1_0}[40], + // {cas_1_1, odr_ofs_mp_1_4, b2i_ds_output_1_1}[41], {odr_ofs_dp_1_4}[42] } + uint64_t kernelsFragmentsDescriptorGroupBitmap[] = { + 0xFFFFFCE71FFFFCF3, + 0x7}; // {{ifd_pipe_1_4}[0], {bxt_blc, linearization2_0, dpc_2_2}[1], + // {odr_dpc_pdaf_1_4}[2], {rgb_ir_2_0}[3], {ifd_lsc_1_4}[4], {lsc_1_2, gd_2_2, + // wb_1_1}[5], {rgbs_grid_1_1}[6], {ccm_3a_2_0}[7], {fr_grid_1_0}[8], + // {odr_awb_std_1_4}[9], {odr_awb_sat_1_4}[10], {aestatistics_2_1}[11], + // {odr_ae_1_4}[12], {odr_af_std_1_4}[13], {ifd_pdaf_1_4}[14], {pext_1_0}[15], + // {pafstatistics_1_2}[16], {odr_pdaf_1_4}[17], {ifd_gmv_1_4}[18], + // {ifd_tnr_sp_bc_yuv4nm1_1_4}[19], {ifd_tnr_sp_bc_rs4nm1_1_4}[20], + // {ifd_tnr_fp_blend_yuvnm1_1_4}[21], {ifd_segmap_bnlm_1_4}[22], + // {smurf_bnlm_1_0}[23], {bnlm_3_4, bxt_demosaic, vcsc_2_0_b, gltm_2_0}[24], + // {ifd_segmap_xnr_1_4}[25], {smurf_xnr_1_0}[26], {xnr_5_4, vcr_3_1, glim_2_0}[27], + // {ifd_segmap_acm_1_4}[28], {smurf_acm_1_0}[29], {acm_1_2, gammatm_v4, csc_1_1}[30], + // {b2i_ds_1_1}[31], {lbff_crop_espa_1_4}[32], {tnr7_spatial_1_1}[33], + // {tnr_scaler_lb_1_1}[34], {tnr7_ims_1_2}[35], {gmv_statistics_1_1}[36], + // {odr_gmv_feature_1_4}[37], {odr_gmv_match_1_4}[38], {ifd_segmap_tnr_bc_1_4}[39], + // {smurf_tnr_bc_1_0}[40], {tnr7_bc_1_2}[41], {odr_tnr_sp_bc_rs4n_1_4}[42], + // {ifd_segmap_tnr_blend_1_4}[43], {smurf_tnr_blend_1_0}[44], {tnr7_blend_1_1}[45], + // {odr_tnr_fp_yuvn_1_4}[46], {tnr_scaler_fp_1_1}[47], {image_upscaler_1_1}[48], + // {odr_tnr_scale_fp_yuv4n_1_4}[49], {ifd_segmap_cas_1_4}[50], {smurf_cas_1_0}[51], + // {cas_1_1}[52], {odr_ofs_mp_1_4}[53], {b2i_ds_output_1_1}[54], {odr_ofs_dp_1_4}[55] + // } + + uint8_t systemApisSizes[67] = {220 /*ifd_pipe_1_4*/, + 5 /*bxt_blc*/, + 5 /*linearization2_0*/, + 20 /*dpc_2_2*/, + 220 /*odr_dpc_pdaf_1_4*/, + 0 /*rgb_ir_2_0*/, + 220 /*ifd_lsc_1_4*/, + 40 /*lsc_1_2*/, + 0 /*gd_2_2*/, + 0 /*wb_1_1*/, + 24 /*rgbs_grid_1_1*/, + 5 /*ccm_3a_2_0*/, + 20 /*fr_grid_1_0*/, + 220 /*odr_awb_std_1_4*/, + 220 /*odr_awb_sat_1_4*/, + 24 /*aestatistics_2_1*/, + 220 /*odr_ae_1_4*/, + 220 /*odr_af_std_1_4*/, + 220 /*ifd_pdaf_1_4*/, + 24 /*pext_1_0*/, + 8 /*pafstatistics_1_2*/, + 220 /*odr_pdaf_1_4*/, + 220 /*ifd_gmv_1_4*/, + 220 /*ifd_tnr_sp_bc_yuv4nm1_1_4*/, + 220 /*ifd_tnr_sp_bc_rs4nm1_1_4*/, + 220 /*ifd_tnr_fp_blend_yuvnm1_1_4*/, + 220 /*ifd_segmap_bnlm_1_4*/, + 0 /*smurf_bnlm_1_0*/, + 6 /*bnlm_3_4*/, + 0 /*bxt_demosaic*/, + 0 /*vcsc_2_0_b*/, + 0 /*gltm_2_0*/, + 220 /*ifd_segmap_xnr_1_4*/, + 0 /*smurf_xnr_1_0*/, + 5 /*xnr_5_4*/, + 0 /*vcr_3_1*/, + 0 /*glim_2_0*/, + 220 /*ifd_segmap_acm_1_4*/, + 0 /*smurf_acm_1_0*/, + 5 /*acm_1_2*/, + 0 /*gammatm_v4*/, + 0 /*csc_1_1*/, + 0 /*b2i_ds_1_1*/, + 220 /*lbff_crop_espa_1_4*/, + 0 /*tnr7_spatial_1_1*/, + 0 /*tnr_scaler_lb_1_1*/, + 0 /*tnr7_ims_1_2*/, + 20 /*gmv_statistics_1_1*/, + 220 /*odr_gmv_feature_1_4*/, + 220 /*odr_gmv_match_1_4*/, + 220 /*ifd_segmap_tnr_bc_1_4*/, + 0 /*smurf_tnr_bc_1_0*/, + 5 /*tnr7_bc_1_2*/, + 220 /*odr_tnr_sp_bc_rs4n_1_4*/, + 220 /*ifd_segmap_tnr_blend_1_4*/, + 0 /*smurf_tnr_blend_1_0*/, + 5 /*tnr7_blend_1_1*/, + 220 /*odr_tnr_fp_yuvn_1_4*/, + 0 /*tnr_scaler_fp_1_1*/, + 0 /*image_upscaler_1_1*/, + 220 /*odr_tnr_scale_fp_yuv4n_1_4*/, + 220 /*ifd_segmap_cas_1_4*/, + 0 /*smurf_cas_1_0*/, + 5 /*cas_1_1*/, + 220 /*odr_ofs_mp_1_4*/, + 0 /*b2i_ds_output_1_1*/, + 220 /*odr_ofs_dp_1_4*/}; + + InitRunKernels(kernelsUuids, kernelsRcbBitmap, selectedGraphConfiguration->resolutionInfos, + kernelsResolutionHistoryGroupBitmap, kernelsFragmentsDescriptorGroupBitmap, + selectedGraphConfiguration->resolutionHistories, + selectedGraphConfiguration->bppInfos, systemApisSizes, + selectedGraphConfiguration->systemApiConfiguration, + selectedGraphConfiguration->fragmentConfigurations); + + // Metadata update + nodeKernels.kernelList[28].run_kernel.metadata[0] = 1; // bnlm_3_4 + + // set default inner Node + setInnerNode(None); +} + +/* + * Inner Nodes Setters + */ +void IsysOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) { + // No inner nodes + (void)nodeInnerOptions; +} + +void LbffBayerNoGmvNoTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 34; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000064009D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1200000F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x000000003000009F + bitmaps.teb[0] = 0x3000009F; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3E0380000; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000044009D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1200000F9CE8D9BF1F1 + bitmaps.deb[0] = 0x8D9BF1F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x0000000020001E9F + bitmaps.teb[0] = 0x20001E9F; + // REB - 0x00000000000000000000001F12F67FE7 + bitmaps.reb[0] = 0x12F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 26 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x4000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000044009D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1200000F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x000000002000009F + bitmaps.teb[0] = 0x2000009F; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 26 odr_ofs_mp_1_4- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3E4380000; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000024009D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021200000F9CE8D9BF1F1 + bitmaps.deb[0] = 0x8D9BF1F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x0000000010001E9F + bitmaps.teb[0] = 0x10001E9F; + // REB - 0x00000000000000000000001F12F67FE7 + bitmaps.reb[0] = 0x12F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 27 b2i_ds_output_1_1- inner node disablement + // 28 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x18000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000024009D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021200000F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x000000001000009F + bitmaps.teb[0] = 0x1000009F; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 27 b2i_ds_output_1_1- inner node disablement + // 28 odr_ofs_dp_1_4- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3F8380000; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000080001E6811 + bitmaps.rbm[0] = 0x1E6811; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019BF1F1 + bitmaps.deb[0] = 0x19BF1F1; + // TEB - 0x0000000000001E97 + bitmaps.teb[0] = 0x1E97; + // REB - 0x00000000000000000000000002007FE7 + bitmaps.reb[0] = 0x2007FE7; + + // Kernels disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 bnlm_3_4- inner node disablement + // 10 bxt_demosaic- inner node disablement + // 11 vcsc_2_0_b- inner node disablement + // 12 gltm_2_0- inner node disablement + // 13 xnr_5_4- inner node disablement + // 14 vcr_3_1- inner node disablement + // 15 glim_2_0- inner node disablement + // 16 acm_1_2- inner node disablement + // 17 gammatm_v4- inner node disablement + // 18 csc_1_1- inner node disablement + // 22 b2i_ds_1_1- inner node disablement + // 23 lbff_crop_espa_1_4- inner node disablement + // 24 image_upscaler_1_1- inner node disablement + // 25 cas_1_1- inner node disablement + // 26 odr_ofs_mp_1_4- inner node disablement + // 27 b2i_ds_output_1_1- inner node disablement + // 28 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FC7FF80; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgb_ir_2_0- inner node disablement + // 5 ifd_lsc_1_4- inner node disablement + // 6 lsc_1_2- inner node disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 bnlm_3_4- inner node disablement + // 10 bxt_demosaic- inner node disablement + // 11 vcsc_2_0_b- inner node disablement + // 12 gltm_2_0- inner node disablement + // 13 xnr_5_4- inner node disablement + // 14 vcr_3_1- inner node disablement + // 15 glim_2_0- inner node disablement + // 16 acm_1_2- inner node disablement + // 17 gammatm_v4- inner node disablement + // 18 csc_1_1- inner node disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 22 b2i_ds_1_1- inner node disablement + // 23 lbff_crop_espa_1_4- inner node disablement + // 24 image_upscaler_1_1- inner node disablement + // 25 cas_1_1- inner node disablement + // 26 odr_ofs_mp_1_4- inner node disablement + // 27 b2i_ds_output_1_1- inner node disablement + // 28 odr_ofs_dp_1_4- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000064009D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1200000F9CE8D9BF1F1 + bitmaps.deb[0] = 0x8D9BF1F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x0000000030001E9F + bitmaps.teb[0] = 0x30001E9F; + // REB - 0x00000000000000000000001F12F67FE7 + bitmaps.reb[0] = 0x12F67FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerWithGmvNoTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 38; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x0000000000000000006400BD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E120000FF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x000000003032009F + bitmaps.teb[0] = 0x3032009F; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3E0380000; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x0000000000000000004400BD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C120000FF9CE8D9BF1F1 + bitmaps.deb[0] = 0x8D9BF1F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x0000000020321E9F + bitmaps.teb[0] = 0x20321E9F; + // REB - 0x00000000000000000000001F12F67FE7 + bitmaps.reb[0] = 0x12F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 26 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x4000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x0000000000000000004400BD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C120000FF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x000000002032009F + bitmaps.teb[0] = 0x2032009F; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 26 odr_ofs_mp_1_4- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3E4380000; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x0000000000000000002400BD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x0000000000002120000FF9CE8D9BF1F1 + bitmaps.deb[0] = 0x8D9BF1F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x0000000010321E9F + bitmaps.teb[0] = 0x10321E9F; + // REB - 0x00000000000000000000001F12F67FE7 + bitmaps.reb[0] = 0x12F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 27 b2i_ds_output_1_1- inner node disablement + // 28 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x18000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x0000000000000000002400BD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x0000000000002120000FF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x000000001032009F + bitmaps.teb[0] = 0x1032009F; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 27 b2i_ds_output_1_1- inner node disablement + // 28 odr_ofs_dp_1_4- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3F8380000; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000080001E6811 + bitmaps.rbm[0] = 0x1E6811; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019BF1F1 + bitmaps.deb[0] = 0x19BF1F1; + // TEB - 0x0000000000001E97 + bitmaps.teb[0] = 0x1E97; + // REB - 0x00000000000000000000000002007FE7 + bitmaps.reb[0] = 0x2007FE7; + + // Kernels disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 bnlm_3_4- inner node disablement + // 10 bxt_demosaic- inner node disablement + // 11 vcsc_2_0_b- inner node disablement + // 12 gltm_2_0- inner node disablement + // 13 xnr_5_4- inner node disablement + // 14 vcr_3_1- inner node disablement + // 15 glim_2_0- inner node disablement + // 16 acm_1_2- inner node disablement + // 17 gammatm_v4- inner node disablement + // 18 csc_1_1- inner node disablement + // 22 b2i_ds_1_1- inner node disablement + // 23 lbff_crop_espa_1_4- inner node disablement + // 24 image_upscaler_1_1- inner node disablement + // 25 cas_1_1- inner node disablement + // 26 odr_ofs_mp_1_4- inner node disablement + // 27 b2i_ds_output_1_1- inner node disablement + // 28 odr_ofs_dp_1_4- inner node disablement + // 34 ifd_gmv_1_4- inner node disablement + // 35 gmv_statistics_1_1- inner node disablement + // 36 odr_gmv_feature_1_4- inner node disablement + // 37 odr_gmv_match_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3C1FC7FF80; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgb_ir_2_0- inner node disablement + // 5 ifd_lsc_1_4- inner node disablement + // 6 lsc_1_2- inner node disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 bnlm_3_4- inner node disablement + // 10 bxt_demosaic- inner node disablement + // 11 vcsc_2_0_b- inner node disablement + // 12 gltm_2_0- inner node disablement + // 13 xnr_5_4- inner node disablement + // 14 vcr_3_1- inner node disablement + // 15 glim_2_0- inner node disablement + // 16 acm_1_2- inner node disablement + // 17 gammatm_v4- inner node disablement + // 18 csc_1_1- inner node disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 22 b2i_ds_1_1- inner node disablement + // 23 lbff_crop_espa_1_4- inner node disablement + // 24 image_upscaler_1_1- inner node disablement + // 25 cas_1_1- inner node disablement + // 26 odr_ofs_mp_1_4- inner node disablement + // 27 b2i_ds_output_1_1- inner node disablement + // 28 odr_ofs_dp_1_4- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + // 34 ifd_gmv_1_4- inner node disablement + // 35 gmv_statistics_1_1- inner node disablement + // 36 odr_gmv_feature_1_4- inner node disablement + // 37 odr_gmv_match_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFF; + } else // default inner node + { + // RBM - 0x0000000000000000006400BD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E120000FF9CE8D9BF1F1 + bitmaps.deb[0] = 0x8D9BF1F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x0000000030321E9F + bitmaps.teb[0] = 0x30321E9F; + // REB - 0x00000000000000000000001F12F67FE7 + bitmaps.reb[0] = 0x12F67FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void SwGdcOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) { + // No inner nodes + (void)nodeInnerOptions; +} + +void LbffBayerNoGmvWithTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 46; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000067FC9D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E13E79F0F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC0009F + bitmaps.teb[0] = 0x3FC0009F; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 26 odr_awb_std_1_4- inner node disablement + // 27 odr_awb_sat_1_4- inner node disablement + // 28 aestatistics_2_1- inner node disablement + // 29 odr_ae_1_4- inner node disablement + // 30 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7C380000; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C13E79F0F9CE8D9BF1F1 + bitmaps.deb[0] = 0x8D9BF1F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC01E9F + bitmaps.teb[0] = 0x2FC01E9F; + // REB - 0x00000000000000000000001FF2F67FE7 + bitmaps.reb[0] = 0xF2F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 42 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x40000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C13E79F0F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC0009F + bitmaps.teb[0] = 0x2FC0009F; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 26 odr_awb_std_1_4- inner node disablement + // 27 odr_awb_sat_1_4- inner node disablement + // 28 aestatistics_2_1- inner node disablement + // 29 odr_ae_1_4- inner node disablement + // 30 odr_af_std_1_4- inner node disablement + // 42 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x4007C380000; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x000000000000213E79F0F9CE8D9BF1F1 + bitmaps.deb[0] = 0x8D9BF1F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC01E9F + bitmaps.teb[0] = 0x1FC01E9F; + // REB - 0x00000000000000000000001FF2F67FE7 + bitmaps.reb[0] = 0xF2F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 43 b2i_ds_output_1_1- inner node disablement + // 44 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x180000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x000000000000213E79F0F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC0009F + bitmaps.teb[0] = 0x1FC0009F; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 26 odr_awb_std_1_4- inner node disablement + // 27 odr_awb_sat_1_4- inner node disablement + // 28 aestatistics_2_1- inner node disablement + // 29 odr_ae_1_4- inner node disablement + // 30 odr_af_std_1_4- inner node disablement + // 43 b2i_ds_output_1_1- inner node disablement + // 44 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x18007C380000; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000080001E6811 + bitmaps.rbm[0] = 0x1E6811; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019BF1F1 + bitmaps.deb[0] = 0x19BF1F1; + // TEB - 0x0000000000001E97 + bitmaps.teb[0] = 0x1E97; + // REB - 0x00000000000000000000000002007FE7 + bitmaps.reb[0] = 0x2007FE7; + + // Kernels disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 bnlm_3_4- inner node disablement + // 10 bxt_demosaic- inner node disablement + // 11 vcsc_2_0_b- inner node disablement + // 12 gltm_2_0- inner node disablement + // 13 xnr_5_4- inner node disablement + // 14 vcr_3_1- inner node disablement + // 15 glim_2_0- inner node disablement + // 16 acm_1_2- inner node disablement + // 17 gammatm_v4- inner node disablement + // 18 csc_1_1- inner node disablement + // 22 b2i_ds_1_1- inner node disablement + // 23 lbff_crop_espa_1_4- inner node disablement + // 24 tnr7_spatial_1_1- inner node disablement + // 25 tnr_scaler_lb_1_1- inner node disablement + // 31 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 32 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 33 tnr7_ims_1_2- inner node disablement + // 34 tnr7_bc_1_2- inner node disablement + // 35 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 36 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 37 tnr7_blend_1_1- inner node disablement + // 38 odr_tnr_fp_yuvn_1_4- inner node disablement + // 39 tnr_scaler_fp_1_1- inner node disablement + // 40 image_upscaler_1_1- inner node disablement + // 41 cas_1_1- inner node disablement + // 42 odr_ofs_mp_1_4- inner node disablement + // 43 b2i_ds_output_1_1- inner node disablement + // 44 odr_ofs_dp_1_4- inner node disablement + // 45 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFF83C7FF80; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgb_ir_2_0- inner node disablement + // 5 ifd_lsc_1_4- inner node disablement + // 6 lsc_1_2- inner node disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 bnlm_3_4- inner node disablement + // 10 bxt_demosaic- inner node disablement + // 11 vcsc_2_0_b- inner node disablement + // 12 gltm_2_0- inner node disablement + // 13 xnr_5_4- inner node disablement + // 14 vcr_3_1- inner node disablement + // 15 glim_2_0- inner node disablement + // 16 acm_1_2- inner node disablement + // 17 gammatm_v4- inner node disablement + // 18 csc_1_1- inner node disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 22 b2i_ds_1_1- inner node disablement + // 23 lbff_crop_espa_1_4- inner node disablement + // 24 tnr7_spatial_1_1- inner node disablement + // 25 tnr_scaler_lb_1_1- inner node disablement + // 26 odr_awb_std_1_4- inner node disablement + // 27 odr_awb_sat_1_4- inner node disablement + // 28 aestatistics_2_1- inner node disablement + // 29 odr_ae_1_4- inner node disablement + // 30 odr_af_std_1_4- inner node disablement + // 31 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 32 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 33 tnr7_ims_1_2- inner node disablement + // 34 tnr7_bc_1_2- inner node disablement + // 35 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 36 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 37 tnr7_blend_1_1- inner node disablement + // 38 odr_tnr_fp_yuvn_1_4- inner node disablement + // 39 tnr_scaler_fp_1_1- inner node disablement + // 40 image_upscaler_1_1- inner node disablement + // 41 cas_1_1- inner node disablement + // 42 odr_ofs_mp_1_4- inner node disablement + // 43 b2i_ds_output_1_1- inner node disablement + // 44 odr_ofs_dp_1_4- inner node disablement + // 45 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000067FC9D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E13E79F0F9CE8D9BF1F1 + bitmaps.deb[0] = 0x8D9BF1F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC01E9F + bitmaps.teb[0] = 0x3FC01E9F; + // REB - 0x00000000000000000000001FF2F67FE7 + bitmaps.reb[0] = 0xF2F67FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerWithGmvWithTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 50; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000067FCBD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E13E79FFF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FF2009F + bitmaps.teb[0] = 0x3FF2009F; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 26 odr_awb_std_1_4- inner node disablement + // 27 odr_awb_sat_1_4- inner node disablement + // 28 aestatistics_2_1- inner node disablement + // 29 odr_ae_1_4- inner node disablement + // 30 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7C380000; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C13E79FFF9CE8D9BF1F1 + bitmaps.deb[0] = 0x8D9BF1F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FF21E9F + bitmaps.teb[0] = 0x2FF21E9F; + // REB - 0x00000000000000000000001FF2F67FE7 + bitmaps.reb[0] = 0xF2F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 46 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x400000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C13E79FFF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FF2009F + bitmaps.teb[0] = 0x2FF2009F; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 26 odr_awb_std_1_4- inner node disablement + // 27 odr_awb_sat_1_4- inner node disablement + // 28 aestatistics_2_1- inner node disablement + // 29 odr_ae_1_4- inner node disablement + // 30 odr_af_std_1_4- inner node disablement + // 46 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x40007C380000; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x000000000000213E79FFF9CE8D9BF1F1 + bitmaps.deb[0] = 0x8D9BF1F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FF21E9F + bitmaps.teb[0] = 0x1FF21E9F; + // REB - 0x00000000000000000000001FF2F67FE7 + bitmaps.reb[0] = 0xF2F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1800000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x000000000000213E79FFF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FF2009F + bitmaps.teb[0] = 0x1FF2009F; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 26 odr_awb_std_1_4- inner node disablement + // 27 odr_awb_sat_1_4- inner node disablement + // 28 aestatistics_2_1- inner node disablement + // 29 odr_ae_1_4- inner node disablement + // 30 odr_af_std_1_4- inner node disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x180007C380000; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000080001E6811 + bitmaps.rbm[0] = 0x1E6811; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019BF1F1 + bitmaps.deb[0] = 0x19BF1F1; + // TEB - 0x0000000000001E97 + bitmaps.teb[0] = 0x1E97; + // REB - 0x00000000000000000000000002007FE7 + bitmaps.reb[0] = 0x2007FE7; + + // Kernels disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 bnlm_3_4- inner node disablement + // 10 bxt_demosaic- inner node disablement + // 11 vcsc_2_0_b- inner node disablement + // 12 gltm_2_0- inner node disablement + // 13 xnr_5_4- inner node disablement + // 14 vcr_3_1- inner node disablement + // 15 glim_2_0- inner node disablement + // 16 acm_1_2- inner node disablement + // 17 gammatm_v4- inner node disablement + // 18 csc_1_1- inner node disablement + // 22 b2i_ds_1_1- inner node disablement + // 23 lbff_crop_espa_1_4- inner node disablement + // 24 tnr7_spatial_1_1- inner node disablement + // 25 tnr_scaler_lb_1_1- inner node disablement + // 31 ifd_gmv_1_4- inner node disablement + // 32 gmv_statistics_1_1- inner node disablement + // 33 odr_gmv_feature_1_4- inner node disablement + // 34 odr_gmv_match_1_4- inner node disablement + // 35 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 36 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 37 tnr7_ims_1_2- inner node disablement + // 38 tnr7_bc_1_2- inner node disablement + // 39 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 40 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 41 tnr7_blend_1_1- inner node disablement + // 42 odr_tnr_fp_yuvn_1_4- inner node disablement + // 43 tnr_scaler_fp_1_1- inner node disablement + // 44 image_upscaler_1_1- inner node disablement + // 45 cas_1_1- inner node disablement + // 46 odr_ofs_mp_1_4- inner node disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + // 49 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFF83C7FF80; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgb_ir_2_0- inner node disablement + // 5 ifd_lsc_1_4- inner node disablement + // 6 lsc_1_2- inner node disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 bnlm_3_4- inner node disablement + // 10 bxt_demosaic- inner node disablement + // 11 vcsc_2_0_b- inner node disablement + // 12 gltm_2_0- inner node disablement + // 13 xnr_5_4- inner node disablement + // 14 vcr_3_1- inner node disablement + // 15 glim_2_0- inner node disablement + // 16 acm_1_2- inner node disablement + // 17 gammatm_v4- inner node disablement + // 18 csc_1_1- inner node disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 22 b2i_ds_1_1- inner node disablement + // 23 lbff_crop_espa_1_4- inner node disablement + // 24 tnr7_spatial_1_1- inner node disablement + // 25 tnr_scaler_lb_1_1- inner node disablement + // 26 odr_awb_std_1_4- inner node disablement + // 27 odr_awb_sat_1_4- inner node disablement + // 28 aestatistics_2_1- inner node disablement + // 29 odr_ae_1_4- inner node disablement + // 30 odr_af_std_1_4- inner node disablement + // 31 ifd_gmv_1_4- inner node disablement + // 32 gmv_statistics_1_1- inner node disablement + // 33 odr_gmv_feature_1_4- inner node disablement + // 34 odr_gmv_match_1_4- inner node disablement + // 35 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 36 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 37 tnr7_ims_1_2- inner node disablement + // 38 tnr7_bc_1_2- inner node disablement + // 39 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 40 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 41 tnr7_blend_1_1- inner node disablement + // 42 odr_tnr_fp_yuvn_1_4- inner node disablement + // 43 tnr_scaler_fp_1_1- inner node disablement + // 44 image_upscaler_1_1- inner node disablement + // 45 cas_1_1- inner node disablement + // 46 odr_ofs_mp_1_4- inner node disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + // 49 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000067FCBD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E13E79FFF9CE8D9BF1F1 + bitmaps.deb[0] = 0x8D9BF1F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FF21E9F + bitmaps.teb[0] = 0x3FF21E9F; + // REB - 0x00000000000000000000001FF2F67FE7 + bitmaps.reb[0] = 0xF2F67FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void SwNntmOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) { + // No inner nodes + (void)nodeInnerOptions; +} + +void SwScalerOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) { + // No inner nodes + (void)nodeInnerOptions; +} + +void IsysPdaf2OuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) { + // No inner nodes + (void)nodeInnerOptions; +} + +void LbffBayerPdaf2NoGmvNoTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 38; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000064009D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1200000F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x000000003000009F + bitmaps.teb[0] = 0x3000009F; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + // 34 ifd_pdaf_1_4- inner node disablement + // 35 pext_1_0- inner node disablement + // 36 pafstatistics_1_2- inner node disablement + // 37 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FE0380000; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000044019D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x44019D; + // DEB - 0x000000000000C1200000F9CE8DDBFFF1 + bitmaps.deb[0] = 0x8DDBFFF1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x0000000020003F9F + bitmaps.teb[0] = 0x20003F9F; + // REB - 0x00000000000000000000001F16F77FE7 + bitmaps.reb[0] = 0x16F77FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 26 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x4000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000044009D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1200000F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x000000002000009F + bitmaps.teb[0] = 0x2000009F; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 26 odr_ofs_mp_1_4- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + // 34 ifd_pdaf_1_4- inner node disablement + // 35 pext_1_0- inner node disablement + // 36 pafstatistics_1_2- inner node disablement + // 37 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FE4380000; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000024019D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x24019D; + // DEB - 0x00000000000021200000F9CE8DDBFFF1 + bitmaps.deb[0] = 0x8DDBFFF1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x0000000010003F9F + bitmaps.teb[0] = 0x10003F9F; + // REB - 0x00000000000000000000001F16F77FE7 + bitmaps.reb[0] = 0x16F77FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 27 b2i_ds_output_1_1- inner node disablement + // 28 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x18000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000024009D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021200000F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x000000001000009F + bitmaps.teb[0] = 0x1000009F; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 27 b2i_ds_output_1_1- inner node disablement + // 28 odr_ofs_dp_1_4- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + // 34 ifd_pdaf_1_4- inner node disablement + // 35 pext_1_0- inner node disablement + // 36 pafstatistics_1_2- inner node disablement + // 37 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FF8380000; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000180001E6811 + bitmaps.rbm[0] = 0x1E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001DBFFF1 + bitmaps.deb[0] = 0x1DBFFF1; + // TEB - 0x0000000000003F97 + bitmaps.teb[0] = 0x3F97; + // REB - 0x00000000000000000000000006017FE7 + bitmaps.reb[0] = 0x6017FE7; + + // Kernels disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 bnlm_3_4- inner node disablement + // 10 bxt_demosaic- inner node disablement + // 11 vcsc_2_0_b- inner node disablement + // 12 gltm_2_0- inner node disablement + // 13 xnr_5_4- inner node disablement + // 14 vcr_3_1- inner node disablement + // 15 glim_2_0- inner node disablement + // 16 acm_1_2- inner node disablement + // 17 gammatm_v4- inner node disablement + // 18 csc_1_1- inner node disablement + // 22 b2i_ds_1_1- inner node disablement + // 23 lbff_crop_espa_1_4- inner node disablement + // 24 image_upscaler_1_1- inner node disablement + // 25 cas_1_1- inner node disablement + // 26 odr_ofs_mp_1_4- inner node disablement + // 27 b2i_ds_output_1_1- inner node disablement + // 28 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FC7FF80; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgb_ir_2_0- inner node disablement + // 5 ifd_lsc_1_4- inner node disablement + // 6 lsc_1_2- inner node disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 bnlm_3_4- inner node disablement + // 10 bxt_demosaic- inner node disablement + // 11 vcsc_2_0_b- inner node disablement + // 12 gltm_2_0- inner node disablement + // 13 xnr_5_4- inner node disablement + // 14 vcr_3_1- inner node disablement + // 15 glim_2_0- inner node disablement + // 16 acm_1_2- inner node disablement + // 17 gammatm_v4- inner node disablement + // 18 csc_1_1- inner node disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 22 b2i_ds_1_1- inner node disablement + // 23 lbff_crop_espa_1_4- inner node disablement + // 24 image_upscaler_1_1- inner node disablement + // 25 cas_1_1- inner node disablement + // 26 odr_ofs_mp_1_4- inner node disablement + // 27 b2i_ds_output_1_1- inner node disablement + // 28 odr_ofs_dp_1_4- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + // 34 ifd_pdaf_1_4- inner node disablement + // 35 pext_1_0- inner node disablement + // 36 pafstatistics_1_2- inner node disablement + // 37 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000064019D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x64019D; + // DEB - 0x000000000000E1200000F9CE8DDBFFF1 + bitmaps.deb[0] = 0x8DDBFFF1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x0000000030003F9F + bitmaps.teb[0] = 0x30003F9F; + // REB - 0x00000000000000000000001F16F77FE7 + bitmaps.reb[0] = 0x16F77FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf2WithGmvNoTnrNoSapOuterNode::setInnerNode( + InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 42; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x0000000000000000006400BD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E120000FF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x000000003032009F + bitmaps.teb[0] = 0x3032009F; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + // 34 ifd_pdaf_1_4- inner node disablement + // 35 pext_1_0- inner node disablement + // 36 pafstatistics_1_2- inner node disablement + // 37 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FE0380000; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x0000000000000000004401BD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x4401BD; + // DEB - 0x000000000000C120000FF9CE8DDBFFF1 + bitmaps.deb[0] = 0x8DDBFFF1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x0000000020323F9F + bitmaps.teb[0] = 0x20323F9F; + // REB - 0x00000000000000000000001F16F77FE7 + bitmaps.reb[0] = 0x16F77FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 26 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x4000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x0000000000000000004400BD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C120000FF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x000000002032009F + bitmaps.teb[0] = 0x2032009F; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 26 odr_ofs_mp_1_4- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + // 34 ifd_pdaf_1_4- inner node disablement + // 35 pext_1_0- inner node disablement + // 36 pafstatistics_1_2- inner node disablement + // 37 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FE4380000; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x0000000000000000002401BD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x2401BD; + // DEB - 0x0000000000002120000FF9CE8DDBFFF1 + bitmaps.deb[0] = 0x8DDBFFF1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x0000000010323F9F + bitmaps.teb[0] = 0x10323F9F; + // REB - 0x00000000000000000000001F16F77FE7 + bitmaps.reb[0] = 0x16F77FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 27 b2i_ds_output_1_1- inner node disablement + // 28 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x18000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x0000000000000000002400BD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x0000000000002120000FF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x000000001032009F + bitmaps.teb[0] = 0x1032009F; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 27 b2i_ds_output_1_1- inner node disablement + // 28 odr_ofs_dp_1_4- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + // 34 ifd_pdaf_1_4- inner node disablement + // 35 pext_1_0- inner node disablement + // 36 pafstatistics_1_2- inner node disablement + // 37 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FF8380000; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000180001E6811 + bitmaps.rbm[0] = 0x1E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001DBFFF1 + bitmaps.deb[0] = 0x1DBFFF1; + // TEB - 0x0000000000003F97 + bitmaps.teb[0] = 0x3F97; + // REB - 0x00000000000000000000000006017FE7 + bitmaps.reb[0] = 0x6017FE7; + + // Kernels disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 bnlm_3_4- inner node disablement + // 10 bxt_demosaic- inner node disablement + // 11 vcsc_2_0_b- inner node disablement + // 12 gltm_2_0- inner node disablement + // 13 xnr_5_4- inner node disablement + // 14 vcr_3_1- inner node disablement + // 15 glim_2_0- inner node disablement + // 16 acm_1_2- inner node disablement + // 17 gammatm_v4- inner node disablement + // 18 csc_1_1- inner node disablement + // 22 b2i_ds_1_1- inner node disablement + // 23 lbff_crop_espa_1_4- inner node disablement + // 24 image_upscaler_1_1- inner node disablement + // 25 cas_1_1- inner node disablement + // 26 odr_ofs_mp_1_4- inner node disablement + // 27 b2i_ds_output_1_1- inner node disablement + // 28 odr_ofs_dp_1_4- inner node disablement + // 38 ifd_gmv_1_4- inner node disablement + // 39 gmv_statistics_1_1- inner node disablement + // 40 odr_gmv_feature_1_4- inner node disablement + // 41 odr_gmv_match_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3C01FC7FF80; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgb_ir_2_0- inner node disablement + // 5 ifd_lsc_1_4- inner node disablement + // 6 lsc_1_2- inner node disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 bnlm_3_4- inner node disablement + // 10 bxt_demosaic- inner node disablement + // 11 vcsc_2_0_b- inner node disablement + // 12 gltm_2_0- inner node disablement + // 13 xnr_5_4- inner node disablement + // 14 vcr_3_1- inner node disablement + // 15 glim_2_0- inner node disablement + // 16 acm_1_2- inner node disablement + // 17 gammatm_v4- inner node disablement + // 18 csc_1_1- inner node disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 22 b2i_ds_1_1- inner node disablement + // 23 lbff_crop_espa_1_4- inner node disablement + // 24 image_upscaler_1_1- inner node disablement + // 25 cas_1_1- inner node disablement + // 26 odr_ofs_mp_1_4- inner node disablement + // 27 b2i_ds_output_1_1- inner node disablement + // 28 odr_ofs_dp_1_4- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + // 34 ifd_pdaf_1_4- inner node disablement + // 35 pext_1_0- inner node disablement + // 36 pafstatistics_1_2- inner node disablement + // 37 odr_pdaf_1_4- inner node disablement + // 38 ifd_gmv_1_4- inner node disablement + // 39 gmv_statistics_1_1- inner node disablement + // 40 odr_gmv_feature_1_4- inner node disablement + // 41 odr_gmv_match_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFF; + } else // default inner node + { + // RBM - 0x0000000000000000006401BD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x6401BD; + // DEB - 0x000000000000E120000FF9CE8DDBFFF1 + bitmaps.deb[0] = 0x8DDBFFF1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x0000000030323F9F + bitmaps.teb[0] = 0x30323F9F; + // REB - 0x00000000000000000000001F16F77FE7 + bitmaps.reb[0] = 0x16F77FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf2NoGmvWithTnrNoSapOuterNode::setInnerNode( + InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 50; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000067FC9D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E13E79F0F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC0009F + bitmaps.teb[0] = 0x3FC0009F; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 26 odr_awb_std_1_4- inner node disablement + // 27 odr_awb_sat_1_4- inner node disablement + // 28 aestatistics_2_1- inner node disablement + // 29 odr_ae_1_4- inner node disablement + // 30 odr_af_std_1_4- inner node disablement + // 31 ifd_pdaf_1_4- inner node disablement + // 32 pext_1_0- inner node disablement + // 33 pafstatistics_1_2- inner node disablement + // 34 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FC380000; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FD9D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x47FD9D; + // DEB - 0x000000000000C13E79F0F9CE8DDBFFF1 + bitmaps.deb[0] = 0x8DDBFFF1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC03F9F + bitmaps.teb[0] = 0x2FC03F9F; + // REB - 0x00000000000000000000001FF6F77FE7 + bitmaps.reb[0] = 0xF6F77FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 46 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x400000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C13E79F0F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC0009F + bitmaps.teb[0] = 0x2FC0009F; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 26 odr_awb_std_1_4- inner node disablement + // 27 odr_awb_sat_1_4- inner node disablement + // 28 aestatistics_2_1- inner node disablement + // 29 odr_ae_1_4- inner node disablement + // 30 odr_af_std_1_4- inner node disablement + // 31 ifd_pdaf_1_4- inner node disablement + // 32 pext_1_0- inner node disablement + // 33 pafstatistics_1_2- inner node disablement + // 34 odr_pdaf_1_4- inner node disablement + // 46 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x4007FC380000; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FD9D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x27FD9D; + // DEB - 0x000000000000213E79F0F9CE8DDBFFF1 + bitmaps.deb[0] = 0x8DDBFFF1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC03F9F + bitmaps.teb[0] = 0x1FC03F9F; + // REB - 0x00000000000000000000001FF6F77FE7 + bitmaps.reb[0] = 0xF6F77FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1800000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x000000000000213E79F0F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC0009F + bitmaps.teb[0] = 0x1FC0009F; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 26 odr_awb_std_1_4- inner node disablement + // 27 odr_awb_sat_1_4- inner node disablement + // 28 aestatistics_2_1- inner node disablement + // 29 odr_ae_1_4- inner node disablement + // 30 odr_af_std_1_4- inner node disablement + // 31 ifd_pdaf_1_4- inner node disablement + // 32 pext_1_0- inner node disablement + // 33 pafstatistics_1_2- inner node disablement + // 34 odr_pdaf_1_4- inner node disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x18007FC380000; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000180001E6811 + bitmaps.rbm[0] = 0x1E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001DBFFF1 + bitmaps.deb[0] = 0x1DBFFF1; + // TEB - 0x0000000000003F97 + bitmaps.teb[0] = 0x3F97; + // REB - 0x00000000000000000000000006017FE7 + bitmaps.reb[0] = 0x6017FE7; + + // Kernels disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 bnlm_3_4- inner node disablement + // 10 bxt_demosaic- inner node disablement + // 11 vcsc_2_0_b- inner node disablement + // 12 gltm_2_0- inner node disablement + // 13 xnr_5_4- inner node disablement + // 14 vcr_3_1- inner node disablement + // 15 glim_2_0- inner node disablement + // 16 acm_1_2- inner node disablement + // 17 gammatm_v4- inner node disablement + // 18 csc_1_1- inner node disablement + // 22 b2i_ds_1_1- inner node disablement + // 23 lbff_crop_espa_1_4- inner node disablement + // 24 tnr7_spatial_1_1- inner node disablement + // 25 tnr_scaler_lb_1_1- inner node disablement + // 35 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 36 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 37 tnr7_ims_1_2- inner node disablement + // 38 tnr7_bc_1_2- inner node disablement + // 39 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 40 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 41 tnr7_blend_1_1- inner node disablement + // 42 odr_tnr_fp_yuvn_1_4- inner node disablement + // 43 tnr_scaler_fp_1_1- inner node disablement + // 44 image_upscaler_1_1- inner node disablement + // 45 cas_1_1- inner node disablement + // 46 odr_ofs_mp_1_4- inner node disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + // 49 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFF803C7FF80; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgb_ir_2_0- inner node disablement + // 5 ifd_lsc_1_4- inner node disablement + // 6 lsc_1_2- inner node disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 bnlm_3_4- inner node disablement + // 10 bxt_demosaic- inner node disablement + // 11 vcsc_2_0_b- inner node disablement + // 12 gltm_2_0- inner node disablement + // 13 xnr_5_4- inner node disablement + // 14 vcr_3_1- inner node disablement + // 15 glim_2_0- inner node disablement + // 16 acm_1_2- inner node disablement + // 17 gammatm_v4- inner node disablement + // 18 csc_1_1- inner node disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 22 b2i_ds_1_1- inner node disablement + // 23 lbff_crop_espa_1_4- inner node disablement + // 24 tnr7_spatial_1_1- inner node disablement + // 25 tnr_scaler_lb_1_1- inner node disablement + // 26 odr_awb_std_1_4- inner node disablement + // 27 odr_awb_sat_1_4- inner node disablement + // 28 aestatistics_2_1- inner node disablement + // 29 odr_ae_1_4- inner node disablement + // 30 odr_af_std_1_4- inner node disablement + // 31 ifd_pdaf_1_4- inner node disablement + // 32 pext_1_0- inner node disablement + // 33 pafstatistics_1_2- inner node disablement + // 34 odr_pdaf_1_4- inner node disablement + // 35 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 36 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 37 tnr7_ims_1_2- inner node disablement + // 38 tnr7_bc_1_2- inner node disablement + // 39 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 40 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 41 tnr7_blend_1_1- inner node disablement + // 42 odr_tnr_fp_yuvn_1_4- inner node disablement + // 43 tnr_scaler_fp_1_1- inner node disablement + // 44 image_upscaler_1_1- inner node disablement + // 45 cas_1_1- inner node disablement + // 46 odr_ofs_mp_1_4- inner node disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + // 49 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000067FD9D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x67FD9D; + // DEB - 0x000000000000E13E79F0F9CE8DDBFFF1 + bitmaps.deb[0] = 0x8DDBFFF1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC03F9F + bitmaps.teb[0] = 0x3FC03F9F; + // REB - 0x00000000000000000000001FF6F77FE7 + bitmaps.reb[0] = 0xF6F77FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf2WithGmvWithTnrNoSapOuterNode::setInnerNode( + InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 54; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000067FCBD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E13E79FFF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FF2009F + bitmaps.teb[0] = 0x3FF2009F; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 26 odr_awb_std_1_4- inner node disablement + // 27 odr_awb_sat_1_4- inner node disablement + // 28 aestatistics_2_1- inner node disablement + // 29 odr_ae_1_4- inner node disablement + // 30 odr_af_std_1_4- inner node disablement + // 31 ifd_pdaf_1_4- inner node disablement + // 32 pext_1_0- inner node disablement + // 33 pafstatistics_1_2- inner node disablement + // 34 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FC380000; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FDBD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x47FDBD; + // DEB - 0x000000000000C13E79FFF9CE8DDBFFF1 + bitmaps.deb[0] = 0x8DDBFFF1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FF23F9F + bitmaps.teb[0] = 0x2FF23F9F; + // REB - 0x00000000000000000000001FF6F77FE7 + bitmaps.reb[0] = 0xF6F77FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 50 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x4000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C13E79FFF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FF2009F + bitmaps.teb[0] = 0x2FF2009F; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 26 odr_awb_std_1_4- inner node disablement + // 27 odr_awb_sat_1_4- inner node disablement + // 28 aestatistics_2_1- inner node disablement + // 29 odr_ae_1_4- inner node disablement + // 30 odr_af_std_1_4- inner node disablement + // 31 ifd_pdaf_1_4- inner node disablement + // 32 pext_1_0- inner node disablement + // 33 pafstatistics_1_2- inner node disablement + // 34 odr_pdaf_1_4- inner node disablement + // 50 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x40007FC380000; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FDBD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x27FDBD; + // DEB - 0x000000000000213E79FFF9CE8DDBFFF1 + bitmaps.deb[0] = 0x8DDBFFF1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FF23F9F + bitmaps.teb[0] = 0x1FF23F9F; + // REB - 0x00000000000000000000001FF6F77FE7 + bitmaps.reb[0] = 0xF6F77FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 51 b2i_ds_output_1_1- inner node disablement + // 52 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x18000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x000000000000213E79FFF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FF2009F + bitmaps.teb[0] = 0x1FF2009F; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 26 odr_awb_std_1_4- inner node disablement + // 27 odr_awb_sat_1_4- inner node disablement + // 28 aestatistics_2_1- inner node disablement + // 29 odr_ae_1_4- inner node disablement + // 30 odr_af_std_1_4- inner node disablement + // 31 ifd_pdaf_1_4- inner node disablement + // 32 pext_1_0- inner node disablement + // 33 pafstatistics_1_2- inner node disablement + // 34 odr_pdaf_1_4- inner node disablement + // 51 b2i_ds_output_1_1- inner node disablement + // 52 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x180007FC380000; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000180001E6811 + bitmaps.rbm[0] = 0x1E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001DBFFF1 + bitmaps.deb[0] = 0x1DBFFF1; + // TEB - 0x0000000000003F97 + bitmaps.teb[0] = 0x3F97; + // REB - 0x00000000000000000000000006017FE7 + bitmaps.reb[0] = 0x6017FE7; + + // Kernels disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 bnlm_3_4- inner node disablement + // 10 bxt_demosaic- inner node disablement + // 11 vcsc_2_0_b- inner node disablement + // 12 gltm_2_0- inner node disablement + // 13 xnr_5_4- inner node disablement + // 14 vcr_3_1- inner node disablement + // 15 glim_2_0- inner node disablement + // 16 acm_1_2- inner node disablement + // 17 gammatm_v4- inner node disablement + // 18 csc_1_1- inner node disablement + // 22 b2i_ds_1_1- inner node disablement + // 23 lbff_crop_espa_1_4- inner node disablement + // 24 tnr7_spatial_1_1- inner node disablement + // 25 tnr_scaler_lb_1_1- inner node disablement + // 35 ifd_gmv_1_4- inner node disablement + // 36 gmv_statistics_1_1- inner node disablement + // 37 odr_gmv_feature_1_4- inner node disablement + // 38 odr_gmv_match_1_4- inner node disablement + // 39 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 40 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 41 tnr7_ims_1_2- inner node disablement + // 42 tnr7_bc_1_2- inner node disablement + // 43 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 44 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 45 tnr7_blend_1_1- inner node disablement + // 46 odr_tnr_fp_yuvn_1_4- inner node disablement + // 47 tnr_scaler_fp_1_1- inner node disablement + // 48 image_upscaler_1_1- inner node disablement + // 49 cas_1_1- inner node disablement + // 50 odr_ofs_mp_1_4- inner node disablement + // 51 b2i_ds_output_1_1- inner node disablement + // 52 odr_ofs_dp_1_4- inner node disablement + // 53 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFF803C7FF80; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgb_ir_2_0- inner node disablement + // 5 ifd_lsc_1_4- inner node disablement + // 6 lsc_1_2- inner node disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 bnlm_3_4- inner node disablement + // 10 bxt_demosaic- inner node disablement + // 11 vcsc_2_0_b- inner node disablement + // 12 gltm_2_0- inner node disablement + // 13 xnr_5_4- inner node disablement + // 14 vcr_3_1- inner node disablement + // 15 glim_2_0- inner node disablement + // 16 acm_1_2- inner node disablement + // 17 gammatm_v4- inner node disablement + // 18 csc_1_1- inner node disablement + // 19 rgbs_grid_1_1- inner node disablement + // 20 ccm_3a_2_0- inner node disablement + // 21 fr_grid_1_0- inner node disablement + // 22 b2i_ds_1_1- inner node disablement + // 23 lbff_crop_espa_1_4- inner node disablement + // 24 tnr7_spatial_1_1- inner node disablement + // 25 tnr_scaler_lb_1_1- inner node disablement + // 26 odr_awb_std_1_4- inner node disablement + // 27 odr_awb_sat_1_4- inner node disablement + // 28 aestatistics_2_1- inner node disablement + // 29 odr_ae_1_4- inner node disablement + // 30 odr_af_std_1_4- inner node disablement + // 31 ifd_pdaf_1_4- inner node disablement + // 32 pext_1_0- inner node disablement + // 33 pafstatistics_1_2- inner node disablement + // 34 odr_pdaf_1_4- inner node disablement + // 35 ifd_gmv_1_4- inner node disablement + // 36 gmv_statistics_1_1- inner node disablement + // 37 odr_gmv_feature_1_4- inner node disablement + // 38 odr_gmv_match_1_4- inner node disablement + // 39 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 40 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 41 tnr7_ims_1_2- inner node disablement + // 42 tnr7_bc_1_2- inner node disablement + // 43 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 44 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 45 tnr7_blend_1_1- inner node disablement + // 46 odr_tnr_fp_yuvn_1_4- inner node disablement + // 47 tnr_scaler_fp_1_1- inner node disablement + // 48 image_upscaler_1_1- inner node disablement + // 49 cas_1_1- inner node disablement + // 50 odr_ofs_mp_1_4- inner node disablement + // 51 b2i_ds_output_1_1- inner node disablement + // 52 odr_ofs_dp_1_4- inner node disablement + // 53 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000067FDBD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x67FDBD; + // DEB - 0x000000000000E13E79FFF9CE8DDBFFF1 + bitmaps.deb[0] = 0x8DDBFFF1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FF23F9F + bitmaps.teb[0] = 0x3FF23F9F; + // REB - 0x00000000000000000000001FF6F77FE7 + bitmaps.reb[0] = 0xF6F77FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf3NoGmvNoTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 37; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000064009D58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1200000F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x000000003000009F + bitmaps.teb[0] = 0x3000009F; + // REB - 0x00000000000000000000001F16F787E7 + bitmaps.reb[0] = 0x16F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 22 rgbs_grid_1_1- inner node disablement + // 23 ccm_3a_2_0- inner node disablement + // 24 fr_grid_1_0- inner node disablement + // 32 odr_awb_std_1_4- inner node disablement + // 33 odr_awb_sat_1_4- inner node disablement + // 34 aestatistics_2_1- inner node disablement + // 35 odr_ae_1_4- inner node disablement + // 36 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1F01C000D0; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000044019D581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x44019D; + // DEB - 0x000000000000C1200000F9CE8DDBFDF1 + bitmaps.deb[0] = 0x8DDBFDF1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x0000000020003E9F + bitmaps.teb[0] = 0x20003E9F; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 29 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x20000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000044009D58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1200000F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x000000002000009F + bitmaps.teb[0] = 0x2000009F; + // REB - 0x00000000000000000000001F16F787E7 + bitmaps.reb[0] = 0x16F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 22 rgbs_grid_1_1- inner node disablement + // 23 ccm_3a_2_0- inner node disablement + // 24 fr_grid_1_0- inner node disablement + // 29 odr_ofs_mp_1_4- inner node disablement + // 32 odr_awb_std_1_4- inner node disablement + // 33 odr_awb_sat_1_4- inner node disablement + // 34 aestatistics_2_1- inner node disablement + // 35 odr_ae_1_4- inner node disablement + // 36 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1F21C000D0; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000024019D581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x24019D; + // DEB - 0x00000000000021200000F9CE8DDBFDF1 + bitmaps.deb[0] = 0x8DDBFDF1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x0000000010003E9F + bitmaps.teb[0] = 0x10003E9F; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 30 b2i_ds_output_1_1- inner node disablement + // 31 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC0000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000024009D58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021200000F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x000000001000009F + bitmaps.teb[0] = 0x1000009F; + // REB - 0x00000000000000000000001F16F787E7 + bitmaps.reb[0] = 0x16F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 22 rgbs_grid_1_1- inner node disablement + // 23 ccm_3a_2_0- inner node disablement + // 24 fr_grid_1_0- inner node disablement + // 30 b2i_ds_output_1_1- inner node disablement + // 31 odr_ofs_dp_1_4- inner node disablement + // 32 odr_awb_std_1_4- inner node disablement + // 33 odr_awb_sat_1_4- inner node disablement + // 34 aestatistics_2_1- inner node disablement + // 35 odr_ae_1_4- inner node disablement + // 36 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FC1C000D0; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000180081E6811 + bitmaps.rbm[0] = 0x81E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001DBFDF1 + bitmaps.deb[0] = 0x1DBFDF1; + // TEB - 0x0000000000003E97 + bitmaps.teb[0] = 0x3E97; + // REB - 0x0000000000000000000000000601FFE7 + bitmaps.reb[0] = 0x601FFE7; + + // Kernels disablement + // 10 gd_2_2- inner node disablement + // 11 wb_1_1- inner node disablement + // 12 bnlm_3_4- inner node disablement + // 13 bxt_demosaic- inner node disablement + // 14 vcsc_2_0_b- inner node disablement + // 15 gltm_2_0- inner node disablement + // 16 xnr_5_4- inner node disablement + // 17 vcr_3_1- inner node disablement + // 18 glim_2_0- inner node disablement + // 19 acm_1_2- inner node disablement + // 20 gammatm_v4- inner node disablement + // 21 csc_1_1- inner node disablement + // 25 b2i_ds_1_1- inner node disablement + // 26 lbff_crop_espa_1_4- inner node disablement + // 27 image_upscaler_1_1- inner node disablement + // 28 cas_1_1- inner node disablement + // 29 odr_ofs_mp_1_4- inner node disablement + // 30 b2i_ds_output_1_1- inner node disablement + // 31 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFE3FFC00; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 pext_1_0- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 8 ifd_lsc_1_4- inner node disablement + // 9 lsc_1_2- inner node disablement + // 10 gd_2_2- inner node disablement + // 11 wb_1_1- inner node disablement + // 12 bnlm_3_4- inner node disablement + // 13 bxt_demosaic- inner node disablement + // 14 vcsc_2_0_b- inner node disablement + // 15 gltm_2_0- inner node disablement + // 16 xnr_5_4- inner node disablement + // 17 vcr_3_1- inner node disablement + // 18 glim_2_0- inner node disablement + // 19 acm_1_2- inner node disablement + // 20 gammatm_v4- inner node disablement + // 21 csc_1_1- inner node disablement + // 22 rgbs_grid_1_1- inner node disablement + // 23 ccm_3a_2_0- inner node disablement + // 24 fr_grid_1_0- inner node disablement + // 25 b2i_ds_1_1- inner node disablement + // 26 lbff_crop_espa_1_4- inner node disablement + // 27 image_upscaler_1_1- inner node disablement + // 28 cas_1_1- inner node disablement + // 29 odr_ofs_mp_1_4- inner node disablement + // 30 b2i_ds_output_1_1- inner node disablement + // 31 odr_ofs_dp_1_4- inner node disablement + // 32 odr_awb_std_1_4- inner node disablement + // 33 odr_awb_sat_1_4- inner node disablement + // 34 aestatistics_2_1- inner node disablement + // 35 odr_ae_1_4- inner node disablement + // 36 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000064019D581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x64019D; + // DEB - 0x000000000000E1200000F9CE8DDBFDF1 + bitmaps.deb[0] = 0x8DDBFDF1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x0000000030003E9F + bitmaps.teb[0] = 0x30003E9F; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf3WithGmvNoTnrNoSapOuterNode::setInnerNode( + InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 41; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x0000000000000000006400BD58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E120000FF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x000000003032009F + bitmaps.teb[0] = 0x3032009F; + // REB - 0x00000000000000000000001F16F787E7 + bitmaps.reb[0] = 0x16F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 22 rgbs_grid_1_1- inner node disablement + // 23 ccm_3a_2_0- inner node disablement + // 24 fr_grid_1_0- inner node disablement + // 32 odr_awb_std_1_4- inner node disablement + // 33 odr_awb_sat_1_4- inner node disablement + // 34 aestatistics_2_1- inner node disablement + // 35 odr_ae_1_4- inner node disablement + // 36 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1F01C000D0; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x0000000000000000004401BD581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x4401BD; + // DEB - 0x000000000000C120000FF9CE8DDBFDF1 + bitmaps.deb[0] = 0x8DDBFDF1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x0000000020323E9F + bitmaps.teb[0] = 0x20323E9F; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 29 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x20000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x0000000000000000004400BD58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C120000FF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x000000002032009F + bitmaps.teb[0] = 0x2032009F; + // REB - 0x00000000000000000000001F16F787E7 + bitmaps.reb[0] = 0x16F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 22 rgbs_grid_1_1- inner node disablement + // 23 ccm_3a_2_0- inner node disablement + // 24 fr_grid_1_0- inner node disablement + // 29 odr_ofs_mp_1_4- inner node disablement + // 32 odr_awb_std_1_4- inner node disablement + // 33 odr_awb_sat_1_4- inner node disablement + // 34 aestatistics_2_1- inner node disablement + // 35 odr_ae_1_4- inner node disablement + // 36 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1F21C000D0; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x0000000000000000002401BD581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x2401BD; + // DEB - 0x0000000000002120000FF9CE8DDBFDF1 + bitmaps.deb[0] = 0x8DDBFDF1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x0000000010323E9F + bitmaps.teb[0] = 0x10323E9F; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 30 b2i_ds_output_1_1- inner node disablement + // 31 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC0000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x0000000000000000002400BD58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x0000000000002120000FF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x000000001032009F + bitmaps.teb[0] = 0x1032009F; + // REB - 0x00000000000000000000001F16F787E7 + bitmaps.reb[0] = 0x16F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 22 rgbs_grid_1_1- inner node disablement + // 23 ccm_3a_2_0- inner node disablement + // 24 fr_grid_1_0- inner node disablement + // 30 b2i_ds_output_1_1- inner node disablement + // 31 odr_ofs_dp_1_4- inner node disablement + // 32 odr_awb_std_1_4- inner node disablement + // 33 odr_awb_sat_1_4- inner node disablement + // 34 aestatistics_2_1- inner node disablement + // 35 odr_ae_1_4- inner node disablement + // 36 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FC1C000D0; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000180081E6811 + bitmaps.rbm[0] = 0x81E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001DBFDF1 + bitmaps.deb[0] = 0x1DBFDF1; + // TEB - 0x0000000000003E97 + bitmaps.teb[0] = 0x3E97; + // REB - 0x0000000000000000000000000601FFE7 + bitmaps.reb[0] = 0x601FFE7; + + // Kernels disablement + // 10 gd_2_2- inner node disablement + // 11 wb_1_1- inner node disablement + // 12 bnlm_3_4- inner node disablement + // 13 bxt_demosaic- inner node disablement + // 14 vcsc_2_0_b- inner node disablement + // 15 gltm_2_0- inner node disablement + // 16 xnr_5_4- inner node disablement + // 17 vcr_3_1- inner node disablement + // 18 glim_2_0- inner node disablement + // 19 acm_1_2- inner node disablement + // 20 gammatm_v4- inner node disablement + // 21 csc_1_1- inner node disablement + // 25 b2i_ds_1_1- inner node disablement + // 26 lbff_crop_espa_1_4- inner node disablement + // 27 image_upscaler_1_1- inner node disablement + // 28 cas_1_1- inner node disablement + // 29 odr_ofs_mp_1_4- inner node disablement + // 30 b2i_ds_output_1_1- inner node disablement + // 31 odr_ofs_dp_1_4- inner node disablement + // 37 ifd_gmv_1_4- inner node disablement + // 38 gmv_statistics_1_1- inner node disablement + // 39 odr_gmv_feature_1_4- inner node disablement + // 40 odr_gmv_match_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1E0FE3FFC00; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 pext_1_0- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 8 ifd_lsc_1_4- inner node disablement + // 9 lsc_1_2- inner node disablement + // 10 gd_2_2- inner node disablement + // 11 wb_1_1- inner node disablement + // 12 bnlm_3_4- inner node disablement + // 13 bxt_demosaic- inner node disablement + // 14 vcsc_2_0_b- inner node disablement + // 15 gltm_2_0- inner node disablement + // 16 xnr_5_4- inner node disablement + // 17 vcr_3_1- inner node disablement + // 18 glim_2_0- inner node disablement + // 19 acm_1_2- inner node disablement + // 20 gammatm_v4- inner node disablement + // 21 csc_1_1- inner node disablement + // 22 rgbs_grid_1_1- inner node disablement + // 23 ccm_3a_2_0- inner node disablement + // 24 fr_grid_1_0- inner node disablement + // 25 b2i_ds_1_1- inner node disablement + // 26 lbff_crop_espa_1_4- inner node disablement + // 27 image_upscaler_1_1- inner node disablement + // 28 cas_1_1- inner node disablement + // 29 odr_ofs_mp_1_4- inner node disablement + // 30 b2i_ds_output_1_1- inner node disablement + // 31 odr_ofs_dp_1_4- inner node disablement + // 32 odr_awb_std_1_4- inner node disablement + // 33 odr_awb_sat_1_4- inner node disablement + // 34 aestatistics_2_1- inner node disablement + // 35 odr_ae_1_4- inner node disablement + // 36 odr_af_std_1_4- inner node disablement + // 37 ifd_gmv_1_4- inner node disablement + // 38 gmv_statistics_1_1- inner node disablement + // 39 odr_gmv_feature_1_4- inner node disablement + // 40 odr_gmv_match_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFFF; + } else // default inner node + { + // RBM - 0x0000000000000000006401BD581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x6401BD; + // DEB - 0x000000000000E120000FF9CE8DDBFDF1 + bitmaps.deb[0] = 0x8DDBFDF1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x0000000030323E9F + bitmaps.teb[0] = 0x30323E9F; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf3NoGmvWithTnrNoSapOuterNode::setInnerNode( + InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 49; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000067FC9D58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E13E79F0F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC0009F + bitmaps.teb[0] = 0x3FC0009F; + // REB - 0x00000000000000000000001FF6F787E7 + bitmaps.reb[0] = 0xF6F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 22 rgbs_grid_1_1- inner node disablement + // 23 ccm_3a_2_0- inner node disablement + // 24 fr_grid_1_0- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3E1C000D0; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FD9D581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x47FD9D; + // DEB - 0x000000000000C13E79F0F9CE8DDBFDF1 + bitmaps.deb[0] = 0x8DDBFDF1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC03E9F + bitmaps.teb[0] = 0x2FC03E9F; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 45 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x200000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C13E79F0F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC0009F + bitmaps.teb[0] = 0x2FC0009F; + // REB - 0x00000000000000000000001FF6F787E7 + bitmaps.reb[0] = 0xF6F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 22 rgbs_grid_1_1- inner node disablement + // 23 ccm_3a_2_0- inner node disablement + // 24 fr_grid_1_0- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + // 45 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x2003E1C000D0; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FD9D581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x27FD9D; + // DEB - 0x000000000000213E79F0F9CE8DDBFDF1 + bitmaps.deb[0] = 0x8DDBFDF1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC03E9F + bitmaps.teb[0] = 0x1FC03E9F; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 46 b2i_ds_output_1_1- inner node disablement + // 47 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC00000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x000000000000213E79F0F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC0009F + bitmaps.teb[0] = 0x1FC0009F; + // REB - 0x00000000000000000000001FF6F787E7 + bitmaps.reb[0] = 0xF6F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 22 rgbs_grid_1_1- inner node disablement + // 23 ccm_3a_2_0- inner node disablement + // 24 fr_grid_1_0- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + // 46 b2i_ds_output_1_1- inner node disablement + // 47 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC003E1C000D0; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000180081E6811 + bitmaps.rbm[0] = 0x81E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001DBFDF1 + bitmaps.deb[0] = 0x1DBFDF1; + // TEB - 0x0000000000003E97 + bitmaps.teb[0] = 0x3E97; + // REB - 0x0000000000000000000000000601FFE7 + bitmaps.reb[0] = 0x601FFE7; + + // Kernels disablement + // 10 gd_2_2- inner node disablement + // 11 wb_1_1- inner node disablement + // 12 bnlm_3_4- inner node disablement + // 13 bxt_demosaic- inner node disablement + // 14 vcsc_2_0_b- inner node disablement + // 15 gltm_2_0- inner node disablement + // 16 xnr_5_4- inner node disablement + // 17 vcr_3_1- inner node disablement + // 18 glim_2_0- inner node disablement + // 19 acm_1_2- inner node disablement + // 20 gammatm_v4- inner node disablement + // 21 csc_1_1- inner node disablement + // 25 b2i_ds_1_1- inner node disablement + // 26 lbff_crop_espa_1_4- inner node disablement + // 27 tnr7_spatial_1_1- inner node disablement + // 28 tnr_scaler_lb_1_1- inner node disablement + // 34 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 35 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 36 tnr7_ims_1_2- inner node disablement + // 37 tnr7_bc_1_2- inner node disablement + // 38 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 39 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 40 tnr7_blend_1_1- inner node disablement + // 41 odr_tnr_fp_yuvn_1_4- inner node disablement + // 42 tnr_scaler_fp_1_1- inner node disablement + // 43 image_upscaler_1_1- inner node disablement + // 44 cas_1_1- inner node disablement + // 45 odr_ofs_mp_1_4- inner node disablement + // 46 b2i_ds_output_1_1- inner node disablement + // 47 odr_ofs_dp_1_4- inner node disablement + // 48 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFC1E3FFC00; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 pext_1_0- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 8 ifd_lsc_1_4- inner node disablement + // 9 lsc_1_2- inner node disablement + // 10 gd_2_2- inner node disablement + // 11 wb_1_1- inner node disablement + // 12 bnlm_3_4- inner node disablement + // 13 bxt_demosaic- inner node disablement + // 14 vcsc_2_0_b- inner node disablement + // 15 gltm_2_0- inner node disablement + // 16 xnr_5_4- inner node disablement + // 17 vcr_3_1- inner node disablement + // 18 glim_2_0- inner node disablement + // 19 acm_1_2- inner node disablement + // 20 gammatm_v4- inner node disablement + // 21 csc_1_1- inner node disablement + // 22 rgbs_grid_1_1- inner node disablement + // 23 ccm_3a_2_0- inner node disablement + // 24 fr_grid_1_0- inner node disablement + // 25 b2i_ds_1_1- inner node disablement + // 26 lbff_crop_espa_1_4- inner node disablement + // 27 tnr7_spatial_1_1- inner node disablement + // 28 tnr_scaler_lb_1_1- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + // 34 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 35 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 36 tnr7_ims_1_2- inner node disablement + // 37 tnr7_bc_1_2- inner node disablement + // 38 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 39 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 40 tnr7_blend_1_1- inner node disablement + // 41 odr_tnr_fp_yuvn_1_4- inner node disablement + // 42 tnr_scaler_fp_1_1- inner node disablement + // 43 image_upscaler_1_1- inner node disablement + // 44 cas_1_1- inner node disablement + // 45 odr_ofs_mp_1_4- inner node disablement + // 46 b2i_ds_output_1_1- inner node disablement + // 47 odr_ofs_dp_1_4- inner node disablement + // 48 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000067FD9D581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x67FD9D; + // DEB - 0x000000000000E13E79F0F9CE8DDBFDF1 + bitmaps.deb[0] = 0x8DDBFDF1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC03E9F + bitmaps.teb[0] = 0x3FC03E9F; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf3WithGmvWithTnrNoSapOuterNode::setInnerNode( + InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 53; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000067FCBD58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E13E79FFF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FF2009F + bitmaps.teb[0] = 0x3FF2009F; + // REB - 0x00000000000000000000001FF6F787E7 + bitmaps.reb[0] = 0xF6F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 22 rgbs_grid_1_1- inner node disablement + // 23 ccm_3a_2_0- inner node disablement + // 24 fr_grid_1_0- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3E1C000D0; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FDBD581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x47FDBD; + // DEB - 0x000000000000C13E79FFF9CE8DDBFDF1 + bitmaps.deb[0] = 0x8DDBFDF1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FF23E9F + bitmaps.teb[0] = 0x2FF23E9F; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 49 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x2000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C13E79FFF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FF2009F + bitmaps.teb[0] = 0x2FF2009F; + // REB - 0x00000000000000000000001FF6F787E7 + bitmaps.reb[0] = 0xF6F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 22 rgbs_grid_1_1- inner node disablement + // 23 ccm_3a_2_0- inner node disablement + // 24 fr_grid_1_0- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + // 49 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x20003E1C000D0; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FDBD581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x27FDBD; + // DEB - 0x000000000000213E79FFF9CE8DDBFDF1 + bitmaps.deb[0] = 0x8DDBFDF1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FF23E9F + bitmaps.teb[0] = 0x1FF23E9F; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 50 b2i_ds_output_1_1- inner node disablement + // 51 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x000000000000213E79FFF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FF2009F + bitmaps.teb[0] = 0x1FF2009F; + // REB - 0x00000000000000000000001FF6F787E7 + bitmaps.reb[0] = 0xF6F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 22 rgbs_grid_1_1- inner node disablement + // 23 ccm_3a_2_0- inner node disablement + // 24 fr_grid_1_0- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + // 50 b2i_ds_output_1_1- inner node disablement + // 51 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC0003E1C000D0; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000180081E6811 + bitmaps.rbm[0] = 0x81E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001DBFDF1 + bitmaps.deb[0] = 0x1DBFDF1; + // TEB - 0x0000000000003E97 + bitmaps.teb[0] = 0x3E97; + // REB - 0x0000000000000000000000000601FFE7 + bitmaps.reb[0] = 0x601FFE7; + + // Kernels disablement + // 10 gd_2_2- inner node disablement + // 11 wb_1_1- inner node disablement + // 12 bnlm_3_4- inner node disablement + // 13 bxt_demosaic- inner node disablement + // 14 vcsc_2_0_b- inner node disablement + // 15 gltm_2_0- inner node disablement + // 16 xnr_5_4- inner node disablement + // 17 vcr_3_1- inner node disablement + // 18 glim_2_0- inner node disablement + // 19 acm_1_2- inner node disablement + // 20 gammatm_v4- inner node disablement + // 21 csc_1_1- inner node disablement + // 25 b2i_ds_1_1- inner node disablement + // 26 lbff_crop_espa_1_4- inner node disablement + // 27 tnr7_spatial_1_1- inner node disablement + // 28 tnr_scaler_lb_1_1- inner node disablement + // 34 ifd_gmv_1_4- inner node disablement + // 35 gmv_statistics_1_1- inner node disablement + // 36 odr_gmv_feature_1_4- inner node disablement + // 37 odr_gmv_match_1_4- inner node disablement + // 38 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 39 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 40 tnr7_ims_1_2- inner node disablement + // 41 tnr7_bc_1_2- inner node disablement + // 42 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 43 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 44 tnr7_blend_1_1- inner node disablement + // 45 odr_tnr_fp_yuvn_1_4- inner node disablement + // 46 tnr_scaler_fp_1_1- inner node disablement + // 47 image_upscaler_1_1- inner node disablement + // 48 cas_1_1- inner node disablement + // 49 odr_ofs_mp_1_4- inner node disablement + // 50 b2i_ds_output_1_1- inner node disablement + // 51 odr_ofs_dp_1_4- inner node disablement + // 52 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFC1E3FFC00; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 pext_1_0- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 8 ifd_lsc_1_4- inner node disablement + // 9 lsc_1_2- inner node disablement + // 10 gd_2_2- inner node disablement + // 11 wb_1_1- inner node disablement + // 12 bnlm_3_4- inner node disablement + // 13 bxt_demosaic- inner node disablement + // 14 vcsc_2_0_b- inner node disablement + // 15 gltm_2_0- inner node disablement + // 16 xnr_5_4- inner node disablement + // 17 vcr_3_1- inner node disablement + // 18 glim_2_0- inner node disablement + // 19 acm_1_2- inner node disablement + // 20 gammatm_v4- inner node disablement + // 21 csc_1_1- inner node disablement + // 22 rgbs_grid_1_1- inner node disablement + // 23 ccm_3a_2_0- inner node disablement + // 24 fr_grid_1_0- inner node disablement + // 25 b2i_ds_1_1- inner node disablement + // 26 lbff_crop_espa_1_4- inner node disablement + // 27 tnr7_spatial_1_1- inner node disablement + // 28 tnr_scaler_lb_1_1- inner node disablement + // 29 odr_awb_std_1_4- inner node disablement + // 30 odr_awb_sat_1_4- inner node disablement + // 31 aestatistics_2_1- inner node disablement + // 32 odr_ae_1_4- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + // 34 ifd_gmv_1_4- inner node disablement + // 35 gmv_statistics_1_1- inner node disablement + // 36 odr_gmv_feature_1_4- inner node disablement + // 37 odr_gmv_match_1_4- inner node disablement + // 38 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 39 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 40 tnr7_ims_1_2- inner node disablement + // 41 tnr7_bc_1_2- inner node disablement + // 42 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 43 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 44 tnr7_blend_1_1- inner node disablement + // 45 odr_tnr_fp_yuvn_1_4- inner node disablement + // 46 tnr_scaler_fp_1_1- inner node disablement + // 47 image_upscaler_1_1- inner node disablement + // 48 cas_1_1- inner node disablement + // 49 odr_ofs_mp_1_4- inner node disablement + // 50 b2i_ds_output_1_1- inner node disablement + // 51 odr_ofs_dp_1_4- inner node disablement + // 52 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000067FDBD581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x67FDBD; + // DEB - 0x000000000000E13E79FFF9CE8DDBFDF1 + bitmaps.deb[0] = 0x8DDBFDF1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FF23E9F + bitmaps.teb[0] = 0x3FF23E9F; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void IsysDolOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) { + // No inner nodes + (void)nodeInnerOptions; +} + +void LbffDol2InputsNoGmvNoTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 37; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[8].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[17].run_kernel.enable = 0; // wb_1_1 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000064009D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1200000F9CE8D8001FB + bitmaps.deb[0] = 0x8D8001FB; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x00000000300000BF + bitmaps.teb[0] = 0x300000BF; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 28 fr_grid_1_0- inner node disablement + // 36 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1010003EC0; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000044009D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1200000F9CE8D9FF1FB + bitmaps.deb[0] = 0x8D9FF1FB; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x0000000020041EBF + bitmaps.teb[0] = 0x20041EBF; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 33 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x200000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000044009D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1200000F9CE8D8001FB + bitmaps.deb[0] = 0x8D8001FB; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x00000000200000BF + bitmaps.teb[0] = 0x200000BF; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 28 fr_grid_1_0- inner node disablement + // 33 odr_ofs_mp_1_4- inner node disablement + // 36 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1210003EC0; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000024009D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021200000F9CE8D9FF1FB + bitmaps.deb[0] = 0x8D9FF1FB; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x0000000010041EBF + bitmaps.teb[0] = 0x10041EBF; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 34 b2i_ds_output_1_1- inner node disablement + // 35 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC00000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000024009D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021200000F9CE8D8001FB + bitmaps.deb[0] = 0x8D8001FB; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x00000000100000BF + bitmaps.teb[0] = 0x100000BF; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 28 fr_grid_1_0- inner node disablement + // 34 b2i_ds_output_1_1- inner node disablement + // 35 odr_ofs_dp_1_4- inner node disablement + // 36 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1C10003EC0; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000008002526E16 + bitmaps.rbm[0] = 0x2526E16; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019FF1FB + bitmaps.deb[0] = 0x19FF1FB; + // TEB - 0x0000000000041EBF + bitmaps.teb[0] = 0x41EBF; + // REB - 0x00000000000000000000000002007FF7 + bitmaps.reb[0] = 0x2007FF7; + + // Kernels disablement + // 16 gd_2_2- inner node disablement + // 17 wb_1_1- inner node disablement + // 18 bnlm_3_4- inner node disablement + // 19 bxt_demosaic- inner node disablement + // 20 vcsc_2_0_b- inner node disablement + // 21 gltm_2_0- inner node disablement + // 22 xnr_5_4- inner node disablement + // 23 vcr_3_1- inner node disablement + // 24 glim_2_0- inner node disablement + // 25 acm_1_2- inner node disablement + // 26 gammatm_v4- inner node disablement + // 27 csc_1_1- inner node disablement + // 29 b2i_ds_1_1- inner node disablement + // 30 lbff_crop_espa_1_4- inner node disablement + // 31 image_upscaler_1_1- inner node disablement + // 32 cas_1_1- inner node disablement + // 33 odr_ofs_mp_1_4- inner node disablement + // 34 b2i_ds_output_1_1- inner node disablement + // 35 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFEFFF0000; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 ifd_pipe_long_1_4- inner node disablement + // 2 dol_lite_1_2- inner node disablement + // 3 bxt_blc- inner node disablement + // 4 linearization2_0- inner node disablement + // 5 dpc_2_2- inner node disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 8 rgb_ir_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 14 ifd_lsc_1_4- inner node disablement + // 15 lsc_1_2- inner node disablement + // 16 gd_2_2- inner node disablement + // 17 wb_1_1- inner node disablement + // 18 bnlm_3_4- inner node disablement + // 19 bxt_demosaic- inner node disablement + // 20 vcsc_2_0_b- inner node disablement + // 21 gltm_2_0- inner node disablement + // 22 xnr_5_4- inner node disablement + // 23 vcr_3_1- inner node disablement + // 24 glim_2_0- inner node disablement + // 25 acm_1_2- inner node disablement + // 26 gammatm_v4- inner node disablement + // 27 csc_1_1- inner node disablement + // 28 fr_grid_1_0- inner node disablement + // 29 b2i_ds_1_1- inner node disablement + // 30 lbff_crop_espa_1_4- inner node disablement + // 31 image_upscaler_1_1- inner node disablement + // 32 cas_1_1- inner node disablement + // 33 odr_ofs_mp_1_4- inner node disablement + // 34 b2i_ds_output_1_1- inner node disablement + // 35 odr_ofs_dp_1_4- inner node disablement + // 36 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000064009D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1200000F9CE8D9FF1FB + bitmaps.deb[0] = 0x8D9FF1FB; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x0000000030041EBF + bitmaps.teb[0] = 0x30041EBF; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffDol2InputsWithGmvNoTnrNoSapOuterNode::setInnerNode( + InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 41; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[8].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[17].run_kernel.enable = 0; // wb_1_1 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x0000000000000000006400BD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E120000FF9CE8D8001FB + bitmaps.deb[0] = 0x8D8001FB; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x00000000303200BF + bitmaps.teb[0] = 0x303200BF; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 28 fr_grid_1_0- inner node disablement + // 36 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1010003EC0; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x0000000000000000004400BD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C120000FF9CE8D9FF1FB + bitmaps.deb[0] = 0x8D9FF1FB; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x0000000020361EBF + bitmaps.teb[0] = 0x20361EBF; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 33 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x200000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x0000000000000000004400BD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C120000FF9CE8D8001FB + bitmaps.deb[0] = 0x8D8001FB; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x00000000203200BF + bitmaps.teb[0] = 0x203200BF; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 28 fr_grid_1_0- inner node disablement + // 33 odr_ofs_mp_1_4- inner node disablement + // 36 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1210003EC0; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x0000000000000000002400BD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x0000000000002120000FF9CE8D9FF1FB + bitmaps.deb[0] = 0x8D9FF1FB; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x0000000010361EBF + bitmaps.teb[0] = 0x10361EBF; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 34 b2i_ds_output_1_1- inner node disablement + // 35 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC00000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x0000000000000000002400BD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x0000000000002120000FF9CE8D8001FB + bitmaps.deb[0] = 0x8D8001FB; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x00000000103200BF + bitmaps.teb[0] = 0x103200BF; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 28 fr_grid_1_0- inner node disablement + // 34 b2i_ds_output_1_1- inner node disablement + // 35 odr_ofs_dp_1_4- inner node disablement + // 36 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1C10003EC0; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000008002526E16 + bitmaps.rbm[0] = 0x2526E16; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019FF1FB + bitmaps.deb[0] = 0x19FF1FB; + // TEB - 0x0000000000041EBF + bitmaps.teb[0] = 0x41EBF; + // REB - 0x00000000000000000000000002007FF7 + bitmaps.reb[0] = 0x2007FF7; + + // Kernels disablement + // 16 gd_2_2- inner node disablement + // 17 wb_1_1- inner node disablement + // 18 bnlm_3_4- inner node disablement + // 19 bxt_demosaic- inner node disablement + // 20 vcsc_2_0_b- inner node disablement + // 21 gltm_2_0- inner node disablement + // 22 xnr_5_4- inner node disablement + // 23 vcr_3_1- inner node disablement + // 24 glim_2_0- inner node disablement + // 25 acm_1_2- inner node disablement + // 26 gammatm_v4- inner node disablement + // 27 csc_1_1- inner node disablement + // 29 b2i_ds_1_1- inner node disablement + // 30 lbff_crop_espa_1_4- inner node disablement + // 31 image_upscaler_1_1- inner node disablement + // 32 cas_1_1- inner node disablement + // 33 odr_ofs_mp_1_4- inner node disablement + // 34 b2i_ds_output_1_1- inner node disablement + // 35 odr_ofs_dp_1_4- inner node disablement + // 37 ifd_gmv_1_4- inner node disablement + // 38 gmv_statistics_1_1- inner node disablement + // 39 odr_gmv_feature_1_4- inner node disablement + // 40 odr_gmv_match_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1EFEFFF0000; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 ifd_pipe_long_1_4- inner node disablement + // 2 dol_lite_1_2- inner node disablement + // 3 bxt_blc- inner node disablement + // 4 linearization2_0- inner node disablement + // 5 dpc_2_2- inner node disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 8 rgb_ir_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 14 ifd_lsc_1_4- inner node disablement + // 15 lsc_1_2- inner node disablement + // 16 gd_2_2- inner node disablement + // 17 wb_1_1- inner node disablement + // 18 bnlm_3_4- inner node disablement + // 19 bxt_demosaic- inner node disablement + // 20 vcsc_2_0_b- inner node disablement + // 21 gltm_2_0- inner node disablement + // 22 xnr_5_4- inner node disablement + // 23 vcr_3_1- inner node disablement + // 24 glim_2_0- inner node disablement + // 25 acm_1_2- inner node disablement + // 26 gammatm_v4- inner node disablement + // 27 csc_1_1- inner node disablement + // 28 fr_grid_1_0- inner node disablement + // 29 b2i_ds_1_1- inner node disablement + // 30 lbff_crop_espa_1_4- inner node disablement + // 31 image_upscaler_1_1- inner node disablement + // 32 cas_1_1- inner node disablement + // 33 odr_ofs_mp_1_4- inner node disablement + // 34 b2i_ds_output_1_1- inner node disablement + // 35 odr_ofs_dp_1_4- inner node disablement + // 36 odr_af_std_1_4- inner node disablement + // 37 ifd_gmv_1_4- inner node disablement + // 38 gmv_statistics_1_1- inner node disablement + // 39 odr_gmv_feature_1_4- inner node disablement + // 40 odr_gmv_match_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFFF; + } else // default inner node + { + // RBM - 0x0000000000000000006400BD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E120000FF9CE8D9FF1FB + bitmaps.deb[0] = 0x8D9FF1FB; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x0000000030361EBF + bitmaps.teb[0] = 0x30361EBF; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffDol2InputsNoGmvWithTnrNoSapOuterNode::setInnerNode( + InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 49; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[8].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[17].run_kernel.enable = 0; // wb_1_1 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000067FC9D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E13E79F0F9CE8D8001FB + bitmaps.deb[0] = 0x8D8001FB; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC000BF + bitmaps.teb[0] = 0x3FC000BF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 28 fr_grid_1_0- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x210003EC0; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C13E79F0F9CE8D9FF1FB + bitmaps.deb[0] = 0x8D9FF1FB; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC41EBF + bitmaps.teb[0] = 0x2FC41EBF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 45 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x200000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C13E79F0F9CE8D8001FB + bitmaps.deb[0] = 0x8D8001FB; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC000BF + bitmaps.teb[0] = 0x2FC000BF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 28 fr_grid_1_0- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + // 45 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x200210003EC0; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x000000000000213E79F0F9CE8D9FF1FB + bitmaps.deb[0] = 0x8D9FF1FB; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC41EBF + bitmaps.teb[0] = 0x1FC41EBF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 46 b2i_ds_output_1_1- inner node disablement + // 47 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC00000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x000000000000213E79F0F9CE8D8001FB + bitmaps.deb[0] = 0x8D8001FB; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC000BF + bitmaps.teb[0] = 0x1FC000BF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 28 fr_grid_1_0- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + // 46 b2i_ds_output_1_1- inner node disablement + // 47 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC00210003EC0; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000008002526E16 + bitmaps.rbm[0] = 0x2526E16; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019FF1FB + bitmaps.deb[0] = 0x19FF1FB; + // TEB - 0x0000000000041EBF + bitmaps.teb[0] = 0x41EBF; + // REB - 0x00000000000000000000000002007FF7 + bitmaps.reb[0] = 0x2007FF7; + + // Kernels disablement + // 16 gd_2_2- inner node disablement + // 17 wb_1_1- inner node disablement + // 18 bnlm_3_4- inner node disablement + // 19 bxt_demosaic- inner node disablement + // 20 vcsc_2_0_b- inner node disablement + // 21 gltm_2_0- inner node disablement + // 22 xnr_5_4- inner node disablement + // 23 vcr_3_1- inner node disablement + // 24 glim_2_0- inner node disablement + // 25 acm_1_2- inner node disablement + // 26 gammatm_v4- inner node disablement + // 27 csc_1_1- inner node disablement + // 29 b2i_ds_1_1- inner node disablement + // 30 lbff_crop_espa_1_4- inner node disablement + // 31 tnr7_spatial_1_1- inner node disablement + // 32 tnr_scaler_lb_1_1- inner node disablement + // 34 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 35 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 36 tnr7_ims_1_2- inner node disablement + // 37 tnr7_bc_1_2- inner node disablement + // 38 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 39 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 40 tnr7_blend_1_1- inner node disablement + // 41 odr_tnr_fp_yuvn_1_4- inner node disablement + // 42 tnr_scaler_fp_1_1- inner node disablement + // 43 image_upscaler_1_1- inner node disablement + // 44 cas_1_1- inner node disablement + // 45 odr_ofs_mp_1_4- inner node disablement + // 46 b2i_ds_output_1_1- inner node disablement + // 47 odr_ofs_dp_1_4- inner node disablement + // 48 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFDEFFF0000; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 ifd_pipe_long_1_4- inner node disablement + // 2 dol_lite_1_2- inner node disablement + // 3 bxt_blc- inner node disablement + // 4 linearization2_0- inner node disablement + // 5 dpc_2_2- inner node disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 8 rgb_ir_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 14 ifd_lsc_1_4- inner node disablement + // 15 lsc_1_2- inner node disablement + // 16 gd_2_2- inner node disablement + // 17 wb_1_1- inner node disablement + // 18 bnlm_3_4- inner node disablement + // 19 bxt_demosaic- inner node disablement + // 20 vcsc_2_0_b- inner node disablement + // 21 gltm_2_0- inner node disablement + // 22 xnr_5_4- inner node disablement + // 23 vcr_3_1- inner node disablement + // 24 glim_2_0- inner node disablement + // 25 acm_1_2- inner node disablement + // 26 gammatm_v4- inner node disablement + // 27 csc_1_1- inner node disablement + // 28 fr_grid_1_0- inner node disablement + // 29 b2i_ds_1_1- inner node disablement + // 30 lbff_crop_espa_1_4- inner node disablement + // 31 tnr7_spatial_1_1- inner node disablement + // 32 tnr_scaler_lb_1_1- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + // 34 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 35 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 36 tnr7_ims_1_2- inner node disablement + // 37 tnr7_bc_1_2- inner node disablement + // 38 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 39 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 40 tnr7_blend_1_1- inner node disablement + // 41 odr_tnr_fp_yuvn_1_4- inner node disablement + // 42 tnr_scaler_fp_1_1- inner node disablement + // 43 image_upscaler_1_1- inner node disablement + // 44 cas_1_1- inner node disablement + // 45 odr_ofs_mp_1_4- inner node disablement + // 46 b2i_ds_output_1_1- inner node disablement + // 47 odr_ofs_dp_1_4- inner node disablement + // 48 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000067FC9D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E13E79F0F9CE8D9FF1FB + bitmaps.deb[0] = 0x8D9FF1FB; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC41EBF + bitmaps.teb[0] = 0x3FC41EBF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffDol2InputsWithGmvWithTnrNoSapOuterNode::setInnerNode( + InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 53; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[8].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[17].run_kernel.enable = 0; // wb_1_1 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000067FCBD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E13E79FFF9CE8D8001FB + bitmaps.deb[0] = 0x8D8001FB; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FF200BF + bitmaps.teb[0] = 0x3FF200BF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 28 fr_grid_1_0- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x210003EC0; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C13E79FFF9CE8D9FF1FB + bitmaps.deb[0] = 0x8D9FF1FB; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FF61EBF + bitmaps.teb[0] = 0x2FF61EBF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 49 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x2000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C13E79FFF9CE8D8001FB + bitmaps.deb[0] = 0x8D8001FB; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FF200BF + bitmaps.teb[0] = 0x2FF200BF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 28 fr_grid_1_0- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + // 49 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x2000210003EC0; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x000000000000213E79FFF9CE8D9FF1FB + bitmaps.deb[0] = 0x8D9FF1FB; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FF61EBF + bitmaps.teb[0] = 0x1FF61EBF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 50 b2i_ds_output_1_1- inner node disablement + // 51 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x000000000000213E79FFF9CE8D8001FB + bitmaps.deb[0] = 0x8D8001FB; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FF200BF + bitmaps.teb[0] = 0x1FF200BF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 28 fr_grid_1_0- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + // 50 b2i_ds_output_1_1- inner node disablement + // 51 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC000210003EC0; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000008002526E16 + bitmaps.rbm[0] = 0x2526E16; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019FF1FB + bitmaps.deb[0] = 0x19FF1FB; + // TEB - 0x0000000000041EBF + bitmaps.teb[0] = 0x41EBF; + // REB - 0x00000000000000000000000002007FF7 + bitmaps.reb[0] = 0x2007FF7; + + // Kernels disablement + // 16 gd_2_2- inner node disablement + // 17 wb_1_1- inner node disablement + // 18 bnlm_3_4- inner node disablement + // 19 bxt_demosaic- inner node disablement + // 20 vcsc_2_0_b- inner node disablement + // 21 gltm_2_0- inner node disablement + // 22 xnr_5_4- inner node disablement + // 23 vcr_3_1- inner node disablement + // 24 glim_2_0- inner node disablement + // 25 acm_1_2- inner node disablement + // 26 gammatm_v4- inner node disablement + // 27 csc_1_1- inner node disablement + // 29 b2i_ds_1_1- inner node disablement + // 30 lbff_crop_espa_1_4- inner node disablement + // 31 tnr7_spatial_1_1- inner node disablement + // 32 tnr_scaler_lb_1_1- inner node disablement + // 34 ifd_gmv_1_4- inner node disablement + // 35 gmv_statistics_1_1- inner node disablement + // 36 odr_gmv_feature_1_4- inner node disablement + // 37 odr_gmv_match_1_4- inner node disablement + // 38 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 39 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 40 tnr7_ims_1_2- inner node disablement + // 41 tnr7_bc_1_2- inner node disablement + // 42 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 43 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 44 tnr7_blend_1_1- inner node disablement + // 45 odr_tnr_fp_yuvn_1_4- inner node disablement + // 46 tnr_scaler_fp_1_1- inner node disablement + // 47 image_upscaler_1_1- inner node disablement + // 48 cas_1_1- inner node disablement + // 49 odr_ofs_mp_1_4- inner node disablement + // 50 b2i_ds_output_1_1- inner node disablement + // 51 odr_ofs_dp_1_4- inner node disablement + // 52 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFDEFFF0000; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 ifd_pipe_long_1_4- inner node disablement + // 2 dol_lite_1_2- inner node disablement + // 3 bxt_blc- inner node disablement + // 4 linearization2_0- inner node disablement + // 5 dpc_2_2- inner node disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 8 rgb_ir_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 14 ifd_lsc_1_4- inner node disablement + // 15 lsc_1_2- inner node disablement + // 16 gd_2_2- inner node disablement + // 17 wb_1_1- inner node disablement + // 18 bnlm_3_4- inner node disablement + // 19 bxt_demosaic- inner node disablement + // 20 vcsc_2_0_b- inner node disablement + // 21 gltm_2_0- inner node disablement + // 22 xnr_5_4- inner node disablement + // 23 vcr_3_1- inner node disablement + // 24 glim_2_0- inner node disablement + // 25 acm_1_2- inner node disablement + // 26 gammatm_v4- inner node disablement + // 27 csc_1_1- inner node disablement + // 28 fr_grid_1_0- inner node disablement + // 29 b2i_ds_1_1- inner node disablement + // 30 lbff_crop_espa_1_4- inner node disablement + // 31 tnr7_spatial_1_1- inner node disablement + // 32 tnr_scaler_lb_1_1- inner node disablement + // 33 odr_af_std_1_4- inner node disablement + // 34 ifd_gmv_1_4- inner node disablement + // 35 gmv_statistics_1_1- inner node disablement + // 36 odr_gmv_feature_1_4- inner node disablement + // 37 odr_gmv_match_1_4- inner node disablement + // 38 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 39 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 40 tnr7_ims_1_2- inner node disablement + // 41 tnr7_bc_1_2- inner node disablement + // 42 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 43 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 44 tnr7_blend_1_1- inner node disablement + // 45 odr_tnr_fp_yuvn_1_4- inner node disablement + // 46 tnr_scaler_fp_1_1- inner node disablement + // 47 image_upscaler_1_1- inner node disablement + // 48 cas_1_1- inner node disablement + // 49 odr_ofs_mp_1_4- inner node disablement + // 50 b2i_ds_output_1_1- inner node disablement + // 51 odr_ofs_dp_1_4- inner node disablement + // 52 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000067FCBD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E13E79FFF9CE8D9FF1FB + bitmaps.deb[0] = 0x8D9FF1FB; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FF61EBF + bitmaps.teb[0] = 0x3FF61EBF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffDolSmoothOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 8; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // RBM - 0x0000000000000000000000025001A011 + bitmaps.rbm[0] = 0x5001A011; + bitmaps.rbm[1] = 0x2; + // DEB - 0x0000000000000000000000018C000131 + bitmaps.deb[0] = 0x8C000131; + bitmaps.deb[1] = 0x1; + // TEB - 0x0000000000010017 + bitmaps.teb[0] = 0x10017; + // REB - 0x00000000000000000000000000160787 + bitmaps.reb[0] = 0x160787; + // No inner nodes + (void)nodeInnerOptions; +} + +void LbffDol3InputsNoGmvNoTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 38; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[9].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[18].run_kernel.enable = 0; // wb_1_1 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000064009D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1200000F9CE8D8001FF + bitmaps.deb[0] = 0x8D8001FF; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x00000000300000FF + bitmaps.teb[0] = 0x300000FF; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 29 fr_grid_1_0- inner node disablement + // 37 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x2020007D80; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000044009D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1200000F9CE8D9FF1FF + bitmaps.deb[0] = 0x8D9FF1FF; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x0000000020041EFF + bitmaps.teb[0] = 0x20041EFF; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 34 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x400000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000044009D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1200000F9CE8D8001FF + bitmaps.deb[0] = 0x8D8001FF; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x00000000200000FF + bitmaps.teb[0] = 0x200000FF; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 29 fr_grid_1_0- inner node disablement + // 34 odr_ofs_mp_1_4- inner node disablement + // 37 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x2420007D80; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000024009D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021200000F9CE8D9FF1FF + bitmaps.deb[0] = 0x8D9FF1FF; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x0000000010041EFF + bitmaps.teb[0] = 0x10041EFF; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 35 b2i_ds_output_1_1- inner node disablement + // 36 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1800000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000024009D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021200000F9CE8D8001FF + bitmaps.deb[0] = 0x8D8001FF; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x00000000100000FF + bitmaps.teb[0] = 0x100000FF; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 29 fr_grid_1_0- inner node disablement + // 35 b2i_ds_output_1_1- inner node disablement + // 36 odr_ofs_dp_1_4- inner node disablement + // 37 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3820007D80; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000008002526E16 + bitmaps.rbm[0] = 0x2526E16; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019FF1FF + bitmaps.deb[0] = 0x19FF1FF; + // TEB - 0x0000000000041EFF + bitmaps.teb[0] = 0x41EFF; + // REB - 0x00000000000000000000000002007FF7 + bitmaps.reb[0] = 0x2007FF7; + + // Kernels disablement + // 17 gd_2_2- inner node disablement + // 18 wb_1_1- inner node disablement + // 19 bnlm_3_4- inner node disablement + // 20 bxt_demosaic- inner node disablement + // 21 vcsc_2_0_b- inner node disablement + // 22 gltm_2_0- inner node disablement + // 23 xnr_5_4- inner node disablement + // 24 vcr_3_1- inner node disablement + // 25 glim_2_0- inner node disablement + // 26 acm_1_2- inner node disablement + // 27 gammatm_v4- inner node disablement + // 28 csc_1_1- inner node disablement + // 30 b2i_ds_1_1- inner node disablement + // 31 lbff_crop_espa_1_4- inner node disablement + // 32 image_upscaler_1_1- inner node disablement + // 33 cas_1_1- inner node disablement + // 34 odr_ofs_mp_1_4- inner node disablement + // 35 b2i_ds_output_1_1- inner node disablement + // 36 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FDFFE0000; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 ifd_pipe_long_1_4- inner node disablement + // 2 ifd_pipe_short_smth_1_4- inner node disablement + // 3 dol_lite_1_2- inner node disablement + // 4 bxt_blc- inner node disablement + // 5 linearization2_0- inner node disablement + // 6 dpc_2_2- inner node disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 9 rgb_ir_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 ifd_lsc_1_4- inner node disablement + // 16 lsc_1_2- inner node disablement + // 17 gd_2_2- inner node disablement + // 18 wb_1_1- inner node disablement + // 19 bnlm_3_4- inner node disablement + // 20 bxt_demosaic- inner node disablement + // 21 vcsc_2_0_b- inner node disablement + // 22 gltm_2_0- inner node disablement + // 23 xnr_5_4- inner node disablement + // 24 vcr_3_1- inner node disablement + // 25 glim_2_0- inner node disablement + // 26 acm_1_2- inner node disablement + // 27 gammatm_v4- inner node disablement + // 28 csc_1_1- inner node disablement + // 29 fr_grid_1_0- inner node disablement + // 30 b2i_ds_1_1- inner node disablement + // 31 lbff_crop_espa_1_4- inner node disablement + // 32 image_upscaler_1_1- inner node disablement + // 33 cas_1_1- inner node disablement + // 34 odr_ofs_mp_1_4- inner node disablement + // 35 b2i_ds_output_1_1- inner node disablement + // 36 odr_ofs_dp_1_4- inner node disablement + // 37 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000064009D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1200000F9CE8D9FF1FF + bitmaps.deb[0] = 0x8D9FF1FF; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x0000000030041EFF + bitmaps.teb[0] = 0x30041EFF; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffDol3InputsWithGmvNoTnrNoSapOuterNode::setInnerNode( + InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 42; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[9].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[18].run_kernel.enable = 0; // wb_1_1 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x0000000000000000006400BD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E120000FF9CE8D8001FF + bitmaps.deb[0] = 0x8D8001FF; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x00000000303200FF + bitmaps.teb[0] = 0x303200FF; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 29 fr_grid_1_0- inner node disablement + // 37 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x2020007D80; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x0000000000000000004400BD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C120000FF9CE8D9FF1FF + bitmaps.deb[0] = 0x8D9FF1FF; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x0000000020361EFF + bitmaps.teb[0] = 0x20361EFF; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 34 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x400000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x0000000000000000004400BD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C120000FF9CE8D8001FF + bitmaps.deb[0] = 0x8D8001FF; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x00000000203200FF + bitmaps.teb[0] = 0x203200FF; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 29 fr_grid_1_0- inner node disablement + // 34 odr_ofs_mp_1_4- inner node disablement + // 37 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x2420007D80; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x0000000000000000002400BD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x0000000000002120000FF9CE8D9FF1FF + bitmaps.deb[0] = 0x8D9FF1FF; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x0000000010361EFF + bitmaps.teb[0] = 0x10361EFF; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 35 b2i_ds_output_1_1- inner node disablement + // 36 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1800000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x0000000000000000002400BD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x0000000000002120000FF9CE8D8001FF + bitmaps.deb[0] = 0x8D8001FF; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x00000000103200FF + bitmaps.teb[0] = 0x103200FF; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 29 fr_grid_1_0- inner node disablement + // 35 b2i_ds_output_1_1- inner node disablement + // 36 odr_ofs_dp_1_4- inner node disablement + // 37 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3820007D80; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000008002526E16 + bitmaps.rbm[0] = 0x2526E16; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019FF1FF + bitmaps.deb[0] = 0x19FF1FF; + // TEB - 0x0000000000041EFF + bitmaps.teb[0] = 0x41EFF; + // REB - 0x00000000000000000000000002007FF7 + bitmaps.reb[0] = 0x2007FF7; + + // Kernels disablement + // 17 gd_2_2- inner node disablement + // 18 wb_1_1- inner node disablement + // 19 bnlm_3_4- inner node disablement + // 20 bxt_demosaic- inner node disablement + // 21 vcsc_2_0_b- inner node disablement + // 22 gltm_2_0- inner node disablement + // 23 xnr_5_4- inner node disablement + // 24 vcr_3_1- inner node disablement + // 25 glim_2_0- inner node disablement + // 26 acm_1_2- inner node disablement + // 27 gammatm_v4- inner node disablement + // 28 csc_1_1- inner node disablement + // 30 b2i_ds_1_1- inner node disablement + // 31 lbff_crop_espa_1_4- inner node disablement + // 32 image_upscaler_1_1- inner node disablement + // 33 cas_1_1- inner node disablement + // 34 odr_ofs_mp_1_4- inner node disablement + // 35 b2i_ds_output_1_1- inner node disablement + // 36 odr_ofs_dp_1_4- inner node disablement + // 38 ifd_gmv_1_4- inner node disablement + // 39 gmv_statistics_1_1- inner node disablement + // 40 odr_gmv_feature_1_4- inner node disablement + // 41 odr_gmv_match_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3DFDFFE0000; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 ifd_pipe_long_1_4- inner node disablement + // 2 ifd_pipe_short_smth_1_4- inner node disablement + // 3 dol_lite_1_2- inner node disablement + // 4 bxt_blc- inner node disablement + // 5 linearization2_0- inner node disablement + // 6 dpc_2_2- inner node disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 9 rgb_ir_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 ifd_lsc_1_4- inner node disablement + // 16 lsc_1_2- inner node disablement + // 17 gd_2_2- inner node disablement + // 18 wb_1_1- inner node disablement + // 19 bnlm_3_4- inner node disablement + // 20 bxt_demosaic- inner node disablement + // 21 vcsc_2_0_b- inner node disablement + // 22 gltm_2_0- inner node disablement + // 23 xnr_5_4- inner node disablement + // 24 vcr_3_1- inner node disablement + // 25 glim_2_0- inner node disablement + // 26 acm_1_2- inner node disablement + // 27 gammatm_v4- inner node disablement + // 28 csc_1_1- inner node disablement + // 29 fr_grid_1_0- inner node disablement + // 30 b2i_ds_1_1- inner node disablement + // 31 lbff_crop_espa_1_4- inner node disablement + // 32 image_upscaler_1_1- inner node disablement + // 33 cas_1_1- inner node disablement + // 34 odr_ofs_mp_1_4- inner node disablement + // 35 b2i_ds_output_1_1- inner node disablement + // 36 odr_ofs_dp_1_4- inner node disablement + // 37 odr_af_std_1_4- inner node disablement + // 38 ifd_gmv_1_4- inner node disablement + // 39 gmv_statistics_1_1- inner node disablement + // 40 odr_gmv_feature_1_4- inner node disablement + // 41 odr_gmv_match_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFF; + } else // default inner node + { + // RBM - 0x0000000000000000006400BD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E120000FF9CE8D9FF1FF + bitmaps.deb[0] = 0x8D9FF1FF; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x0000000030361EFF + bitmaps.teb[0] = 0x30361EFF; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffDol3InputsNoGmvWithTnrNoSapOuterNode::setInnerNode( + InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 50; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[9].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[18].run_kernel.enable = 0; // wb_1_1 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000067FC9D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E13E79F0F9CE8D8001FF + bitmaps.deb[0] = 0x8D8001FF; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC000FF + bitmaps.teb[0] = 0x3FC000FF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 29 fr_grid_1_0- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x420007D80; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C13E79F0F9CE8D9FF1FF + bitmaps.deb[0] = 0x8D9FF1FF; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC41EFF + bitmaps.teb[0] = 0x2FC41EFF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 46 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x400000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C13E79F0F9CE8D8001FF + bitmaps.deb[0] = 0x8D8001FF; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC000FF + bitmaps.teb[0] = 0x2FC000FF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 29 fr_grid_1_0- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 46 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x400420007D80; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x000000000000213E79F0F9CE8D9FF1FF + bitmaps.deb[0] = 0x8D9FF1FF; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC41EFF + bitmaps.teb[0] = 0x1FC41EFF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1800000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x000000000000213E79F0F9CE8D8001FF + bitmaps.deb[0] = 0x8D8001FF; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC000FF + bitmaps.teb[0] = 0x1FC000FF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 29 fr_grid_1_0- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1800420007D80; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000008002526E16 + bitmaps.rbm[0] = 0x2526E16; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019FF1FF + bitmaps.deb[0] = 0x19FF1FF; + // TEB - 0x0000000000041EFF + bitmaps.teb[0] = 0x41EFF; + // REB - 0x00000000000000000000000002007FF7 + bitmaps.reb[0] = 0x2007FF7; + + // Kernels disablement + // 17 gd_2_2- inner node disablement + // 18 wb_1_1- inner node disablement + // 19 bnlm_3_4- inner node disablement + // 20 bxt_demosaic- inner node disablement + // 21 vcsc_2_0_b- inner node disablement + // 22 gltm_2_0- inner node disablement + // 23 xnr_5_4- inner node disablement + // 24 vcr_3_1- inner node disablement + // 25 glim_2_0- inner node disablement + // 26 acm_1_2- inner node disablement + // 27 gammatm_v4- inner node disablement + // 28 csc_1_1- inner node disablement + // 30 b2i_ds_1_1- inner node disablement + // 31 lbff_crop_espa_1_4- inner node disablement + // 32 tnr7_spatial_1_1- inner node disablement + // 33 tnr_scaler_lb_1_1- inner node disablement + // 35 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 36 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 37 tnr7_ims_1_2- inner node disablement + // 38 tnr7_bc_1_2- inner node disablement + // 39 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 40 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 41 tnr7_blend_1_1- inner node disablement + // 42 odr_tnr_fp_yuvn_1_4- inner node disablement + // 43 tnr_scaler_fp_1_1- inner node disablement + // 44 image_upscaler_1_1- inner node disablement + // 45 cas_1_1- inner node disablement + // 46 odr_ofs_mp_1_4- inner node disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + // 49 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFBDFFE0000; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 ifd_pipe_long_1_4- inner node disablement + // 2 ifd_pipe_short_smth_1_4- inner node disablement + // 3 dol_lite_1_2- inner node disablement + // 4 bxt_blc- inner node disablement + // 5 linearization2_0- inner node disablement + // 6 dpc_2_2- inner node disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 9 rgb_ir_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 ifd_lsc_1_4- inner node disablement + // 16 lsc_1_2- inner node disablement + // 17 gd_2_2- inner node disablement + // 18 wb_1_1- inner node disablement + // 19 bnlm_3_4- inner node disablement + // 20 bxt_demosaic- inner node disablement + // 21 vcsc_2_0_b- inner node disablement + // 22 gltm_2_0- inner node disablement + // 23 xnr_5_4- inner node disablement + // 24 vcr_3_1- inner node disablement + // 25 glim_2_0- inner node disablement + // 26 acm_1_2- inner node disablement + // 27 gammatm_v4- inner node disablement + // 28 csc_1_1- inner node disablement + // 29 fr_grid_1_0- inner node disablement + // 30 b2i_ds_1_1- inner node disablement + // 31 lbff_crop_espa_1_4- inner node disablement + // 32 tnr7_spatial_1_1- inner node disablement + // 33 tnr_scaler_lb_1_1- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 35 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 36 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 37 tnr7_ims_1_2- inner node disablement + // 38 tnr7_bc_1_2- inner node disablement + // 39 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 40 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 41 tnr7_blend_1_1- inner node disablement + // 42 odr_tnr_fp_yuvn_1_4- inner node disablement + // 43 tnr_scaler_fp_1_1- inner node disablement + // 44 image_upscaler_1_1- inner node disablement + // 45 cas_1_1- inner node disablement + // 46 odr_ofs_mp_1_4- inner node disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + // 49 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000067FC9D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E13E79F0F9CE8D9FF1FF + bitmaps.deb[0] = 0x8D9FF1FF; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC41EFF + bitmaps.teb[0] = 0x3FC41EFF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffDol3InputsWithGmvWithTnrNoSapOuterNode::setInnerNode( + InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 54; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[9].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[18].run_kernel.enable = 0; // wb_1_1 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000067FCBD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E13E79FFF9CE8D8001FF + bitmaps.deb[0] = 0x8D8001FF; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FF200FF + bitmaps.teb[0] = 0x3FF200FF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 29 fr_grid_1_0- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x420007D80; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C13E79FFF9CE8D9FF1FF + bitmaps.deb[0] = 0x8D9FF1FF; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FF61EFF + bitmaps.teb[0] = 0x2FF61EFF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 50 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x4000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C13E79FFF9CE8D8001FF + bitmaps.deb[0] = 0x8D8001FF; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FF200FF + bitmaps.teb[0] = 0x2FF200FF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 29 fr_grid_1_0- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 50 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x4000420007D80; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x000000000000213E79FFF9CE8D9FF1FF + bitmaps.deb[0] = 0x8D9FF1FF; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FF61EFF + bitmaps.teb[0] = 0x1FF61EFF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 51 b2i_ds_output_1_1- inner node disablement + // 52 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x18000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x000000000000213E79FFF9CE8D8001FF + bitmaps.deb[0] = 0x8D8001FF; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FF200FF + bitmaps.teb[0] = 0x1FF200FF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 29 fr_grid_1_0- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 51 b2i_ds_output_1_1- inner node disablement + // 52 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x18000420007D80; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000008002526E16 + bitmaps.rbm[0] = 0x2526E16; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019FF1FF + bitmaps.deb[0] = 0x19FF1FF; + // TEB - 0x0000000000041EFF + bitmaps.teb[0] = 0x41EFF; + // REB - 0x00000000000000000000000002007FF7 + bitmaps.reb[0] = 0x2007FF7; + + // Kernels disablement + // 17 gd_2_2- inner node disablement + // 18 wb_1_1- inner node disablement + // 19 bnlm_3_4- inner node disablement + // 20 bxt_demosaic- inner node disablement + // 21 vcsc_2_0_b- inner node disablement + // 22 gltm_2_0- inner node disablement + // 23 xnr_5_4- inner node disablement + // 24 vcr_3_1- inner node disablement + // 25 glim_2_0- inner node disablement + // 26 acm_1_2- inner node disablement + // 27 gammatm_v4- inner node disablement + // 28 csc_1_1- inner node disablement + // 30 b2i_ds_1_1- inner node disablement + // 31 lbff_crop_espa_1_4- inner node disablement + // 32 tnr7_spatial_1_1- inner node disablement + // 33 tnr_scaler_lb_1_1- inner node disablement + // 35 ifd_gmv_1_4- inner node disablement + // 36 gmv_statistics_1_1- inner node disablement + // 37 odr_gmv_feature_1_4- inner node disablement + // 38 odr_gmv_match_1_4- inner node disablement + // 39 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 40 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 41 tnr7_ims_1_2- inner node disablement + // 42 tnr7_bc_1_2- inner node disablement + // 43 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 44 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 45 tnr7_blend_1_1- inner node disablement + // 46 odr_tnr_fp_yuvn_1_4- inner node disablement + // 47 tnr_scaler_fp_1_1- inner node disablement + // 48 image_upscaler_1_1- inner node disablement + // 49 cas_1_1- inner node disablement + // 50 odr_ofs_mp_1_4- inner node disablement + // 51 b2i_ds_output_1_1- inner node disablement + // 52 odr_ofs_dp_1_4- inner node disablement + // 53 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFBDFFE0000; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 ifd_pipe_long_1_4- inner node disablement + // 2 ifd_pipe_short_smth_1_4- inner node disablement + // 3 dol_lite_1_2- inner node disablement + // 4 bxt_blc- inner node disablement + // 5 linearization2_0- inner node disablement + // 6 dpc_2_2- inner node disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 9 rgb_ir_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 ifd_lsc_1_4- inner node disablement + // 16 lsc_1_2- inner node disablement + // 17 gd_2_2- inner node disablement + // 18 wb_1_1- inner node disablement + // 19 bnlm_3_4- inner node disablement + // 20 bxt_demosaic- inner node disablement + // 21 vcsc_2_0_b- inner node disablement + // 22 gltm_2_0- inner node disablement + // 23 xnr_5_4- inner node disablement + // 24 vcr_3_1- inner node disablement + // 25 glim_2_0- inner node disablement + // 26 acm_1_2- inner node disablement + // 27 gammatm_v4- inner node disablement + // 28 csc_1_1- inner node disablement + // 29 fr_grid_1_0- inner node disablement + // 30 b2i_ds_1_1- inner node disablement + // 31 lbff_crop_espa_1_4- inner node disablement + // 32 tnr7_spatial_1_1- inner node disablement + // 33 tnr_scaler_lb_1_1- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 35 ifd_gmv_1_4- inner node disablement + // 36 gmv_statistics_1_1- inner node disablement + // 37 odr_gmv_feature_1_4- inner node disablement + // 38 odr_gmv_match_1_4- inner node disablement + // 39 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 40 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 41 tnr7_ims_1_2- inner node disablement + // 42 tnr7_bc_1_2- inner node disablement + // 43 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 44 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 45 tnr7_blend_1_1- inner node disablement + // 46 odr_tnr_fp_yuvn_1_4- inner node disablement + // 47 tnr_scaler_fp_1_1- inner node disablement + // 48 image_upscaler_1_1- inner node disablement + // 49 cas_1_1- inner node disablement + // 50 odr_ofs_mp_1_4- inner node disablement + // 51 b2i_ds_output_1_1- inner node disablement + // 52 odr_ofs_dp_1_4- inner node disablement + // 53 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000067FCBD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E13E79FFF9CE8D9FF1FF + bitmaps.deb[0] = 0x8D9FF1FF; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FF61EFF + bitmaps.teb[0] = 0x3FF61EFF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffRgbIrNoGmvNoTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 36; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = + nodeInnerOptions & (no3A | noIr | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x0000000000000000006400DD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x6400DD; + // DEB - 0x000000000000E1200000F9CE8F8001F1 + bitmaps.deb[0] = 0x8F8001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x000000003000409F + bitmaps.teb[0] = 0x3000409F; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 33 aestatistics_2_1- inner node disablement + // 34 odr_ae_1_4- inner node disablement + // 35 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xE03000390; + } else if (nodeRelevantInnerOptions == (noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000064009D503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1200000F9CE8D9FF1F1 + bitmaps.deb[0] = 0x8D9FF1F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x0000000030041E9F + bitmaps.teb[0] = 0x30041E9F; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x40; + } else if (nodeRelevantInnerOptions == (no3A | noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000064009D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1200000F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x000000003000009F + bitmaps.teb[0] = 0x3000009F; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 33 aestatistics_2_1- inner node disablement + // 34 odr_ae_1_4- inner node disablement + // 35 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xE030003D0; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x0000000000000000004400DD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x4400DD; + // DEB - 0x000000000000C1200000F9CE8F9FF1F1 + bitmaps.deb[0] = 0x8F9FF1F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x0000000020045E9F + bitmaps.teb[0] = 0x20045E9F; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 30 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x40000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x0000000000000000004400DD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x4400DD; + // DEB - 0x000000000000C1200000F9CE8F8001F1 + bitmaps.deb[0] = 0x8F8001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x000000002000409F + bitmaps.teb[0] = 0x2000409F; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 30 odr_ofs_mp_1_4- inner node disablement + // 33 aestatistics_2_1- inner node disablement + // 34 odr_ae_1_4- inner node disablement + // 35 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xE43000390; + } else if (nodeRelevantInnerOptions == (noMp | noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000044009D503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1200000F9CE8D9FF1F1 + bitmaps.deb[0] = 0x8D9FF1F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x0000000020041E9F + bitmaps.teb[0] = 0x20041E9F; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + // 30 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x40000040; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000044009D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1200000F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x000000002000009F + bitmaps.teb[0] = 0x2000009F; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 30 odr_ofs_mp_1_4- inner node disablement + // 33 aestatistics_2_1- inner node disablement + // 34 odr_ae_1_4- inner node disablement + // 35 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xE430003D0; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x0000000000000000002400DD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x2400DD; + // DEB - 0x00000000000021200000F9CE8F9FF1F1 + bitmaps.deb[0] = 0x8F9FF1F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x0000000010045E9F + bitmaps.teb[0] = 0x10045E9F; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 31 b2i_ds_output_1_1- inner node disablement + // 32 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x180000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x0000000000000000002400DD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x2400DD; + // DEB - 0x00000000000021200000F9CE8F8001F1 + bitmaps.deb[0] = 0x8F8001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x000000001000409F + bitmaps.teb[0] = 0x1000409F; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 31 b2i_ds_output_1_1- inner node disablement + // 32 odr_ofs_dp_1_4- inner node disablement + // 33 aestatistics_2_1- inner node disablement + // 34 odr_ae_1_4- inner node disablement + // 35 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xF83000390; + } else if (nodeRelevantInnerOptions == (noDp | noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000024009D503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021200000F9CE8D9FF1F1 + bitmaps.deb[0] = 0x8D9FF1F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x0000000010041E9F + bitmaps.teb[0] = 0x10041E9F; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + // 31 b2i_ds_output_1_1- inner node disablement + // 32 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x180000040; + } else if (nodeRelevantInnerOptions == (no3A | noDp | noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000024009D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021200000F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x000000001000009F + bitmaps.teb[0] = 0x1000009F; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 31 b2i_ds_output_1_1- inner node disablement + // 32 odr_ofs_dp_1_4- inner node disablement + // 33 aestatistics_2_1- inner node disablement + // 34 odr_ae_1_4- inner node disablement + // 35 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xF830003D0; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000004000206071 + bitmaps.rbm[0] = 0x206071; + bitmaps.rbm[1] = 0x40; + // DEB - 0x00000000000000000000000003871131 + bitmaps.deb[0] = 0x3871131; + // TEB - 0x0000000000045817 + bitmaps.teb[0] = 0x45817; + // REB - 0x0000000000000000000000000300118F + bitmaps.reb[0] = 0x300118F; + + // Kernels disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 bnlm_3_4- inner node disablement + // 15 bxt_demosaic- inner node disablement + // 16 vcsc_2_0_b- inner node disablement + // 17 gltm_2_0- inner node disablement + // 18 xnr_5_4- inner node disablement + // 19 vcr_3_1- inner node disablement + // 20 glim_2_0- inner node disablement + // 21 acm_1_2- inner node disablement + // 22 gammatm_v4- inner node disablement + // 23 csc_1_1- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 26 b2i_ds_1_1- inner node disablement + // 27 lbff_crop_espa_1_4- inner node disablement + // 28 image_upscaler_1_1- inner node disablement + // 29 cas_1_1- inner node disablement + // 30 odr_ofs_mp_1_4- inner node disablement + // 31 b2i_ds_output_1_1- inner node disablement + // 32 odr_ofs_dp_1_4- inner node disablement + // 33 aestatistics_2_1- inner node disablement + // 34 odr_ae_1_4- inner node disablement + // 35 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFC00; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000004000006011 + bitmaps.rbm[0] = 0x6011; + bitmaps.rbm[1] = 0x40; + // DEB - 0x00000000000000000000000003800131 + bitmaps.deb[0] = 0x3800131; + // TEB - 0x0000000000004017 + bitmaps.teb[0] = 0x4017; + // REB - 0x00000000000000000000000003000187 + bitmaps.reb[0] = 0x3000187; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 bnlm_3_4- inner node disablement + // 15 bxt_demosaic- inner node disablement + // 16 vcsc_2_0_b- inner node disablement + // 17 gltm_2_0- inner node disablement + // 18 xnr_5_4- inner node disablement + // 19 vcr_3_1- inner node disablement + // 20 glim_2_0- inner node disablement + // 21 acm_1_2- inner node disablement + // 22 gammatm_v4- inner node disablement + // 23 csc_1_1- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 26 b2i_ds_1_1- inner node disablement + // 27 lbff_crop_espa_1_4- inner node disablement + // 28 image_upscaler_1_1- inner node disablement + // 29 cas_1_1- inner node disablement + // 30 odr_ofs_mp_1_4- inner node disablement + // 31 b2i_ds_output_1_1- inner node disablement + // 32 odr_ofs_dp_1_4- inner node disablement + // 33 aestatistics_2_1- inner node disablement + // 34 odr_ae_1_4- inner node disablement + // 35 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFF90; + } else if (nodeRelevantInnerOptions == (noMp | noDp | noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000200061 + bitmaps.rbm[0] = 0x200061; + // DEB - 0x00000000000000000000000000071031 + bitmaps.deb[0] = 0x71031; + // TEB - 0x0000000000041817 + bitmaps.teb[0] = 0x41817; + // REB - 0x0000000000000000000000000000100F + bitmaps.reb[0] = 0x100F; + + // Kernels disablement + // 3 dpc_2_2- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 bnlm_3_4- inner node disablement + // 15 bxt_demosaic- inner node disablement + // 16 vcsc_2_0_b- inner node disablement + // 17 gltm_2_0- inner node disablement + // 18 xnr_5_4- inner node disablement + // 19 vcr_3_1- inner node disablement + // 20 glim_2_0- inner node disablement + // 21 acm_1_2- inner node disablement + // 22 gammatm_v4- inner node disablement + // 23 csc_1_1- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 26 b2i_ds_1_1- inner node disablement + // 27 lbff_crop_espa_1_4- inner node disablement + // 28 image_upscaler_1_1- inner node disablement + // 29 cas_1_1- inner node disablement + // 30 odr_ofs_mp_1_4- inner node disablement + // 31 b2i_ds_output_1_1- inner node disablement + // 32 odr_ofs_dp_1_4- inner node disablement + // 33 aestatistics_2_1- inner node disablement + // 34 odr_ae_1_4- inner node disablement + // 35 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFC68; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp | noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgbs_grid_1_1- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 bnlm_3_4- inner node disablement + // 15 bxt_demosaic- inner node disablement + // 16 vcsc_2_0_b- inner node disablement + // 17 gltm_2_0- inner node disablement + // 18 xnr_5_4- inner node disablement + // 19 vcr_3_1- inner node disablement + // 20 glim_2_0- inner node disablement + // 21 acm_1_2- inner node disablement + // 22 gammatm_v4- inner node disablement + // 23 csc_1_1- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 26 b2i_ds_1_1- inner node disablement + // 27 lbff_crop_espa_1_4- inner node disablement + // 28 image_upscaler_1_1- inner node disablement + // 29 cas_1_1- inner node disablement + // 30 odr_ofs_mp_1_4- inner node disablement + // 31 b2i_ds_output_1_1- inner node disablement + // 32 odr_ofs_dp_1_4- inner node disablement + // 33 aestatistics_2_1- inner node disablement + // 34 odr_ae_1_4- inner node disablement + // 35 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFF; + } else // default inner node + { + // RBM - 0x0000000000000000006400DD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x6400DD; + // DEB - 0x000000000000E1200000F9CE8F9FF1F1 + bitmaps.deb[0] = 0x8F9FF1F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x0000000030045E9F + bitmaps.teb[0] = 0x30045E9F; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffRgbIrIrNoGmvNoTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 32; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[1].run_kernel.enable = 0; // bxt_blc + nodeKernels.kernelList[2].run_kernel.enable = 0; // linearization2_0 + nodeKernels.kernelList[6].run_kernel.enable = 0; // wb_1_1 + nodeKernels.kernelList[8].run_kernel.enable = 0; // bxt_demosaic + nodeKernels.kernelList[14].run_kernel.enable = 0; // acm_1_2 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000064001D50010009 + bitmaps.rbm[0] = 0x50010009; + bitmaps.rbm[1] = 0x64001D; + // DEB - 0x000000000000E1200000F9CE8C0000F1 + bitmaps.deb[0] = 0x8C0000F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x000000003000009F + bitmaps.teb[0] = 0x3000009F; + // REB - 0x00000000000000000000001F10F60667 + bitmaps.reb[0] = 0x10F60667; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 17 rgbs_grid_1_1- inner node disablement + // 18 ccm_3a_2_0- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 27 odr_awb_std_1_4- inner node disablement + // 28 odr_awb_sat_1_4- inner node disablement + // 29 aestatistics_2_1- inner node disablement + // 30 odr_ae_1_4- inner node disablement + // 31 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xF80E0000; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000044001D501F0009 + bitmaps.rbm[0] = 0x501F0009; + bitmaps.rbm[1] = 0x44001D; + // DEB - 0x000000000000C1200000F9CE8C1BF0F1 + bitmaps.deb[0] = 0x8C1BF0F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x0000000020001E9F + bitmaps.teb[0] = 0x20001E9F; + // REB - 0x00000000000000000000001F10F67E67 + bitmaps.reb[0] = 0x10F67E67; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 24 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000044001D50010009 + bitmaps.rbm[0] = 0x50010009; + bitmaps.rbm[1] = 0x44001D; + // DEB - 0x000000000000C1200000F9CE8C0000F1 + bitmaps.deb[0] = 0x8C0000F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x000000002000009F + bitmaps.teb[0] = 0x2000009F; + // REB - 0x00000000000000000000001F10F60667 + bitmaps.reb[0] = 0x10F60667; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 17 rgbs_grid_1_1- inner node disablement + // 18 ccm_3a_2_0- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 24 odr_ofs_mp_1_4- inner node disablement + // 27 odr_awb_std_1_4- inner node disablement + // 28 odr_awb_sat_1_4- inner node disablement + // 29 aestatistics_2_1- inner node disablement + // 30 odr_ae_1_4- inner node disablement + // 31 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xF90E0000; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000024001D501F0009 + bitmaps.rbm[0] = 0x501F0009; + bitmaps.rbm[1] = 0x24001D; + // DEB - 0x00000000000021200000F9CE8C1BF0F1 + bitmaps.deb[0] = 0x8C1BF0F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x0000000010001E9F + bitmaps.teb[0] = 0x10001E9F; + // REB - 0x00000000000000000000001F10F67E67 + bitmaps.reb[0] = 0x10F67E67; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 25 b2i_ds_output_1_1- inner node disablement + // 26 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x6000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000024001D50010009 + bitmaps.rbm[0] = 0x50010009; + bitmaps.rbm[1] = 0x24001D; + // DEB - 0x00000000000021200000F9CE8C0000F1 + bitmaps.deb[0] = 0x8C0000F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x000000001000009F + bitmaps.teb[0] = 0x1000009F; + // REB - 0x00000000000000000000001F10F60667 + bitmaps.reb[0] = 0x10F60667; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 17 rgbs_grid_1_1- inner node disablement + // 18 ccm_3a_2_0- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 25 b2i_ds_output_1_1- inner node disablement + // 26 odr_ofs_dp_1_4- inner node disablement + // 27 odr_awb_std_1_4- inner node disablement + // 28 odr_awb_sat_1_4- inner node disablement + // 29 aestatistics_2_1- inner node disablement + // 30 odr_ae_1_4- inner node disablement + // 31 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFE0E0000; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000000001E0009 + bitmaps.rbm[0] = 0x1E0009; + // DEB - 0x000000000000000000000000001BF0F1 + bitmaps.deb[0] = 0x1BF0F1; + // TEB - 0x0000000000001E97 + bitmaps.teb[0] = 0x1E97; + // REB - 0x00000000000000000000000000007E67 + bitmaps.reb[0] = 0x7E67; + + // Kernels disablement + // 5 gd_2_2- inner node disablement + // 6 wb_1_1- inner node disablement + // 7 bnlm_3_4- inner node disablement + // 8 bxt_demosaic- inner node disablement + // 9 vcsc_2_0_b- inner node disablement + // 10 gltm_2_0- inner node disablement + // 11 xnr_5_4- inner node disablement + // 12 vcr_3_1- inner node disablement + // 13 glim_2_0- inner node disablement + // 14 acm_1_2- inner node disablement + // 15 gammatm_v4- inner node disablement + // 16 csc_1_1- inner node disablement + // 20 b2i_ds_1_1- inner node disablement + // 21 lbff_crop_espa_1_4- inner node disablement + // 22 image_upscaler_1_1- inner node disablement + // 23 cas_1_1- inner node disablement + // 24 odr_ofs_mp_1_4- inner node disablement + // 25 b2i_ds_output_1_1- inner node disablement + // 26 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7F1FFE0; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 ifd_lsc_1_4- inner node disablement + // 4 lsc_1_2- inner node disablement + // 5 gd_2_2- inner node disablement + // 6 wb_1_1- inner node disablement + // 7 bnlm_3_4- inner node disablement + // 8 bxt_demosaic- inner node disablement + // 9 vcsc_2_0_b- inner node disablement + // 10 gltm_2_0- inner node disablement + // 11 xnr_5_4- inner node disablement + // 12 vcr_3_1- inner node disablement + // 13 glim_2_0- inner node disablement + // 14 acm_1_2- inner node disablement + // 15 gammatm_v4- inner node disablement + // 16 csc_1_1- inner node disablement + // 17 rgbs_grid_1_1- inner node disablement + // 18 ccm_3a_2_0- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 20 b2i_ds_1_1- inner node disablement + // 21 lbff_crop_espa_1_4- inner node disablement + // 22 image_upscaler_1_1- inner node disablement + // 23 cas_1_1- inner node disablement + // 24 odr_ofs_mp_1_4- inner node disablement + // 25 b2i_ds_output_1_1- inner node disablement + // 26 odr_ofs_dp_1_4- inner node disablement + // 27 odr_awb_std_1_4- inner node disablement + // 28 odr_awb_sat_1_4- inner node disablement + // 29 aestatistics_2_1- inner node disablement + // 30 odr_ae_1_4- inner node disablement + // 31 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000064001D501F0009 + bitmaps.rbm[0] = 0x501F0009; + bitmaps.rbm[1] = 0x64001D; + // DEB - 0x000000000000E1200000F9CE8C1BF0F1 + bitmaps.deb[0] = 0x8C1BF0F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x0000000030001E9F + bitmaps.teb[0] = 0x30001E9F; + // REB - 0x00000000000000000000001F10F67E67 + bitmaps.reb[0] = 0x10F67E67; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffRgbIrWithGmvNoTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 40; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = + nodeInnerOptions & (no3A | noIr | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x0000000000000000006400FD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x6400FD; + // DEB - 0x000000000000E120000FF9CE8F8001F1 + bitmaps.deb[0] = 0x8F8001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x000000003032409F + bitmaps.teb[0] = 0x3032409F; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 33 aestatistics_2_1- inner node disablement + // 34 odr_ae_1_4- inner node disablement + // 35 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xE03000390; + } else if (nodeRelevantInnerOptions == (noIr)) { + // HW bitmaps + // RBM - 0x0000000000000000006400BD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E120000FF9CE8D9FF1F1 + bitmaps.deb[0] = 0x8D9FF1F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x0000000030361E9F + bitmaps.teb[0] = 0x30361E9F; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x40; + } else if (nodeRelevantInnerOptions == (no3A | noIr)) { + // HW bitmaps + // RBM - 0x0000000000000000006400BD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E120000FF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x000000003032009F + bitmaps.teb[0] = 0x3032009F; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 33 aestatistics_2_1- inner node disablement + // 34 odr_ae_1_4- inner node disablement + // 35 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xE030003D0; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x0000000000000000004400FD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x4400FD; + // DEB - 0x000000000000C120000FF9CE8F9FF1F1 + bitmaps.deb[0] = 0x8F9FF1F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x0000000020365E9F + bitmaps.teb[0] = 0x20365E9F; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 30 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x40000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x0000000000000000004400FD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x4400FD; + // DEB - 0x000000000000C120000FF9CE8F8001F1 + bitmaps.deb[0] = 0x8F8001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x000000002032409F + bitmaps.teb[0] = 0x2032409F; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 30 odr_ofs_mp_1_4- inner node disablement + // 33 aestatistics_2_1- inner node disablement + // 34 odr_ae_1_4- inner node disablement + // 35 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xE43000390; + } else if (nodeRelevantInnerOptions == (noMp | noIr)) { + // HW bitmaps + // RBM - 0x0000000000000000004400BD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C120000FF9CE8D9FF1F1 + bitmaps.deb[0] = 0x8D9FF1F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x0000000020361E9F + bitmaps.teb[0] = 0x20361E9F; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + // 30 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x40000040; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noIr)) { + // HW bitmaps + // RBM - 0x0000000000000000004400BD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C120000FF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x000000002032009F + bitmaps.teb[0] = 0x2032009F; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 30 odr_ofs_mp_1_4- inner node disablement + // 33 aestatistics_2_1- inner node disablement + // 34 odr_ae_1_4- inner node disablement + // 35 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xE430003D0; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x0000000000000000002400FD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x2400FD; + // DEB - 0x0000000000002120000FF9CE8F9FF1F1 + bitmaps.deb[0] = 0x8F9FF1F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x0000000010365E9F + bitmaps.teb[0] = 0x10365E9F; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 31 b2i_ds_output_1_1- inner node disablement + // 32 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x180000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x0000000000000000002400FD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x2400FD; + // DEB - 0x0000000000002120000FF9CE8F8001F1 + bitmaps.deb[0] = 0x8F8001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x000000001032409F + bitmaps.teb[0] = 0x1032409F; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 31 b2i_ds_output_1_1- inner node disablement + // 32 odr_ofs_dp_1_4- inner node disablement + // 33 aestatistics_2_1- inner node disablement + // 34 odr_ae_1_4- inner node disablement + // 35 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xF83000390; + } else if (nodeRelevantInnerOptions == (noDp | noIr)) { + // HW bitmaps + // RBM - 0x0000000000000000002400BD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x0000000000002120000FF9CE8D9FF1F1 + bitmaps.deb[0] = 0x8D9FF1F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x0000000010361E9F + bitmaps.teb[0] = 0x10361E9F; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + // 31 b2i_ds_output_1_1- inner node disablement + // 32 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x180000040; + } else if (nodeRelevantInnerOptions == (no3A | noDp | noIr)) { + // HW bitmaps + // RBM - 0x0000000000000000002400BD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x0000000000002120000FF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x000000001032009F + bitmaps.teb[0] = 0x1032009F; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 31 b2i_ds_output_1_1- inner node disablement + // 32 odr_ofs_dp_1_4- inner node disablement + // 33 aestatistics_2_1- inner node disablement + // 34 odr_ae_1_4- inner node disablement + // 35 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xF830003D0; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x0000000000000000000000C0003A6871 + bitmaps.rbm[0] = 0x3A6871; + bitmaps.rbm[1] = 0xC0; + // DEB - 0x000000000000000000000000039FF1F1 + bitmaps.deb[0] = 0x39FF1F1; + // TEB - 0x0000000000045E97 + bitmaps.teb[0] = 0x45E97; + // REB - 0x00000000000000000000000003007FEF + bitmaps.reb[0] = 0x3007FEF; + + // Kernels disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 bnlm_3_4- inner node disablement + // 15 bxt_demosaic- inner node disablement + // 16 vcsc_2_0_b- inner node disablement + // 17 gltm_2_0- inner node disablement + // 18 xnr_5_4- inner node disablement + // 19 vcr_3_1- inner node disablement + // 20 glim_2_0- inner node disablement + // 21 acm_1_2- inner node disablement + // 22 gammatm_v4- inner node disablement + // 23 csc_1_1- inner node disablement + // 26 b2i_ds_1_1- inner node disablement + // 27 lbff_crop_espa_1_4- inner node disablement + // 28 image_upscaler_1_1- inner node disablement + // 29 cas_1_1- inner node disablement + // 30 odr_ofs_mp_1_4- inner node disablement + // 31 b2i_ds_output_1_1- inner node disablement + // 32 odr_ofs_dp_1_4- inner node disablement + // 36 ifd_gmv_1_4- inner node disablement + // 37 gmv_statistics_1_1- inner node disablement + // 38 odr_gmv_feature_1_4- inner node disablement + // 39 odr_gmv_match_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xF1FCFFF000; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000004000006011 + bitmaps.rbm[0] = 0x6011; + bitmaps.rbm[1] = 0x40; + // DEB - 0x00000000000000000000000003800131 + bitmaps.deb[0] = 0x3800131; + // TEB - 0x0000000000004017 + bitmaps.teb[0] = 0x4017; + // REB - 0x00000000000000000000000003000187 + bitmaps.reb[0] = 0x3000187; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 bnlm_3_4- inner node disablement + // 15 bxt_demosaic- inner node disablement + // 16 vcsc_2_0_b- inner node disablement + // 17 gltm_2_0- inner node disablement + // 18 xnr_5_4- inner node disablement + // 19 vcr_3_1- inner node disablement + // 20 glim_2_0- inner node disablement + // 21 acm_1_2- inner node disablement + // 22 gammatm_v4- inner node disablement + // 23 csc_1_1- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 26 b2i_ds_1_1- inner node disablement + // 27 lbff_crop_espa_1_4- inner node disablement + // 28 image_upscaler_1_1- inner node disablement + // 29 cas_1_1- inner node disablement + // 30 odr_ofs_mp_1_4- inner node disablement + // 31 b2i_ds_output_1_1- inner node disablement + // 32 odr_ofs_dp_1_4- inner node disablement + // 33 aestatistics_2_1- inner node disablement + // 34 odr_ae_1_4- inner node disablement + // 35 odr_af_std_1_4- inner node disablement + // 36 ifd_gmv_1_4- inner node disablement + // 37 gmv_statistics_1_1- inner node disablement + // 38 odr_gmv_feature_1_4- inner node disablement + // 39 odr_gmv_match_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFF90; + } else if (nodeRelevantInnerOptions == (noMp | noDp | noIr)) { + // HW bitmaps + // RBM - 0x000000000000000000000080003A6871 + bitmaps.rbm[0] = 0x3A6871; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019FF1F1 + bitmaps.deb[0] = 0x19FF1F1; + // TEB - 0x0000000000041E97 + bitmaps.teb[0] = 0x41E97; + // REB - 0x00000000000000000000000003007FEF + bitmaps.reb[0] = 0x3007FEF; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 bnlm_3_4- inner node disablement + // 15 bxt_demosaic- inner node disablement + // 16 vcsc_2_0_b- inner node disablement + // 17 gltm_2_0- inner node disablement + // 18 xnr_5_4- inner node disablement + // 19 vcr_3_1- inner node disablement + // 20 glim_2_0- inner node disablement + // 21 acm_1_2- inner node disablement + // 22 gammatm_v4- inner node disablement + // 23 csc_1_1- inner node disablement + // 26 b2i_ds_1_1- inner node disablement + // 27 lbff_crop_espa_1_4- inner node disablement + // 28 image_upscaler_1_1- inner node disablement + // 29 cas_1_1- inner node disablement + // 30 odr_ofs_mp_1_4- inner node disablement + // 31 b2i_ds_output_1_1- inner node disablement + // 32 odr_ofs_dp_1_4- inner node disablement + // 36 ifd_gmv_1_4- inner node disablement + // 37 gmv_statistics_1_1- inner node disablement + // 38 odr_gmv_feature_1_4- inner node disablement + // 39 odr_gmv_match_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xF1FCFFF040; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp | noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgbs_grid_1_1- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 bnlm_3_4- inner node disablement + // 15 bxt_demosaic- inner node disablement + // 16 vcsc_2_0_b- inner node disablement + // 17 gltm_2_0- inner node disablement + // 18 xnr_5_4- inner node disablement + // 19 vcr_3_1- inner node disablement + // 20 glim_2_0- inner node disablement + // 21 acm_1_2- inner node disablement + // 22 gammatm_v4- inner node disablement + // 23 csc_1_1- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 26 b2i_ds_1_1- inner node disablement + // 27 lbff_crop_espa_1_4- inner node disablement + // 28 image_upscaler_1_1- inner node disablement + // 29 cas_1_1- inner node disablement + // 30 odr_ofs_mp_1_4- inner node disablement + // 31 b2i_ds_output_1_1- inner node disablement + // 32 odr_ofs_dp_1_4- inner node disablement + // 33 aestatistics_2_1- inner node disablement + // 34 odr_ae_1_4- inner node disablement + // 35 odr_af_std_1_4- inner node disablement + // 36 ifd_gmv_1_4- inner node disablement + // 37 gmv_statistics_1_1- inner node disablement + // 38 odr_gmv_feature_1_4- inner node disablement + // 39 odr_gmv_match_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x0000000000000000006400FD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x6400FD; + // DEB - 0x000000000000E120000FF9CE8F9FF1F1 + bitmaps.deb[0] = 0x8F9FF1F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x0000000030365E9F + bitmaps.teb[0] = 0x30365E9F; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffRgbIrNoGmvWithTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 48; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = + nodeInnerOptions & (no3A | noIr | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000067FCDD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x67FCDD; + // DEB - 0x000000000000E13E79F0F9CE8F8001F1 + bitmaps.deb[0] = 0x8F8001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC0409F + bitmaps.teb[0] = 0x3FC0409F; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1C3000390; + } else if (nodeRelevantInnerOptions == (noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000067FC9D503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E13E79F0F9CE8D9FF1F1 + bitmaps.deb[0] = 0x8D9FF1F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC41E9F + bitmaps.teb[0] = 0x3FC41E9F; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x40; + } else if (nodeRelevantInnerOptions == (no3A | noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000067FC9D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E13E79F0F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC0009F + bitmaps.teb[0] = 0x3FC0009F; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1C30003D0; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FCDD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x47FCDD; + // DEB - 0x000000000000C13E79F0F9CE8F9FF1F1 + bitmaps.deb[0] = 0x8F9FF1F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC45E9F + bitmaps.teb[0] = 0x2FC45E9F; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 44 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x100000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FCDD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x47FCDD; + // DEB - 0x000000000000C13E79F0F9CE8F8001F1 + bitmaps.deb[0] = 0x8F8001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC0409F + bitmaps.teb[0] = 0x2FC0409F; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + // 44 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1001C3000390; + } else if (nodeRelevantInnerOptions == (noMp | noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C13E79F0F9CE8D9FF1F1 + bitmaps.deb[0] = 0x8D9FF1F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC41E9F + bitmaps.teb[0] = 0x2FC41E9F; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + // 44 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x100000000040; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C13E79F0F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC0009F + bitmaps.teb[0] = 0x2FC0009F; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + // 44 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1001C30003D0; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FCDD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x27FCDD; + // DEB - 0x000000000000213E79F0F9CE8F9FF1F1 + bitmaps.deb[0] = 0x8F9FF1F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC45E9F + bitmaps.teb[0] = 0x1FC45E9F; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 45 b2i_ds_output_1_1- inner node disablement + // 46 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x600000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FCDD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x27FCDD; + // DEB - 0x000000000000213E79F0F9CE8F8001F1 + bitmaps.deb[0] = 0x8F8001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC0409F + bitmaps.teb[0] = 0x1FC0409F; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + // 45 b2i_ds_output_1_1- inner node disablement + // 46 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x6001C3000390; + } else if (nodeRelevantInnerOptions == (noDp | noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x000000000000213E79F0F9CE8D9FF1F1 + bitmaps.deb[0] = 0x8D9FF1F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC41E9F + bitmaps.teb[0] = 0x1FC41E9F; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + // 45 b2i_ds_output_1_1- inner node disablement + // 46 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x600000000040; + } else if (nodeRelevantInnerOptions == (no3A | noDp | noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x000000000000213E79F0F9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC0009F + bitmaps.teb[0] = 0x1FC0009F; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + // 45 b2i_ds_output_1_1- inner node disablement + // 46 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x6001C30003D0; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x0000000000000000000000C0003A6871 + bitmaps.rbm[0] = 0x3A6871; + bitmaps.rbm[1] = 0xC0; + // DEB - 0x000000000000000000000000039FF1F1 + bitmaps.deb[0] = 0x39FF1F1; + // TEB - 0x0000000000045E97 + bitmaps.teb[0] = 0x45E97; + // REB - 0x00000000000000000000000003007FEF + bitmaps.reb[0] = 0x3007FEF; + + // Kernels disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 bnlm_3_4- inner node disablement + // 15 bxt_demosaic- inner node disablement + // 16 vcsc_2_0_b- inner node disablement + // 17 gltm_2_0- inner node disablement + // 18 xnr_5_4- inner node disablement + // 19 vcr_3_1- inner node disablement + // 20 glim_2_0- inner node disablement + // 21 acm_1_2- inner node disablement + // 22 gammatm_v4- inner node disablement + // 23 csc_1_1- inner node disablement + // 26 b2i_ds_1_1- inner node disablement + // 27 lbff_crop_espa_1_4- inner node disablement + // 28 tnr7_spatial_1_1- inner node disablement + // 29 tnr_scaler_lb_1_1- inner node disablement + // 33 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 34 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 35 tnr7_ims_1_2- inner node disablement + // 36 tnr7_bc_1_2- inner node disablement + // 37 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 38 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 39 tnr7_blend_1_1- inner node disablement + // 40 odr_tnr_fp_yuvn_1_4- inner node disablement + // 41 tnr_scaler_fp_1_1- inner node disablement + // 42 image_upscaler_1_1- inner node disablement + // 43 cas_1_1- inner node disablement + // 44 odr_ofs_mp_1_4- inner node disablement + // 45 b2i_ds_output_1_1- inner node disablement + // 46 odr_ofs_dp_1_4- inner node disablement + // 47 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFE3CFFF000; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000004000006011 + bitmaps.rbm[0] = 0x6011; + bitmaps.rbm[1] = 0x40; + // DEB - 0x00000000000000000000000003800131 + bitmaps.deb[0] = 0x3800131; + // TEB - 0x0000000000004017 + bitmaps.teb[0] = 0x4017; + // REB - 0x00000000000000000000000003000187 + bitmaps.reb[0] = 0x3000187; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 bnlm_3_4- inner node disablement + // 15 bxt_demosaic- inner node disablement + // 16 vcsc_2_0_b- inner node disablement + // 17 gltm_2_0- inner node disablement + // 18 xnr_5_4- inner node disablement + // 19 vcr_3_1- inner node disablement + // 20 glim_2_0- inner node disablement + // 21 acm_1_2- inner node disablement + // 22 gammatm_v4- inner node disablement + // 23 csc_1_1- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 26 b2i_ds_1_1- inner node disablement + // 27 lbff_crop_espa_1_4- inner node disablement + // 28 tnr7_spatial_1_1- inner node disablement + // 29 tnr_scaler_lb_1_1- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + // 33 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 34 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 35 tnr7_ims_1_2- inner node disablement + // 36 tnr7_bc_1_2- inner node disablement + // 37 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 38 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 39 tnr7_blend_1_1- inner node disablement + // 40 odr_tnr_fp_yuvn_1_4- inner node disablement + // 41 tnr_scaler_fp_1_1- inner node disablement + // 42 image_upscaler_1_1- inner node disablement + // 43 cas_1_1- inner node disablement + // 44 odr_ofs_mp_1_4- inner node disablement + // 45 b2i_ds_output_1_1- inner node disablement + // 46 odr_ofs_dp_1_4- inner node disablement + // 47 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFF90; + } else if (nodeRelevantInnerOptions == (noMp | noDp | noIr)) { + // HW bitmaps + // RBM - 0x000000000000000000000080003A6871 + bitmaps.rbm[0] = 0x3A6871; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019FF1F1 + bitmaps.deb[0] = 0x19FF1F1; + // TEB - 0x0000000000041E97 + bitmaps.teb[0] = 0x41E97; + // REB - 0x00000000000000000000000003007FEF + bitmaps.reb[0] = 0x3007FEF; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 bnlm_3_4- inner node disablement + // 15 bxt_demosaic- inner node disablement + // 16 vcsc_2_0_b- inner node disablement + // 17 gltm_2_0- inner node disablement + // 18 xnr_5_4- inner node disablement + // 19 vcr_3_1- inner node disablement + // 20 glim_2_0- inner node disablement + // 21 acm_1_2- inner node disablement + // 22 gammatm_v4- inner node disablement + // 23 csc_1_1- inner node disablement + // 26 b2i_ds_1_1- inner node disablement + // 27 lbff_crop_espa_1_4- inner node disablement + // 28 tnr7_spatial_1_1- inner node disablement + // 29 tnr_scaler_lb_1_1- inner node disablement + // 33 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 34 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 35 tnr7_ims_1_2- inner node disablement + // 36 tnr7_bc_1_2- inner node disablement + // 37 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 38 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 39 tnr7_blend_1_1- inner node disablement + // 40 odr_tnr_fp_yuvn_1_4- inner node disablement + // 41 tnr_scaler_fp_1_1- inner node disablement + // 42 image_upscaler_1_1- inner node disablement + // 43 cas_1_1- inner node disablement + // 44 odr_ofs_mp_1_4- inner node disablement + // 45 b2i_ds_output_1_1- inner node disablement + // 46 odr_ofs_dp_1_4- inner node disablement + // 47 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFE3CFFF040; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp | noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgbs_grid_1_1- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 bnlm_3_4- inner node disablement + // 15 bxt_demosaic- inner node disablement + // 16 vcsc_2_0_b- inner node disablement + // 17 gltm_2_0- inner node disablement + // 18 xnr_5_4- inner node disablement + // 19 vcr_3_1- inner node disablement + // 20 glim_2_0- inner node disablement + // 21 acm_1_2- inner node disablement + // 22 gammatm_v4- inner node disablement + // 23 csc_1_1- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 26 b2i_ds_1_1- inner node disablement + // 27 lbff_crop_espa_1_4- inner node disablement + // 28 tnr7_spatial_1_1- inner node disablement + // 29 tnr_scaler_lb_1_1- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + // 33 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 34 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 35 tnr7_ims_1_2- inner node disablement + // 36 tnr7_bc_1_2- inner node disablement + // 37 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 38 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 39 tnr7_blend_1_1- inner node disablement + // 40 odr_tnr_fp_yuvn_1_4- inner node disablement + // 41 tnr_scaler_fp_1_1- inner node disablement + // 42 image_upscaler_1_1- inner node disablement + // 43 cas_1_1- inner node disablement + // 44 odr_ofs_mp_1_4- inner node disablement + // 45 b2i_ds_output_1_1- inner node disablement + // 46 odr_ofs_dp_1_4- inner node disablement + // 47 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000067FCDD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x67FCDD; + // DEB - 0x000000000000E13E79F0F9CE8F9FF1F1 + bitmaps.deb[0] = 0x8F9FF1F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC45E9F + bitmaps.teb[0] = 0x3FC45E9F; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffRgbIrIrNoGmvWithTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 44; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[1].run_kernel.enable = 0; // bxt_blc + nodeKernels.kernelList[2].run_kernel.enable = 0; // linearization2_0 + nodeKernels.kernelList[6].run_kernel.enable = 0; // wb_1_1 + nodeKernels.kernelList[8].run_kernel.enable = 0; // bxt_demosaic + nodeKernels.kernelList[14].run_kernel.enable = 0; // acm_1_2 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000067FC1D50010009 + bitmaps.rbm[0] = 0x50010009; + bitmaps.rbm[1] = 0x67FC1D; + // DEB - 0x000000000000E13E79F0F9CE8C0000F1 + bitmaps.deb[0] = 0x8C0000F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC0009F + bitmaps.teb[0] = 0x3FC0009F; + // REB - 0x00000000000000000000001FF0F60667 + bitmaps.reb[0] = 0xF0F60667; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 17 rgbs_grid_1_1- inner node disablement + // 18 ccm_3a_2_0- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 24 odr_awb_std_1_4- inner node disablement + // 25 odr_awb_sat_1_4- inner node disablement + // 26 aestatistics_2_1- inner node disablement + // 27 odr_ae_1_4- inner node disablement + // 28 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1F0E0000; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FC1D501F0009 + bitmaps.rbm[0] = 0x501F0009; + bitmaps.rbm[1] = 0x47FC1D; + // DEB - 0x000000000000C13E79F0F9CE8C1BF0F1 + bitmaps.deb[0] = 0x8C1BF0F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC01E9F + bitmaps.teb[0] = 0x2FC01E9F; + // REB - 0x00000000000000000000001FF0F67E67 + bitmaps.reb[0] = 0xF0F67E67; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 40 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x10000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FC1D50010009 + bitmaps.rbm[0] = 0x50010009; + bitmaps.rbm[1] = 0x47FC1D; + // DEB - 0x000000000000C13E79F0F9CE8C0000F1 + bitmaps.deb[0] = 0x8C0000F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC0009F + bitmaps.teb[0] = 0x2FC0009F; + // REB - 0x00000000000000000000001FF0F60667 + bitmaps.reb[0] = 0xF0F60667; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 17 rgbs_grid_1_1- inner node disablement + // 18 ccm_3a_2_0- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 24 odr_awb_std_1_4- inner node disablement + // 25 odr_awb_sat_1_4- inner node disablement + // 26 aestatistics_2_1- inner node disablement + // 27 odr_ae_1_4- inner node disablement + // 28 odr_af_std_1_4- inner node disablement + // 40 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1001F0E0000; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FC1D501F0009 + bitmaps.rbm[0] = 0x501F0009; + bitmaps.rbm[1] = 0x27FC1D; + // DEB - 0x000000000000213E79F0F9CE8C1BF0F1 + bitmaps.deb[0] = 0x8C1BF0F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC01E9F + bitmaps.teb[0] = 0x1FC01E9F; + // REB - 0x00000000000000000000001FF0F67E67 + bitmaps.reb[0] = 0xF0F67E67; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 41 b2i_ds_output_1_1- inner node disablement + // 42 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x60000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FC1D50010009 + bitmaps.rbm[0] = 0x50010009; + bitmaps.rbm[1] = 0x27FC1D; + // DEB - 0x000000000000213E79F0F9CE8C0000F1 + bitmaps.deb[0] = 0x8C0000F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC0009F + bitmaps.teb[0] = 0x1FC0009F; + // REB - 0x00000000000000000000001FF0F60667 + bitmaps.reb[0] = 0xF0F60667; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 17 rgbs_grid_1_1- inner node disablement + // 18 ccm_3a_2_0- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 24 odr_awb_std_1_4- inner node disablement + // 25 odr_awb_sat_1_4- inner node disablement + // 26 aestatistics_2_1- inner node disablement + // 27 odr_ae_1_4- inner node disablement + // 28 odr_af_std_1_4- inner node disablement + // 41 b2i_ds_output_1_1- inner node disablement + // 42 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x6001F0E0000; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000000001E0009 + bitmaps.rbm[0] = 0x1E0009; + // DEB - 0x000000000000000000000000001BF0F1 + bitmaps.deb[0] = 0x1BF0F1; + // TEB - 0x0000000000001E97 + bitmaps.teb[0] = 0x1E97; + // REB - 0x00000000000000000000000000007E67 + bitmaps.reb[0] = 0x7E67; + + // Kernels disablement + // 5 gd_2_2- inner node disablement + // 6 wb_1_1- inner node disablement + // 7 bnlm_3_4- inner node disablement + // 8 bxt_demosaic- inner node disablement + // 9 vcsc_2_0_b- inner node disablement + // 10 gltm_2_0- inner node disablement + // 11 xnr_5_4- inner node disablement + // 12 vcr_3_1- inner node disablement + // 13 glim_2_0- inner node disablement + // 14 acm_1_2- inner node disablement + // 15 gammatm_v4- inner node disablement + // 16 csc_1_1- inner node disablement + // 20 b2i_ds_1_1- inner node disablement + // 21 lbff_crop_espa_1_4- inner node disablement + // 22 tnr7_spatial_1_1- inner node disablement + // 23 tnr_scaler_lb_1_1- inner node disablement + // 29 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 30 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 31 tnr7_ims_1_2- inner node disablement + // 32 tnr7_bc_1_2- inner node disablement + // 33 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 34 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 35 tnr7_blend_1_1- inner node disablement + // 36 odr_tnr_fp_yuvn_1_4- inner node disablement + // 37 tnr_scaler_fp_1_1- inner node disablement + // 38 image_upscaler_1_1- inner node disablement + // 39 cas_1_1- inner node disablement + // 40 odr_ofs_mp_1_4- inner node disablement + // 41 b2i_ds_output_1_1- inner node disablement + // 42 odr_ofs_dp_1_4- inner node disablement + // 43 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFE0F1FFE0; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 ifd_lsc_1_4- inner node disablement + // 4 lsc_1_2- inner node disablement + // 5 gd_2_2- inner node disablement + // 6 wb_1_1- inner node disablement + // 7 bnlm_3_4- inner node disablement + // 8 bxt_demosaic- inner node disablement + // 9 vcsc_2_0_b- inner node disablement + // 10 gltm_2_0- inner node disablement + // 11 xnr_5_4- inner node disablement + // 12 vcr_3_1- inner node disablement + // 13 glim_2_0- inner node disablement + // 14 acm_1_2- inner node disablement + // 15 gammatm_v4- inner node disablement + // 16 csc_1_1- inner node disablement + // 17 rgbs_grid_1_1- inner node disablement + // 18 ccm_3a_2_0- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 20 b2i_ds_1_1- inner node disablement + // 21 lbff_crop_espa_1_4- inner node disablement + // 22 tnr7_spatial_1_1- inner node disablement + // 23 tnr_scaler_lb_1_1- inner node disablement + // 24 odr_awb_std_1_4- inner node disablement + // 25 odr_awb_sat_1_4- inner node disablement + // 26 aestatistics_2_1- inner node disablement + // 27 odr_ae_1_4- inner node disablement + // 28 odr_af_std_1_4- inner node disablement + // 29 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 30 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 31 tnr7_ims_1_2- inner node disablement + // 32 tnr7_bc_1_2- inner node disablement + // 33 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 34 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 35 tnr7_blend_1_1- inner node disablement + // 36 odr_tnr_fp_yuvn_1_4- inner node disablement + // 37 tnr_scaler_fp_1_1- inner node disablement + // 38 image_upscaler_1_1- inner node disablement + // 39 cas_1_1- inner node disablement + // 40 odr_ofs_mp_1_4- inner node disablement + // 41 b2i_ds_output_1_1- inner node disablement + // 42 odr_ofs_dp_1_4- inner node disablement + // 43 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000067FC1D501F0009 + bitmaps.rbm[0] = 0x501F0009; + bitmaps.rbm[1] = 0x67FC1D; + // DEB - 0x000000000000E13E79F0F9CE8C1BF0F1 + bitmaps.deb[0] = 0x8C1BF0F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC01E9F + bitmaps.teb[0] = 0x3FC01E9F; + // REB - 0x00000000000000000000001FF0F67E67 + bitmaps.reb[0] = 0xF0F67E67; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffRgbIrWithGmvWithTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 52; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = + nodeInnerOptions & (no3A | noIr | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000067FCFD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x67FCFD; + // DEB - 0x000000000000E13E79FFF9CE8F8001F1 + bitmaps.deb[0] = 0x8F8001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FF2409F + bitmaps.teb[0] = 0x3FF2409F; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1C3000390; + } else if (nodeRelevantInnerOptions == (noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000067FCBD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E13E79FFF9CE8D9FF1F1 + bitmaps.deb[0] = 0x8D9FF1F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FF61E9F + bitmaps.teb[0] = 0x3FF61E9F; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x40; + } else if (nodeRelevantInnerOptions == (no3A | noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000067FCBD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E13E79FFF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FF2009F + bitmaps.teb[0] = 0x3FF2009F; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1C30003D0; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FCFD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x47FCFD; + // DEB - 0x000000000000C13E79FFF9CE8F9FF1F1 + bitmaps.deb[0] = 0x8F9FF1F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FF65E9F + bitmaps.teb[0] = 0x2FF65E9F; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 48 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FCFD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x47FCFD; + // DEB - 0x000000000000C13E79FFF9CE8F8001F1 + bitmaps.deb[0] = 0x8F8001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FF2409F + bitmaps.teb[0] = 0x2FF2409F; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + // 48 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x10001C3000390; + } else if (nodeRelevantInnerOptions == (noMp | noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C13E79FFF9CE8D9FF1F1 + bitmaps.deb[0] = 0x8D9FF1F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FF61E9F + bitmaps.teb[0] = 0x2FF61E9F; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + // 48 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1000000000040; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C13E79FFF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FF2009F + bitmaps.teb[0] = 0x2FF2009F; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + // 48 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x10001C30003D0; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FCFD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x27FCFD; + // DEB - 0x000000000000213E79FFF9CE8F9FF1F1 + bitmaps.deb[0] = 0x8F9FF1F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FF65E9F + bitmaps.teb[0] = 0x1FF65E9F; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 49 b2i_ds_output_1_1- inner node disablement + // 50 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x6000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FCFD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x27FCFD; + // DEB - 0x000000000000213E79FFF9CE8F8001F1 + bitmaps.deb[0] = 0x8F8001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FF2409F + bitmaps.teb[0] = 0x1FF2409F; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + // 49 b2i_ds_output_1_1- inner node disablement + // 50 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x60001C3000390; + } else if (nodeRelevantInnerOptions == (noDp | noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x000000000000213E79FFF9CE8D9FF1F1 + bitmaps.deb[0] = 0x8D9FF1F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FF61E9F + bitmaps.teb[0] = 0x1FF61E9F; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + // 49 b2i_ds_output_1_1- inner node disablement + // 50 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x6000000000040; + } else if (nodeRelevantInnerOptions == (no3A | noDp | noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x000000000000213E79FFF9CE8D8001F1 + bitmaps.deb[0] = 0x8D8001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FF2009F + bitmaps.teb[0] = 0x1FF2009F; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + // 49 b2i_ds_output_1_1- inner node disablement + // 50 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x60001C30003D0; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x0000000000000000000000C0003A6871 + bitmaps.rbm[0] = 0x3A6871; + bitmaps.rbm[1] = 0xC0; + // DEB - 0x000000000000000000000000039FF1F1 + bitmaps.deb[0] = 0x39FF1F1; + // TEB - 0x0000000000045E97 + bitmaps.teb[0] = 0x45E97; + // REB - 0x00000000000000000000000003007FEF + bitmaps.reb[0] = 0x3007FEF; + + // Kernels disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 bnlm_3_4- inner node disablement + // 15 bxt_demosaic- inner node disablement + // 16 vcsc_2_0_b- inner node disablement + // 17 gltm_2_0- inner node disablement + // 18 xnr_5_4- inner node disablement + // 19 vcr_3_1- inner node disablement + // 20 glim_2_0- inner node disablement + // 21 acm_1_2- inner node disablement + // 22 gammatm_v4- inner node disablement + // 23 csc_1_1- inner node disablement + // 26 b2i_ds_1_1- inner node disablement + // 27 lbff_crop_espa_1_4- inner node disablement + // 28 tnr7_spatial_1_1- inner node disablement + // 29 tnr_scaler_lb_1_1- inner node disablement + // 33 ifd_gmv_1_4- inner node disablement + // 34 gmv_statistics_1_1- inner node disablement + // 35 odr_gmv_feature_1_4- inner node disablement + // 36 odr_gmv_match_1_4- inner node disablement + // 37 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 38 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 39 tnr7_ims_1_2- inner node disablement + // 40 tnr7_bc_1_2- inner node disablement + // 41 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 42 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 43 tnr7_blend_1_1- inner node disablement + // 44 odr_tnr_fp_yuvn_1_4- inner node disablement + // 45 tnr_scaler_fp_1_1- inner node disablement + // 46 image_upscaler_1_1- inner node disablement + // 47 cas_1_1- inner node disablement + // 48 odr_ofs_mp_1_4- inner node disablement + // 49 b2i_ds_output_1_1- inner node disablement + // 50 odr_ofs_dp_1_4- inner node disablement + // 51 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFE3CFFF000; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000004000006011 + bitmaps.rbm[0] = 0x6011; + bitmaps.rbm[1] = 0x40; + // DEB - 0x00000000000000000000000003800131 + bitmaps.deb[0] = 0x3800131; + // TEB - 0x0000000000004017 + bitmaps.teb[0] = 0x4017; + // REB - 0x00000000000000000000000003000187 + bitmaps.reb[0] = 0x3000187; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 bnlm_3_4- inner node disablement + // 15 bxt_demosaic- inner node disablement + // 16 vcsc_2_0_b- inner node disablement + // 17 gltm_2_0- inner node disablement + // 18 xnr_5_4- inner node disablement + // 19 vcr_3_1- inner node disablement + // 20 glim_2_0- inner node disablement + // 21 acm_1_2- inner node disablement + // 22 gammatm_v4- inner node disablement + // 23 csc_1_1- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 26 b2i_ds_1_1- inner node disablement + // 27 lbff_crop_espa_1_4- inner node disablement + // 28 tnr7_spatial_1_1- inner node disablement + // 29 tnr_scaler_lb_1_1- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + // 33 ifd_gmv_1_4- inner node disablement + // 34 gmv_statistics_1_1- inner node disablement + // 35 odr_gmv_feature_1_4- inner node disablement + // 36 odr_gmv_match_1_4- inner node disablement + // 37 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 38 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 39 tnr7_ims_1_2- inner node disablement + // 40 tnr7_bc_1_2- inner node disablement + // 41 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 42 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 43 tnr7_blend_1_1- inner node disablement + // 44 odr_tnr_fp_yuvn_1_4- inner node disablement + // 45 tnr_scaler_fp_1_1- inner node disablement + // 46 image_upscaler_1_1- inner node disablement + // 47 cas_1_1- inner node disablement + // 48 odr_ofs_mp_1_4- inner node disablement + // 49 b2i_ds_output_1_1- inner node disablement + // 50 odr_ofs_dp_1_4- inner node disablement + // 51 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFF90; + } else if (nodeRelevantInnerOptions == (noMp | noDp | noIr)) { + // HW bitmaps + // RBM - 0x000000000000000000000080003A6871 + bitmaps.rbm[0] = 0x3A6871; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019FF1F1 + bitmaps.deb[0] = 0x19FF1F1; + // TEB - 0x0000000000041E97 + bitmaps.teb[0] = 0x41E97; + // REB - 0x00000000000000000000000003007FEF + bitmaps.reb[0] = 0x3007FEF; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 bnlm_3_4- inner node disablement + // 15 bxt_demosaic- inner node disablement + // 16 vcsc_2_0_b- inner node disablement + // 17 gltm_2_0- inner node disablement + // 18 xnr_5_4- inner node disablement + // 19 vcr_3_1- inner node disablement + // 20 glim_2_0- inner node disablement + // 21 acm_1_2- inner node disablement + // 22 gammatm_v4- inner node disablement + // 23 csc_1_1- inner node disablement + // 26 b2i_ds_1_1- inner node disablement + // 27 lbff_crop_espa_1_4- inner node disablement + // 28 tnr7_spatial_1_1- inner node disablement + // 29 tnr_scaler_lb_1_1- inner node disablement + // 33 ifd_gmv_1_4- inner node disablement + // 34 gmv_statistics_1_1- inner node disablement + // 35 odr_gmv_feature_1_4- inner node disablement + // 36 odr_gmv_match_1_4- inner node disablement + // 37 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 38 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 39 tnr7_ims_1_2- inner node disablement + // 40 tnr7_bc_1_2- inner node disablement + // 41 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 42 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 43 tnr7_blend_1_1- inner node disablement + // 44 odr_tnr_fp_yuvn_1_4- inner node disablement + // 45 tnr_scaler_fp_1_1- inner node disablement + // 46 image_upscaler_1_1- inner node disablement + // 47 cas_1_1- inner node disablement + // 48 odr_ofs_mp_1_4- inner node disablement + // 49 b2i_ds_output_1_1- inner node disablement + // 50 odr_ofs_dp_1_4- inner node disablement + // 51 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFE3CFFF040; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp | noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgbs_grid_1_1- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 bnlm_3_4- inner node disablement + // 15 bxt_demosaic- inner node disablement + // 16 vcsc_2_0_b- inner node disablement + // 17 gltm_2_0- inner node disablement + // 18 xnr_5_4- inner node disablement + // 19 vcr_3_1- inner node disablement + // 20 glim_2_0- inner node disablement + // 21 acm_1_2- inner node disablement + // 22 gammatm_v4- inner node disablement + // 23 csc_1_1- inner node disablement + // 24 ccm_3a_2_0- inner node disablement + // 25 fr_grid_1_0- inner node disablement + // 26 b2i_ds_1_1- inner node disablement + // 27 lbff_crop_espa_1_4- inner node disablement + // 28 tnr7_spatial_1_1- inner node disablement + // 29 tnr_scaler_lb_1_1- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + // 33 ifd_gmv_1_4- inner node disablement + // 34 gmv_statistics_1_1- inner node disablement + // 35 odr_gmv_feature_1_4- inner node disablement + // 36 odr_gmv_match_1_4- inner node disablement + // 37 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 38 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 39 tnr7_ims_1_2- inner node disablement + // 40 tnr7_bc_1_2- inner node disablement + // 41 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 42 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 43 tnr7_blend_1_1- inner node disablement + // 44 odr_tnr_fp_yuvn_1_4- inner node disablement + // 45 tnr_scaler_fp_1_1- inner node disablement + // 46 image_upscaler_1_1- inner node disablement + // 47 cas_1_1- inner node disablement + // 48 odr_ofs_mp_1_4- inner node disablement + // 49 b2i_ds_output_1_1- inner node disablement + // 50 odr_ofs_dp_1_4- inner node disablement + // 51 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000067FCFD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x67FCFD; + // DEB - 0x000000000000E13E79FFF9CE8F9FF1F1 + bitmaps.deb[0] = 0x8F9FF1F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FF65E9F + bitmaps.teb[0] = 0x3FF65E9F; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffIrNoGmvNoTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 33; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[7].run_kernel.enable = 0; // wb_1_1 + nodeKernels.kernelList[9].run_kernel.enable = 0; // bxt_demosaic + nodeKernels.kernelList[15].run_kernel.enable = 0; // acm_1_2 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000064001D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x64001D; + // DEB - 0x000000000000E1200000F9CE8C0001F1 + bitmaps.deb[0] = 0x8C0001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x000000003000009F + bitmaps.teb[0] = 0x3000009F; + // REB - 0x00000000000000000000001F10F607E7 + bitmaps.reb[0] = 0x10F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 rgbs_grid_1_1- inner node disablement + // 19 ccm_3a_2_0- inner node disablement + // 20 fr_grid_1_0- inner node disablement + // 28 odr_awb_std_1_4- inner node disablement + // 29 odr_awb_sat_1_4- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1F01C0000; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000044001D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x44001D; + // DEB - 0x000000000000C1200000F9CE8C1BF1F1 + bitmaps.deb[0] = 0x8C1BF1F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x0000000020001E9F + bitmaps.teb[0] = 0x20001E9F; + // REB - 0x00000000000000000000001F10F67FE7 + bitmaps.reb[0] = 0x10F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 25 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x2000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000044001D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x44001D; + // DEB - 0x000000000000C1200000F9CE8C0001F1 + bitmaps.deb[0] = 0x8C0001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x000000002000009F + bitmaps.teb[0] = 0x2000009F; + // REB - 0x00000000000000000000001F10F607E7 + bitmaps.reb[0] = 0x10F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 rgbs_grid_1_1- inner node disablement + // 19 ccm_3a_2_0- inner node disablement + // 20 fr_grid_1_0- inner node disablement + // 25 odr_ofs_mp_1_4- inner node disablement + // 28 odr_awb_std_1_4- inner node disablement + // 29 odr_awb_sat_1_4- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1F21C0000; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000024001D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x24001D; + // DEB - 0x00000000000021200000F9CE8C1BF1F1 + bitmaps.deb[0] = 0x8C1BF1F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x0000000010001E9F + bitmaps.teb[0] = 0x10001E9F; + // REB - 0x00000000000000000000001F10F67FE7 + bitmaps.reb[0] = 0x10F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 26 b2i_ds_output_1_1- inner node disablement + // 27 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000024001D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x24001D; + // DEB - 0x00000000000021200000F9CE8C0001F1 + bitmaps.deb[0] = 0x8C0001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x000000001000009F + bitmaps.teb[0] = 0x1000009F; + // REB - 0x00000000000000000000001F10F607E7 + bitmaps.reb[0] = 0x10F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 rgbs_grid_1_1- inner node disablement + // 19 ccm_3a_2_0- inner node disablement + // 20 fr_grid_1_0- inner node disablement + // 26 b2i_ds_output_1_1- inner node disablement + // 27 odr_ofs_dp_1_4- inner node disablement + // 28 odr_awb_std_1_4- inner node disablement + // 29 odr_awb_sat_1_4- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FC1C0000; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000000001E9009 + bitmaps.rbm[0] = 0x1E9009; + // DEB - 0x000000000000000000000000001BF1F1 + bitmaps.deb[0] = 0x1BF1F1; + // TEB - 0x0000000000001E97 + bitmaps.teb[0] = 0x1E97; + // REB - 0x00000000000000000000000000007FE7 + bitmaps.reb[0] = 0x7FE7; + + // Kernels disablement + // 6 gd_2_2- inner node disablement + // 7 wb_1_1- inner node disablement + // 8 bnlm_3_4- inner node disablement + // 9 bxt_demosaic- inner node disablement + // 10 vcsc_2_0_b- inner node disablement + // 11 gltm_2_0- inner node disablement + // 12 xnr_5_4- inner node disablement + // 13 vcr_3_1- inner node disablement + // 14 glim_2_0- inner node disablement + // 15 acm_1_2- inner node disablement + // 16 gammatm_v4- inner node disablement + // 17 csc_1_1- inner node disablement + // 21 b2i_ds_1_1- inner node disablement + // 22 lbff_crop_espa_1_4- inner node disablement + // 23 image_upscaler_1_1- inner node disablement + // 24 cas_1_1- inner node disablement + // 25 odr_ofs_mp_1_4- inner node disablement + // 26 b2i_ds_output_1_1- inner node disablement + // 27 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFE3FFC0; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 ifd_lsc_1_4- inner node disablement + // 4 lsc_1_2- inner node disablement + // 5 dpc_2_2- inner node disablement + // 6 gd_2_2- inner node disablement + // 7 wb_1_1- inner node disablement + // 8 bnlm_3_4- inner node disablement + // 9 bxt_demosaic- inner node disablement + // 10 vcsc_2_0_b- inner node disablement + // 11 gltm_2_0- inner node disablement + // 12 xnr_5_4- inner node disablement + // 13 vcr_3_1- inner node disablement + // 14 glim_2_0- inner node disablement + // 15 acm_1_2- inner node disablement + // 16 gammatm_v4- inner node disablement + // 17 csc_1_1- inner node disablement + // 18 rgbs_grid_1_1- inner node disablement + // 19 ccm_3a_2_0- inner node disablement + // 20 fr_grid_1_0- inner node disablement + // 21 b2i_ds_1_1- inner node disablement + // 22 lbff_crop_espa_1_4- inner node disablement + // 23 image_upscaler_1_1- inner node disablement + // 24 cas_1_1- inner node disablement + // 25 odr_ofs_mp_1_4- inner node disablement + // 26 b2i_ds_output_1_1- inner node disablement + // 27 odr_ofs_dp_1_4- inner node disablement + // 28 odr_awb_std_1_4- inner node disablement + // 29 odr_awb_sat_1_4- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000064001D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x64001D; + // DEB - 0x000000000000E1200000F9CE8C1BF1F1 + bitmaps.deb[0] = 0x8C1BF1F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x0000000030001E9F + bitmaps.teb[0] = 0x30001E9F; + // REB - 0x00000000000000000000001F10F67FE7 + bitmaps.reb[0] = 0x10F67FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffIrWithGmvNoTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 37; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[7].run_kernel.enable = 0; // wb_1_1 + nodeKernels.kernelList[9].run_kernel.enable = 0; // bxt_demosaic + nodeKernels.kernelList[15].run_kernel.enable = 0; // acm_1_2 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000064003D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x64003D; + // DEB - 0x000000000000E120000FF9CE8C0001F1 + bitmaps.deb[0] = 0x8C0001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x000000003032009F + bitmaps.teb[0] = 0x3032009F; + // REB - 0x00000000000000000000001F10F607E7 + bitmaps.reb[0] = 0x10F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 rgbs_grid_1_1- inner node disablement + // 19 ccm_3a_2_0- inner node disablement + // 20 fr_grid_1_0- inner node disablement + // 28 odr_awb_std_1_4- inner node disablement + // 29 odr_awb_sat_1_4- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1F01C0000; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000044003D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x44003D; + // DEB - 0x000000000000C120000FF9CE8C1BF1F1 + bitmaps.deb[0] = 0x8C1BF1F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x0000000020321E9F + bitmaps.teb[0] = 0x20321E9F; + // REB - 0x00000000000000000000001F10F67FE7 + bitmaps.reb[0] = 0x10F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 25 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x2000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000044003D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x44003D; + // DEB - 0x000000000000C120000FF9CE8C0001F1 + bitmaps.deb[0] = 0x8C0001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x000000002032009F + bitmaps.teb[0] = 0x2032009F; + // REB - 0x00000000000000000000001F10F607E7 + bitmaps.reb[0] = 0x10F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 rgbs_grid_1_1- inner node disablement + // 19 ccm_3a_2_0- inner node disablement + // 20 fr_grid_1_0- inner node disablement + // 25 odr_ofs_mp_1_4- inner node disablement + // 28 odr_awb_std_1_4- inner node disablement + // 29 odr_awb_sat_1_4- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1F21C0000; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000024003D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x24003D; + // DEB - 0x0000000000002120000FF9CE8C1BF1F1 + bitmaps.deb[0] = 0x8C1BF1F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x0000000010321E9F + bitmaps.teb[0] = 0x10321E9F; + // REB - 0x00000000000000000000001F10F67FE7 + bitmaps.reb[0] = 0x10F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 26 b2i_ds_output_1_1- inner node disablement + // 27 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000024003D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x24003D; + // DEB - 0x0000000000002120000FF9CE8C0001F1 + bitmaps.deb[0] = 0x8C0001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x000000001032009F + bitmaps.teb[0] = 0x1032009F; + // REB - 0x00000000000000000000001F10F607E7 + bitmaps.reb[0] = 0x10F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 rgbs_grid_1_1- inner node disablement + // 19 ccm_3a_2_0- inner node disablement + // 20 fr_grid_1_0- inner node disablement + // 26 b2i_ds_output_1_1- inner node disablement + // 27 odr_ofs_dp_1_4- inner node disablement + // 28 odr_awb_std_1_4- inner node disablement + // 29 odr_awb_sat_1_4- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FC1C0000; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000000001E9009 + bitmaps.rbm[0] = 0x1E9009; + // DEB - 0x000000000000000000000000001BF1F1 + bitmaps.deb[0] = 0x1BF1F1; + // TEB - 0x0000000000001E97 + bitmaps.teb[0] = 0x1E97; + // REB - 0x00000000000000000000000000007FE7 + bitmaps.reb[0] = 0x7FE7; + + // Kernels disablement + // 6 gd_2_2- inner node disablement + // 7 wb_1_1- inner node disablement + // 8 bnlm_3_4- inner node disablement + // 9 bxt_demosaic- inner node disablement + // 10 vcsc_2_0_b- inner node disablement + // 11 gltm_2_0- inner node disablement + // 12 xnr_5_4- inner node disablement + // 13 vcr_3_1- inner node disablement + // 14 glim_2_0- inner node disablement + // 15 acm_1_2- inner node disablement + // 16 gammatm_v4- inner node disablement + // 17 csc_1_1- inner node disablement + // 21 b2i_ds_1_1- inner node disablement + // 22 lbff_crop_espa_1_4- inner node disablement + // 23 image_upscaler_1_1- inner node disablement + // 24 cas_1_1- inner node disablement + // 25 odr_ofs_mp_1_4- inner node disablement + // 26 b2i_ds_output_1_1- inner node disablement + // 27 odr_ofs_dp_1_4- inner node disablement + // 33 ifd_gmv_1_4- inner node disablement + // 34 gmv_statistics_1_1- inner node disablement + // 35 odr_gmv_feature_1_4- inner node disablement + // 36 odr_gmv_match_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1E0FE3FFC0; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 ifd_lsc_1_4- inner node disablement + // 4 lsc_1_2- inner node disablement + // 5 dpc_2_2- inner node disablement + // 6 gd_2_2- inner node disablement + // 7 wb_1_1- inner node disablement + // 8 bnlm_3_4- inner node disablement + // 9 bxt_demosaic- inner node disablement + // 10 vcsc_2_0_b- inner node disablement + // 11 gltm_2_0- inner node disablement + // 12 xnr_5_4- inner node disablement + // 13 vcr_3_1- inner node disablement + // 14 glim_2_0- inner node disablement + // 15 acm_1_2- inner node disablement + // 16 gammatm_v4- inner node disablement + // 17 csc_1_1- inner node disablement + // 18 rgbs_grid_1_1- inner node disablement + // 19 ccm_3a_2_0- inner node disablement + // 20 fr_grid_1_0- inner node disablement + // 21 b2i_ds_1_1- inner node disablement + // 22 lbff_crop_espa_1_4- inner node disablement + // 23 image_upscaler_1_1- inner node disablement + // 24 cas_1_1- inner node disablement + // 25 odr_ofs_mp_1_4- inner node disablement + // 26 b2i_ds_output_1_1- inner node disablement + // 27 odr_ofs_dp_1_4- inner node disablement + // 28 odr_awb_std_1_4- inner node disablement + // 29 odr_awb_sat_1_4- inner node disablement + // 30 aestatistics_2_1- inner node disablement + // 31 odr_ae_1_4- inner node disablement + // 32 odr_af_std_1_4- inner node disablement + // 33 ifd_gmv_1_4- inner node disablement + // 34 gmv_statistics_1_1- inner node disablement + // 35 odr_gmv_feature_1_4- inner node disablement + // 36 odr_gmv_match_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000064003D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x64003D; + // DEB - 0x000000000000E120000FF9CE8C1BF1F1 + bitmaps.deb[0] = 0x8C1BF1F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x0000000030321E9F + bitmaps.teb[0] = 0x30321E9F; + // REB - 0x00000000000000000000001F10F67FE7 + bitmaps.reb[0] = 0x10F67FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffIrNoGmvWithTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 45; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[7].run_kernel.enable = 0; // wb_1_1 + nodeKernels.kernelList[9].run_kernel.enable = 0; // bxt_demosaic + nodeKernels.kernelList[15].run_kernel.enable = 0; // acm_1_2 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000067FC1D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x67FC1D; + // DEB - 0x000000000000E13E79F0F9CE8C0001F1 + bitmaps.deb[0] = 0x8C0001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC0009F + bitmaps.teb[0] = 0x3FC0009F; + // REB - 0x00000000000000000000001FF0F607E7 + bitmaps.reb[0] = 0xF0F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 rgbs_grid_1_1- inner node disablement + // 19 ccm_3a_2_0- inner node disablement + // 20 fr_grid_1_0- inner node disablement + // 25 odr_awb_std_1_4- inner node disablement + // 26 odr_awb_sat_1_4- inner node disablement + // 27 aestatistics_2_1- inner node disablement + // 28 odr_ae_1_4- inner node disablement + // 29 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3E1C0000; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FC1D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x47FC1D; + // DEB - 0x000000000000C13E79F0F9CE8C1BF1F1 + bitmaps.deb[0] = 0x8C1BF1F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC01E9F + bitmaps.teb[0] = 0x2FC01E9F; + // REB - 0x00000000000000000000001FF0F67FE7 + bitmaps.reb[0] = 0xF0F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 41 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x20000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FC1D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x47FC1D; + // DEB - 0x000000000000C13E79F0F9CE8C0001F1 + bitmaps.deb[0] = 0x8C0001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC0009F + bitmaps.teb[0] = 0x2FC0009F; + // REB - 0x00000000000000000000001FF0F607E7 + bitmaps.reb[0] = 0xF0F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 rgbs_grid_1_1- inner node disablement + // 19 ccm_3a_2_0- inner node disablement + // 20 fr_grid_1_0- inner node disablement + // 25 odr_awb_std_1_4- inner node disablement + // 26 odr_awb_sat_1_4- inner node disablement + // 27 aestatistics_2_1- inner node disablement + // 28 odr_ae_1_4- inner node disablement + // 29 odr_af_std_1_4- inner node disablement + // 41 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x2003E1C0000; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FC1D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x27FC1D; + // DEB - 0x000000000000213E79F0F9CE8C1BF1F1 + bitmaps.deb[0] = 0x8C1BF1F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC01E9F + bitmaps.teb[0] = 0x1FC01E9F; + // REB - 0x00000000000000000000001FF0F67FE7 + bitmaps.reb[0] = 0xF0F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 42 b2i_ds_output_1_1- inner node disablement + // 43 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC0000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FC1D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x27FC1D; + // DEB - 0x000000000000213E79F0F9CE8C0001F1 + bitmaps.deb[0] = 0x8C0001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC0009F + bitmaps.teb[0] = 0x1FC0009F; + // REB - 0x00000000000000000000001FF0F607E7 + bitmaps.reb[0] = 0xF0F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 rgbs_grid_1_1- inner node disablement + // 19 ccm_3a_2_0- inner node disablement + // 20 fr_grid_1_0- inner node disablement + // 25 odr_awb_std_1_4- inner node disablement + // 26 odr_awb_sat_1_4- inner node disablement + // 27 aestatistics_2_1- inner node disablement + // 28 odr_ae_1_4- inner node disablement + // 29 odr_af_std_1_4- inner node disablement + // 42 b2i_ds_output_1_1- inner node disablement + // 43 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC003E1C0000; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000000001E9009 + bitmaps.rbm[0] = 0x1E9009; + // DEB - 0x000000000000000000000000001BF1F1 + bitmaps.deb[0] = 0x1BF1F1; + // TEB - 0x0000000000001E97 + bitmaps.teb[0] = 0x1E97; + // REB - 0x00000000000000000000000000007FE7 + bitmaps.reb[0] = 0x7FE7; + + // Kernels disablement + // 6 gd_2_2- inner node disablement + // 7 wb_1_1- inner node disablement + // 8 bnlm_3_4- inner node disablement + // 9 bxt_demosaic- inner node disablement + // 10 vcsc_2_0_b- inner node disablement + // 11 gltm_2_0- inner node disablement + // 12 xnr_5_4- inner node disablement + // 13 vcr_3_1- inner node disablement + // 14 glim_2_0- inner node disablement + // 15 acm_1_2- inner node disablement + // 16 gammatm_v4- inner node disablement + // 17 csc_1_1- inner node disablement + // 21 b2i_ds_1_1- inner node disablement + // 22 lbff_crop_espa_1_4- inner node disablement + // 23 tnr7_spatial_1_1- inner node disablement + // 24 tnr_scaler_lb_1_1- inner node disablement + // 30 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 31 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 32 tnr7_ims_1_2- inner node disablement + // 33 tnr7_bc_1_2- inner node disablement + // 34 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 35 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 36 tnr7_blend_1_1- inner node disablement + // 37 odr_tnr_fp_yuvn_1_4- inner node disablement + // 38 tnr_scaler_fp_1_1- inner node disablement + // 39 image_upscaler_1_1- inner node disablement + // 40 cas_1_1- inner node disablement + // 41 odr_ofs_mp_1_4- inner node disablement + // 42 b2i_ds_output_1_1- inner node disablement + // 43 odr_ofs_dp_1_4- inner node disablement + // 44 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFC1E3FFC0; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 ifd_lsc_1_4- inner node disablement + // 4 lsc_1_2- inner node disablement + // 5 dpc_2_2- inner node disablement + // 6 gd_2_2- inner node disablement + // 7 wb_1_1- inner node disablement + // 8 bnlm_3_4- inner node disablement + // 9 bxt_demosaic- inner node disablement + // 10 vcsc_2_0_b- inner node disablement + // 11 gltm_2_0- inner node disablement + // 12 xnr_5_4- inner node disablement + // 13 vcr_3_1- inner node disablement + // 14 glim_2_0- inner node disablement + // 15 acm_1_2- inner node disablement + // 16 gammatm_v4- inner node disablement + // 17 csc_1_1- inner node disablement + // 18 rgbs_grid_1_1- inner node disablement + // 19 ccm_3a_2_0- inner node disablement + // 20 fr_grid_1_0- inner node disablement + // 21 b2i_ds_1_1- inner node disablement + // 22 lbff_crop_espa_1_4- inner node disablement + // 23 tnr7_spatial_1_1- inner node disablement + // 24 tnr_scaler_lb_1_1- inner node disablement + // 25 odr_awb_std_1_4- inner node disablement + // 26 odr_awb_sat_1_4- inner node disablement + // 27 aestatistics_2_1- inner node disablement + // 28 odr_ae_1_4- inner node disablement + // 29 odr_af_std_1_4- inner node disablement + // 30 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 31 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 32 tnr7_ims_1_2- inner node disablement + // 33 tnr7_bc_1_2- inner node disablement + // 34 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 35 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 36 tnr7_blend_1_1- inner node disablement + // 37 odr_tnr_fp_yuvn_1_4- inner node disablement + // 38 tnr_scaler_fp_1_1- inner node disablement + // 39 image_upscaler_1_1- inner node disablement + // 40 cas_1_1- inner node disablement + // 41 odr_ofs_mp_1_4- inner node disablement + // 42 b2i_ds_output_1_1- inner node disablement + // 43 odr_ofs_dp_1_4- inner node disablement + // 44 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000067FC1D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x67FC1D; + // DEB - 0x000000000000E13E79F0F9CE8C1BF1F1 + bitmaps.deb[0] = 0x8C1BF1F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC01E9F + bitmaps.teb[0] = 0x3FC01E9F; + // REB - 0x00000000000000000000001FF0F67FE7 + bitmaps.reb[0] = 0xF0F67FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffIrWithGmvWithTnrNoSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 49; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[7].run_kernel.enable = 0; // wb_1_1 + nodeKernels.kernelList[9].run_kernel.enable = 0; // bxt_demosaic + nodeKernels.kernelList[15].run_kernel.enable = 0; // acm_1_2 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000067FC3D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x67FC3D; + // DEB - 0x000000000000E13E79FFF9CE8C0001F1 + bitmaps.deb[0] = 0x8C0001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FF2009F + bitmaps.teb[0] = 0x3FF2009F; + // REB - 0x00000000000000000000001FF0F607E7 + bitmaps.reb[0] = 0xF0F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 rgbs_grid_1_1- inner node disablement + // 19 ccm_3a_2_0- inner node disablement + // 20 fr_grid_1_0- inner node disablement + // 25 odr_awb_std_1_4- inner node disablement + // 26 odr_awb_sat_1_4- inner node disablement + // 27 aestatistics_2_1- inner node disablement + // 28 odr_ae_1_4- inner node disablement + // 29 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3E1C0000; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FC3D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x47FC3D; + // DEB - 0x000000000000C13E79FFF9CE8C1BF1F1 + bitmaps.deb[0] = 0x8C1BF1F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FF21E9F + bitmaps.teb[0] = 0x2FF21E9F; + // REB - 0x00000000000000000000001FF0F67FE7 + bitmaps.reb[0] = 0xF0F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 45 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x200000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FC3D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x47FC3D; + // DEB - 0x000000000000C13E79FFF9CE8C0001F1 + bitmaps.deb[0] = 0x8C0001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FF2009F + bitmaps.teb[0] = 0x2FF2009F; + // REB - 0x00000000000000000000001FF0F607E7 + bitmaps.reb[0] = 0xF0F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 rgbs_grid_1_1- inner node disablement + // 19 ccm_3a_2_0- inner node disablement + // 20 fr_grid_1_0- inner node disablement + // 25 odr_awb_std_1_4- inner node disablement + // 26 odr_awb_sat_1_4- inner node disablement + // 27 aestatistics_2_1- inner node disablement + // 28 odr_ae_1_4- inner node disablement + // 29 odr_af_std_1_4- inner node disablement + // 45 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x20003E1C0000; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FC3D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x27FC3D; + // DEB - 0x000000000000213E79FFF9CE8C1BF1F1 + bitmaps.deb[0] = 0x8C1BF1F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FF21E9F + bitmaps.teb[0] = 0x1FF21E9F; + // REB - 0x00000000000000000000001FF0F67FE7 + bitmaps.reb[0] = 0xF0F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 46 b2i_ds_output_1_1- inner node disablement + // 47 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC00000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FC3D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x27FC3D; + // DEB - 0x000000000000213E79FFF9CE8C0001F1 + bitmaps.deb[0] = 0x8C0001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FF2009F + bitmaps.teb[0] = 0x1FF2009F; + // REB - 0x00000000000000000000001FF0F607E7 + bitmaps.reb[0] = 0xF0F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 rgbs_grid_1_1- inner node disablement + // 19 ccm_3a_2_0- inner node disablement + // 20 fr_grid_1_0- inner node disablement + // 25 odr_awb_std_1_4- inner node disablement + // 26 odr_awb_sat_1_4- inner node disablement + // 27 aestatistics_2_1- inner node disablement + // 28 odr_ae_1_4- inner node disablement + // 29 odr_af_std_1_4- inner node disablement + // 46 b2i_ds_output_1_1- inner node disablement + // 47 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC0003E1C0000; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000000001E9009 + bitmaps.rbm[0] = 0x1E9009; + // DEB - 0x000000000000000000000000001BF1F1 + bitmaps.deb[0] = 0x1BF1F1; + // TEB - 0x0000000000001E97 + bitmaps.teb[0] = 0x1E97; + // REB - 0x00000000000000000000000000007FE7 + bitmaps.reb[0] = 0x7FE7; + + // Kernels disablement + // 6 gd_2_2- inner node disablement + // 7 wb_1_1- inner node disablement + // 8 bnlm_3_4- inner node disablement + // 9 bxt_demosaic- inner node disablement + // 10 vcsc_2_0_b- inner node disablement + // 11 gltm_2_0- inner node disablement + // 12 xnr_5_4- inner node disablement + // 13 vcr_3_1- inner node disablement + // 14 glim_2_0- inner node disablement + // 15 acm_1_2- inner node disablement + // 16 gammatm_v4- inner node disablement + // 17 csc_1_1- inner node disablement + // 21 b2i_ds_1_1- inner node disablement + // 22 lbff_crop_espa_1_4- inner node disablement + // 23 tnr7_spatial_1_1- inner node disablement + // 24 tnr_scaler_lb_1_1- inner node disablement + // 30 ifd_gmv_1_4- inner node disablement + // 31 gmv_statistics_1_1- inner node disablement + // 32 odr_gmv_feature_1_4- inner node disablement + // 33 odr_gmv_match_1_4- inner node disablement + // 34 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 35 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 36 tnr7_ims_1_2- inner node disablement + // 37 tnr7_bc_1_2- inner node disablement + // 38 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 39 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 40 tnr7_blend_1_1- inner node disablement + // 41 odr_tnr_fp_yuvn_1_4- inner node disablement + // 42 tnr_scaler_fp_1_1- inner node disablement + // 43 image_upscaler_1_1- inner node disablement + // 44 cas_1_1- inner node disablement + // 45 odr_ofs_mp_1_4- inner node disablement + // 46 b2i_ds_output_1_1- inner node disablement + // 47 odr_ofs_dp_1_4- inner node disablement + // 48 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFC1E3FFC0; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 ifd_lsc_1_4- inner node disablement + // 4 lsc_1_2- inner node disablement + // 5 dpc_2_2- inner node disablement + // 6 gd_2_2- inner node disablement + // 7 wb_1_1- inner node disablement + // 8 bnlm_3_4- inner node disablement + // 9 bxt_demosaic- inner node disablement + // 10 vcsc_2_0_b- inner node disablement + // 11 gltm_2_0- inner node disablement + // 12 xnr_5_4- inner node disablement + // 13 vcr_3_1- inner node disablement + // 14 glim_2_0- inner node disablement + // 15 acm_1_2- inner node disablement + // 16 gammatm_v4- inner node disablement + // 17 csc_1_1- inner node disablement + // 18 rgbs_grid_1_1- inner node disablement + // 19 ccm_3a_2_0- inner node disablement + // 20 fr_grid_1_0- inner node disablement + // 21 b2i_ds_1_1- inner node disablement + // 22 lbff_crop_espa_1_4- inner node disablement + // 23 tnr7_spatial_1_1- inner node disablement + // 24 tnr_scaler_lb_1_1- inner node disablement + // 25 odr_awb_std_1_4- inner node disablement + // 26 odr_awb_sat_1_4- inner node disablement + // 27 aestatistics_2_1- inner node disablement + // 28 odr_ae_1_4- inner node disablement + // 29 odr_af_std_1_4- inner node disablement + // 30 ifd_gmv_1_4- inner node disablement + // 31 gmv_statistics_1_1- inner node disablement + // 32 odr_gmv_feature_1_4- inner node disablement + // 33 odr_gmv_match_1_4- inner node disablement + // 34 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 35 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 36 tnr7_ims_1_2- inner node disablement + // 37 tnr7_bc_1_2- inner node disablement + // 38 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 39 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 40 tnr7_blend_1_1- inner node disablement + // 41 odr_tnr_fp_yuvn_1_4- inner node disablement + // 42 tnr_scaler_fp_1_1- inner node disablement + // 43 image_upscaler_1_1- inner node disablement + // 44 cas_1_1- inner node disablement + // 45 odr_ofs_mp_1_4- inner node disablement + // 46 b2i_ds_output_1_1- inner node disablement + // 47 odr_ofs_dp_1_4- inner node disablement + // 48 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000067FC3D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x67FC3D; + // DEB - 0x000000000000E13E79FFF9CE8C1BF1F1 + bitmaps.deb[0] = 0x8C1BF1F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FF21E9F + bitmaps.teb[0] = 0x3FF21E9F; + // REB - 0x00000000000000000000001FF0F67FE7 + bitmaps.reb[0] = 0xF0F67FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode::setInnerNode( + InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 39; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = + nodeInnerOptions & (no3A | noPdaf | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000064009D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1200000F9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x000000003008009F + bitmaps.teb[0] = 0x3008009F; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 30 odr_awb_std_1_4- inner node disablement + // 31 odr_awb_sat_1_4- inner node disablement + // 32 aestatistics_2_1- inner node disablement + // 33 odr_ae_1_4- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FC0700000; + } else if (nodeRelevantInnerOptions == (noPdaf)) { + // HW bitmaps + // RBM - 0x00000000000000000064009D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1200000F9CE8DBBF1F1 + bitmaps.deb[0] = 0x8DBBF1F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x0000000030081E9F + bitmaps.teb[0] = 0x30081E9F; + // REB - 0x00000000000000000000001F12F6FFE7 + bitmaps.reb[0] = 0x12F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7800000000; + } else if (nodeRelevantInnerOptions == (no3A | noPdaf)) { + // HW bitmaps + // RBM - 0x00000000000000000064009D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1200000F9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x000000003008009F + bitmaps.teb[0] = 0x3008009F; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 30 odr_awb_std_1_4- inner node disablement + // 31 odr_awb_sat_1_4- inner node disablement + // 32 aestatistics_2_1- inner node disablement + // 33 odr_ae_1_4- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FC0700000; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000044019D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x44019D; + // DEB - 0x000000000000C1200000F9CE8DFBFFF1 + bitmaps.deb[0] = 0x8DFBFFF1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x0000000020083F9F + bitmaps.teb[0] = 0x20083F9F; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 27 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x8000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000044009D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1200000F9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x000000002008009F + bitmaps.teb[0] = 0x2008009F; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 27 odr_ofs_mp_1_4- inner node disablement + // 30 odr_awb_std_1_4- inner node disablement + // 31 odr_awb_sat_1_4- inner node disablement + // 32 aestatistics_2_1- inner node disablement + // 33 odr_ae_1_4- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FC8700000; + } else if (nodeRelevantInnerOptions == (noPdaf | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000044009D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1200000F9CE8DBBF1F1 + bitmaps.deb[0] = 0x8DBBF1F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x0000000020081E9F + bitmaps.teb[0] = 0x20081E9F; + // REB - 0x00000000000000000000001F12F6FFE7 + bitmaps.reb[0] = 0x12F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 27 odr_ofs_mp_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7808000000; + } else if (nodeRelevantInnerOptions == (no3A | noPdaf | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000044009D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1200000F9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x000000002008009F + bitmaps.teb[0] = 0x2008009F; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 27 odr_ofs_mp_1_4- inner node disablement + // 30 odr_awb_std_1_4- inner node disablement + // 31 odr_awb_sat_1_4- inner node disablement + // 32 aestatistics_2_1- inner node disablement + // 33 odr_ae_1_4- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FC8700000; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000024019D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x24019D; + // DEB - 0x00000000000021200000F9CE8DFBFFF1 + bitmaps.deb[0] = 0x8DFBFFF1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x0000000010083F9F + bitmaps.teb[0] = 0x10083F9F; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 28 b2i_ds_output_1_1- inner node disablement + // 29 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x30000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000024009D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021200000F9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x000000001008009F + bitmaps.teb[0] = 0x1008009F; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 28 b2i_ds_output_1_1- inner node disablement + // 29 odr_ofs_dp_1_4- inner node disablement + // 30 odr_awb_std_1_4- inner node disablement + // 31 odr_awb_sat_1_4- inner node disablement + // 32 aestatistics_2_1- inner node disablement + // 33 odr_ae_1_4- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FF0700000; + } else if (nodeRelevantInnerOptions == (noPdaf | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000024009D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021200000F9CE8DBBF1F1 + bitmaps.deb[0] = 0x8DBBF1F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x0000000010081E9F + bitmaps.teb[0] = 0x10081E9F; + // REB - 0x00000000000000000000001F12F6FFE7 + bitmaps.reb[0] = 0x12F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 28 b2i_ds_output_1_1- inner node disablement + // 29 odr_ofs_dp_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7830000000; + } else if (nodeRelevantInnerOptions == (no3A | noPdaf | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000024009D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021200000F9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x000000001008009F + bitmaps.teb[0] = 0x1008009F; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 28 b2i_ds_output_1_1- inner node disablement + // 29 odr_ofs_dp_1_4- inner node disablement + // 30 odr_awb_std_1_4- inner node disablement + // 31 odr_awb_sat_1_4- inner node disablement + // 32 aestatistics_2_1- inner node disablement + // 33 odr_ae_1_4- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FF0700000; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000180041E6811 + bitmaps.rbm[0] = 0x41E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001FBFFF1 + bitmaps.deb[0] = 0x1FBFFF1; + // TEB - 0x0000000000083F97 + bitmaps.teb[0] = 0x83F97; + // REB - 0x0000000000000000000000000601FFE7 + bitmaps.reb[0] = 0x601FFE7; + + // Kernels disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 bnlm_3_4- inner node disablement + // 11 bxt_demosaic- inner node disablement + // 12 vcsc_2_0_b- inner node disablement + // 13 gltm_2_0- inner node disablement + // 14 xnr_5_4- inner node disablement + // 15 vcr_3_1- inner node disablement + // 16 glim_2_0- inner node disablement + // 17 acm_1_2- inner node disablement + // 18 gammatm_v4- inner node disablement + // 19 csc_1_1- inner node disablement + // 23 b2i_ds_1_1- inner node disablement + // 24 lbff_crop_espa_1_4- inner node disablement + // 25 image_upscaler_1_1- inner node disablement + // 26 cas_1_1- inner node disablement + // 27 odr_ofs_mp_1_4- inner node disablement + // 28 b2i_ds_output_1_1- inner node disablement + // 29 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3F8FFF00; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 odr_dpc_pdaf_1_4- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 ifd_lsc_1_4- inner node disablement + // 7 lsc_1_2- inner node disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 bnlm_3_4- inner node disablement + // 11 bxt_demosaic- inner node disablement + // 12 vcsc_2_0_b- inner node disablement + // 13 gltm_2_0- inner node disablement + // 14 xnr_5_4- inner node disablement + // 15 vcr_3_1- inner node disablement + // 16 glim_2_0- inner node disablement + // 17 acm_1_2- inner node disablement + // 18 gammatm_v4- inner node disablement + // 19 csc_1_1- inner node disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 23 b2i_ds_1_1- inner node disablement + // 24 lbff_crop_espa_1_4- inner node disablement + // 25 image_upscaler_1_1- inner node disablement + // 26 cas_1_1- inner node disablement + // 27 odr_ofs_mp_1_4- inner node disablement + // 28 b2i_ds_output_1_1- inner node disablement + // 29 odr_ofs_dp_1_4- inner node disablement + // 30 odr_awb_std_1_4- inner node disablement + // 31 odr_awb_sat_1_4- inner node disablement + // 32 aestatistics_2_1- inner node disablement + // 33 odr_ae_1_4- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFFFF; + } else if (nodeRelevantInnerOptions == (noPdaf | noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000080041E6811 + bitmaps.rbm[0] = 0x41E6811; + bitmaps.rbm[1] = 0x80; + // DEB - 0x00000000000000000000000001BBF1F1 + bitmaps.deb[0] = 0x1BBF1F1; + // TEB - 0x0000000000081E97 + bitmaps.teb[0] = 0x81E97; + // REB - 0x0000000000000000000000000200FFE7 + bitmaps.reb[0] = 0x200FFE7; + + // Kernels disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 bnlm_3_4- inner node disablement + // 11 bxt_demosaic- inner node disablement + // 12 vcsc_2_0_b- inner node disablement + // 13 gltm_2_0- inner node disablement + // 14 xnr_5_4- inner node disablement + // 15 vcr_3_1- inner node disablement + // 16 glim_2_0- inner node disablement + // 17 acm_1_2- inner node disablement + // 18 gammatm_v4- inner node disablement + // 19 csc_1_1- inner node disablement + // 23 b2i_ds_1_1- inner node disablement + // 24 lbff_crop_espa_1_4- inner node disablement + // 25 image_upscaler_1_1- inner node disablement + // 26 cas_1_1- inner node disablement + // 27 odr_ofs_mp_1_4- inner node disablement + // 28 b2i_ds_output_1_1- inner node disablement + // 29 odr_ofs_dp_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x783F8FFF00; + } else if (nodeRelevantInnerOptions == (no3A | noPdaf | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 odr_dpc_pdaf_1_4- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 ifd_lsc_1_4- inner node disablement + // 7 lsc_1_2- inner node disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 bnlm_3_4- inner node disablement + // 11 bxt_demosaic- inner node disablement + // 12 vcsc_2_0_b- inner node disablement + // 13 gltm_2_0- inner node disablement + // 14 xnr_5_4- inner node disablement + // 15 vcr_3_1- inner node disablement + // 16 glim_2_0- inner node disablement + // 17 acm_1_2- inner node disablement + // 18 gammatm_v4- inner node disablement + // 19 csc_1_1- inner node disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 23 b2i_ds_1_1- inner node disablement + // 24 lbff_crop_espa_1_4- inner node disablement + // 25 image_upscaler_1_1- inner node disablement + // 26 cas_1_1- inner node disablement + // 27 odr_ofs_mp_1_4- inner node disablement + // 28 b2i_ds_output_1_1- inner node disablement + // 29 odr_ofs_dp_1_4- inner node disablement + // 30 odr_awb_std_1_4- inner node disablement + // 31 odr_awb_sat_1_4- inner node disablement + // 32 aestatistics_2_1- inner node disablement + // 33 odr_ae_1_4- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000064019D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x64019D; + // DEB - 0x000000000000E1200000F9CE8DFBFFF1 + bitmaps.deb[0] = 0x8DFBFFF1; + bitmaps.deb[1] = 0xF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x0000000030083F9F + bitmaps.teb[0] = 0x30083F9F; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode::setInnerNode( + InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 43; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = + nodeInnerOptions & (no3A | noPdaf | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x0000000000000000006400BD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E120000FF9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x00000000303A009F + bitmaps.teb[0] = 0x303A009F; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 30 odr_awb_std_1_4- inner node disablement + // 31 odr_awb_sat_1_4- inner node disablement + // 32 aestatistics_2_1- inner node disablement + // 33 odr_ae_1_4- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FC0700000; + } else if (nodeRelevantInnerOptions == (noPdaf)) { + // HW bitmaps + // RBM - 0x0000000000000000006400BD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E120000FF9CE8DBBF1F1 + bitmaps.deb[0] = 0x8DBBF1F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x00000000303A1E9F + bitmaps.teb[0] = 0x303A1E9F; + // REB - 0x00000000000000000000001F12F6FFE7 + bitmaps.reb[0] = 0x12F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7800000000; + } else if (nodeRelevantInnerOptions == (no3A | noPdaf)) { + // HW bitmaps + // RBM - 0x0000000000000000006400BD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E120000FF9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x00000000303A009F + bitmaps.teb[0] = 0x303A009F; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 30 odr_awb_std_1_4- inner node disablement + // 31 odr_awb_sat_1_4- inner node disablement + // 32 aestatistics_2_1- inner node disablement + // 33 odr_ae_1_4- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FC0700000; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x0000000000000000004401BD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x4401BD; + // DEB - 0x000000000000C120000FF9CE8DFBFFF1 + bitmaps.deb[0] = 0x8DFBFFF1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x00000000203A3F9F + bitmaps.teb[0] = 0x203A3F9F; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 27 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x8000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x0000000000000000004400BD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C120000FF9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x00000000203A009F + bitmaps.teb[0] = 0x203A009F; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 27 odr_ofs_mp_1_4- inner node disablement + // 30 odr_awb_std_1_4- inner node disablement + // 31 odr_awb_sat_1_4- inner node disablement + // 32 aestatistics_2_1- inner node disablement + // 33 odr_ae_1_4- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FC8700000; + } else if (nodeRelevantInnerOptions == (noPdaf | noMp)) { + // HW bitmaps + // RBM - 0x0000000000000000004400BD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C120000FF9CE8DBBF1F1 + bitmaps.deb[0] = 0x8DBBF1F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x00000000203A1E9F + bitmaps.teb[0] = 0x203A1E9F; + // REB - 0x00000000000000000000001F12F6FFE7 + bitmaps.reb[0] = 0x12F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 27 odr_ofs_mp_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7808000000; + } else if (nodeRelevantInnerOptions == (no3A | noPdaf | noMp)) { + // HW bitmaps + // RBM - 0x0000000000000000004400BD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C120000FF9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xC120; + // TEB - 0x00000000203A009F + bitmaps.teb[0] = 0x203A009F; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 27 odr_ofs_mp_1_4- inner node disablement + // 30 odr_awb_std_1_4- inner node disablement + // 31 odr_awb_sat_1_4- inner node disablement + // 32 aestatistics_2_1- inner node disablement + // 33 odr_ae_1_4- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FC8700000; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x0000000000000000002401BD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x2401BD; + // DEB - 0x0000000000002120000FF9CE8DFBFFF1 + bitmaps.deb[0] = 0x8DFBFFF1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x00000000103A3F9F + bitmaps.teb[0] = 0x103A3F9F; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 28 b2i_ds_output_1_1- inner node disablement + // 29 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x30000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x0000000000000000002400BD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x0000000000002120000FF9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x00000000103A009F + bitmaps.teb[0] = 0x103A009F; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 28 b2i_ds_output_1_1- inner node disablement + // 29 odr_ofs_dp_1_4- inner node disablement + // 30 odr_awb_std_1_4- inner node disablement + // 31 odr_awb_sat_1_4- inner node disablement + // 32 aestatistics_2_1- inner node disablement + // 33 odr_ae_1_4- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FF0700000; + } else if (nodeRelevantInnerOptions == (noPdaf | noDp)) { + // HW bitmaps + // RBM - 0x0000000000000000002400BD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x0000000000002120000FF9CE8DBBF1F1 + bitmaps.deb[0] = 0x8DBBF1F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x00000000103A1E9F + bitmaps.teb[0] = 0x103A1E9F; + // REB - 0x00000000000000000000001F12F6FFE7 + bitmaps.reb[0] = 0x12F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 28 b2i_ds_output_1_1- inner node disablement + // 29 odr_ofs_dp_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7830000000; + } else if (nodeRelevantInnerOptions == (no3A | noPdaf | noDp)) { + // HW bitmaps + // RBM - 0x0000000000000000002400BD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x0000000000002120000FF9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0x2120; + // TEB - 0x00000000103A009F + bitmaps.teb[0] = 0x103A009F; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 28 b2i_ds_output_1_1- inner node disablement + // 29 odr_ofs_dp_1_4- inner node disablement + // 30 odr_awb_std_1_4- inner node disablement + // 31 odr_awb_sat_1_4- inner node disablement + // 32 aestatistics_2_1- inner node disablement + // 33 odr_ae_1_4- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FF0700000; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000180041E6811 + bitmaps.rbm[0] = 0x41E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001FBFFF1 + bitmaps.deb[0] = 0x1FBFFF1; + // TEB - 0x0000000000083F97 + bitmaps.teb[0] = 0x83F97; + // REB - 0x0000000000000000000000000601FFE7 + bitmaps.reb[0] = 0x601FFE7; + + // Kernels disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 bnlm_3_4- inner node disablement + // 11 bxt_demosaic- inner node disablement + // 12 vcsc_2_0_b- inner node disablement + // 13 gltm_2_0- inner node disablement + // 14 xnr_5_4- inner node disablement + // 15 vcr_3_1- inner node disablement + // 16 glim_2_0- inner node disablement + // 17 acm_1_2- inner node disablement + // 18 gammatm_v4- inner node disablement + // 19 csc_1_1- inner node disablement + // 23 b2i_ds_1_1- inner node disablement + // 24 lbff_crop_espa_1_4- inner node disablement + // 25 image_upscaler_1_1- inner node disablement + // 26 cas_1_1- inner node disablement + // 27 odr_ofs_mp_1_4- inner node disablement + // 28 b2i_ds_output_1_1- inner node disablement + // 29 odr_ofs_dp_1_4- inner node disablement + // 39 ifd_gmv_1_4- inner node disablement + // 40 gmv_statistics_1_1- inner node disablement + // 41 odr_gmv_feature_1_4- inner node disablement + // 42 odr_gmv_match_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7803F8FFF00; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 odr_dpc_pdaf_1_4- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 ifd_lsc_1_4- inner node disablement + // 7 lsc_1_2- inner node disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 bnlm_3_4- inner node disablement + // 11 bxt_demosaic- inner node disablement + // 12 vcsc_2_0_b- inner node disablement + // 13 gltm_2_0- inner node disablement + // 14 xnr_5_4- inner node disablement + // 15 vcr_3_1- inner node disablement + // 16 glim_2_0- inner node disablement + // 17 acm_1_2- inner node disablement + // 18 gammatm_v4- inner node disablement + // 19 csc_1_1- inner node disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 23 b2i_ds_1_1- inner node disablement + // 24 lbff_crop_espa_1_4- inner node disablement + // 25 image_upscaler_1_1- inner node disablement + // 26 cas_1_1- inner node disablement + // 27 odr_ofs_mp_1_4- inner node disablement + // 28 b2i_ds_output_1_1- inner node disablement + // 29 odr_ofs_dp_1_4- inner node disablement + // 30 odr_awb_std_1_4- inner node disablement + // 31 odr_awb_sat_1_4- inner node disablement + // 32 aestatistics_2_1- inner node disablement + // 33 odr_ae_1_4- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + // 39 ifd_gmv_1_4- inner node disablement + // 40 gmv_statistics_1_1- inner node disablement + // 41 odr_gmv_feature_1_4- inner node disablement + // 42 odr_gmv_match_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFFFFF; + } else if (nodeRelevantInnerOptions == (noPdaf | noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000080041E6811 + bitmaps.rbm[0] = 0x41E6811; + bitmaps.rbm[1] = 0x80; + // DEB - 0x00000000000000000000000001BBF1F1 + bitmaps.deb[0] = 0x1BBF1F1; + // TEB - 0x0000000000081E97 + bitmaps.teb[0] = 0x81E97; + // REB - 0x0000000000000000000000000200FFE7 + bitmaps.reb[0] = 0x200FFE7; + + // Kernels disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 bnlm_3_4- inner node disablement + // 11 bxt_demosaic- inner node disablement + // 12 vcsc_2_0_b- inner node disablement + // 13 gltm_2_0- inner node disablement + // 14 xnr_5_4- inner node disablement + // 15 vcr_3_1- inner node disablement + // 16 glim_2_0- inner node disablement + // 17 acm_1_2- inner node disablement + // 18 gammatm_v4- inner node disablement + // 19 csc_1_1- inner node disablement + // 23 b2i_ds_1_1- inner node disablement + // 24 lbff_crop_espa_1_4- inner node disablement + // 25 image_upscaler_1_1- inner node disablement + // 26 cas_1_1- inner node disablement + // 27 odr_ofs_mp_1_4- inner node disablement + // 28 b2i_ds_output_1_1- inner node disablement + // 29 odr_ofs_dp_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + // 39 ifd_gmv_1_4- inner node disablement + // 40 gmv_statistics_1_1- inner node disablement + // 41 odr_gmv_feature_1_4- inner node disablement + // 42 odr_gmv_match_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7F83F8FFF00; + } else if (nodeRelevantInnerOptions == (no3A | noPdaf | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 odr_dpc_pdaf_1_4- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 ifd_lsc_1_4- inner node disablement + // 7 lsc_1_2- inner node disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 bnlm_3_4- inner node disablement + // 11 bxt_demosaic- inner node disablement + // 12 vcsc_2_0_b- inner node disablement + // 13 gltm_2_0- inner node disablement + // 14 xnr_5_4- inner node disablement + // 15 vcr_3_1- inner node disablement + // 16 glim_2_0- inner node disablement + // 17 acm_1_2- inner node disablement + // 18 gammatm_v4- inner node disablement + // 19 csc_1_1- inner node disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 23 b2i_ds_1_1- inner node disablement + // 24 lbff_crop_espa_1_4- inner node disablement + // 25 image_upscaler_1_1- inner node disablement + // 26 cas_1_1- inner node disablement + // 27 odr_ofs_mp_1_4- inner node disablement + // 28 b2i_ds_output_1_1- inner node disablement + // 29 odr_ofs_dp_1_4- inner node disablement + // 30 odr_awb_std_1_4- inner node disablement + // 31 odr_awb_sat_1_4- inner node disablement + // 32 aestatistics_2_1- inner node disablement + // 33 odr_ae_1_4- inner node disablement + // 34 odr_af_std_1_4- inner node disablement + // 35 ifd_pdaf_1_4- inner node disablement + // 36 pext_1_0- inner node disablement + // 37 pafstatistics_1_2- inner node disablement + // 38 odr_pdaf_1_4- inner node disablement + // 39 ifd_gmv_1_4- inner node disablement + // 40 gmv_statistics_1_1- inner node disablement + // 41 odr_gmv_feature_1_4- inner node disablement + // 42 odr_gmv_match_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFFFFF; + } else // default inner node + { + // RBM - 0x0000000000000000006401BD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x6401BD; + // DEB - 0x000000000000E120000FF9CE8DFBFFF1 + bitmaps.deb[0] = 0x8DFBFFF1; + bitmaps.deb[1] = 0xFF9CE; + bitmaps.deb[2] = 0xE120; + // TEB - 0x00000000303A3F9F + bitmaps.teb[0] = 0x303A3F9F; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode::setInnerNode( + InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 51; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = + nodeInnerOptions & (no3A | noPdaf | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000067FC9D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E13E79F0F9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC8009F + bitmaps.teb[0] = 0x3FC8009F; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 27 odr_awb_std_1_4- inner node disablement + // 28 odr_awb_sat_1_4- inner node disablement + // 29 aestatistics_2_1- inner node disablement + // 30 odr_ae_1_4- inner node disablement + // 31 odr_af_std_1_4- inner node disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFF8700000; + } else if (nodeRelevantInnerOptions == (noPdaf)) { + // HW bitmaps + // RBM - 0x00000000000000000067FC9D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E13E79F0F9CE8DBBF1F1 + bitmaps.deb[0] = 0x8DBBF1F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC81E9F + bitmaps.teb[0] = 0x3FC81E9F; + // REB - 0x00000000000000000000001FF2F6FFE7 + bitmaps.reb[0] = 0xF2F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xF00000000; + } else if (nodeRelevantInnerOptions == (no3A | noPdaf)) { + // HW bitmaps + // RBM - 0x00000000000000000067FC9D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E13E79F0F9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC8009F + bitmaps.teb[0] = 0x3FC8009F; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 27 odr_awb_std_1_4- inner node disablement + // 28 odr_awb_sat_1_4- inner node disablement + // 29 aestatistics_2_1- inner node disablement + // 30 odr_ae_1_4- inner node disablement + // 31 odr_af_std_1_4- inner node disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFF8700000; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FD9D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x47FD9D; + // DEB - 0x000000000000C13E79F0F9CE8DFBFFF1 + bitmaps.deb[0] = 0x8DFBFFF1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC83F9F + bitmaps.teb[0] = 0x2FC83F9F; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 47 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x800000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C13E79F0F9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC8009F + bitmaps.teb[0] = 0x2FC8009F; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 27 odr_awb_std_1_4- inner node disablement + // 28 odr_awb_sat_1_4- inner node disablement + // 29 aestatistics_2_1- inner node disablement + // 30 odr_ae_1_4- inner node disablement + // 31 odr_af_std_1_4- inner node disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + // 47 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x800FF8700000; + } else if (nodeRelevantInnerOptions == (noPdaf | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C13E79F0F9CE8DBBF1F1 + bitmaps.deb[0] = 0x8DBBF1F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC81E9F + bitmaps.teb[0] = 0x2FC81E9F; + // REB - 0x00000000000000000000001FF2F6FFE7 + bitmaps.reb[0] = 0xF2F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + // 47 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x800F00000000; + } else if (nodeRelevantInnerOptions == (no3A | noPdaf | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C13E79F0F9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FC8009F + bitmaps.teb[0] = 0x2FC8009F; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 27 odr_awb_std_1_4- inner node disablement + // 28 odr_awb_sat_1_4- inner node disablement + // 29 aestatistics_2_1- inner node disablement + // 30 odr_ae_1_4- inner node disablement + // 31 odr_af_std_1_4- inner node disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + // 47 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x800FF8700000; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FD9D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x27FD9D; + // DEB - 0x000000000000213E79F0F9CE8DFBFFF1 + bitmaps.deb[0] = 0x8DFBFFF1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC83F9F + bitmaps.teb[0] = 0x1FC83F9F; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 48 b2i_ds_output_1_1- inner node disablement + // 49 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x000000000000213E79F0F9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC8009F + bitmaps.teb[0] = 0x1FC8009F; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 27 odr_awb_std_1_4- inner node disablement + // 28 odr_awb_sat_1_4- inner node disablement + // 29 aestatistics_2_1- inner node disablement + // 30 odr_ae_1_4- inner node disablement + // 31 odr_af_std_1_4- inner node disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + // 48 b2i_ds_output_1_1- inner node disablement + // 49 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3000FF8700000; + } else if (nodeRelevantInnerOptions == (noPdaf | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x000000000000213E79F0F9CE8DBBF1F1 + bitmaps.deb[0] = 0x8DBBF1F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC81E9F + bitmaps.teb[0] = 0x1FC81E9F; + // REB - 0x00000000000000000000001FF2F6FFE7 + bitmaps.reb[0] = 0xF2F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + // 48 b2i_ds_output_1_1- inner node disablement + // 49 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3000F00000000; + } else if (nodeRelevantInnerOptions == (no3A | noPdaf | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x000000000000213E79F0F9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FC8009F + bitmaps.teb[0] = 0x1FC8009F; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 27 odr_awb_std_1_4- inner node disablement + // 28 odr_awb_sat_1_4- inner node disablement + // 29 aestatistics_2_1- inner node disablement + // 30 odr_ae_1_4- inner node disablement + // 31 odr_af_std_1_4- inner node disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + // 48 b2i_ds_output_1_1- inner node disablement + // 49 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3000FF8700000; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000180041E6811 + bitmaps.rbm[0] = 0x41E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001FBFFF1 + bitmaps.deb[0] = 0x1FBFFF1; + // TEB - 0x0000000000083F97 + bitmaps.teb[0] = 0x83F97; + // REB - 0x0000000000000000000000000601FFE7 + bitmaps.reb[0] = 0x601FFE7; + + // Kernels disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 bnlm_3_4- inner node disablement + // 11 bxt_demosaic- inner node disablement + // 12 vcsc_2_0_b- inner node disablement + // 13 gltm_2_0- inner node disablement + // 14 xnr_5_4- inner node disablement + // 15 vcr_3_1- inner node disablement + // 16 glim_2_0- inner node disablement + // 17 acm_1_2- inner node disablement + // 18 gammatm_v4- inner node disablement + // 19 csc_1_1- inner node disablement + // 23 b2i_ds_1_1- inner node disablement + // 24 lbff_crop_espa_1_4- inner node disablement + // 25 tnr7_spatial_1_1- inner node disablement + // 26 tnr_scaler_lb_1_1- inner node disablement + // 36 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 37 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 38 tnr7_ims_1_2- inner node disablement + // 39 tnr7_bc_1_2- inner node disablement + // 40 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 41 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 42 tnr7_blend_1_1- inner node disablement + // 43 odr_tnr_fp_yuvn_1_4- inner node disablement + // 44 tnr_scaler_fp_1_1- inner node disablement + // 45 image_upscaler_1_1- inner node disablement + // 46 cas_1_1- inner node disablement + // 47 odr_ofs_mp_1_4- inner node disablement + // 48 b2i_ds_output_1_1- inner node disablement + // 49 odr_ofs_dp_1_4- inner node disablement + // 50 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFF0078FFF00; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 odr_dpc_pdaf_1_4- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 ifd_lsc_1_4- inner node disablement + // 7 lsc_1_2- inner node disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 bnlm_3_4- inner node disablement + // 11 bxt_demosaic- inner node disablement + // 12 vcsc_2_0_b- inner node disablement + // 13 gltm_2_0- inner node disablement + // 14 xnr_5_4- inner node disablement + // 15 vcr_3_1- inner node disablement + // 16 glim_2_0- inner node disablement + // 17 acm_1_2- inner node disablement + // 18 gammatm_v4- inner node disablement + // 19 csc_1_1- inner node disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 23 b2i_ds_1_1- inner node disablement + // 24 lbff_crop_espa_1_4- inner node disablement + // 25 tnr7_spatial_1_1- inner node disablement + // 26 tnr_scaler_lb_1_1- inner node disablement + // 27 odr_awb_std_1_4- inner node disablement + // 28 odr_awb_sat_1_4- inner node disablement + // 29 aestatistics_2_1- inner node disablement + // 30 odr_ae_1_4- inner node disablement + // 31 odr_af_std_1_4- inner node disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + // 36 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 37 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 38 tnr7_ims_1_2- inner node disablement + // 39 tnr7_bc_1_2- inner node disablement + // 40 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 41 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 42 tnr7_blend_1_1- inner node disablement + // 43 odr_tnr_fp_yuvn_1_4- inner node disablement + // 44 tnr_scaler_fp_1_1- inner node disablement + // 45 image_upscaler_1_1- inner node disablement + // 46 cas_1_1- inner node disablement + // 47 odr_ofs_mp_1_4- inner node disablement + // 48 b2i_ds_output_1_1- inner node disablement + // 49 odr_ofs_dp_1_4- inner node disablement + // 50 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFFFFFFF; + } else if (nodeRelevantInnerOptions == (noPdaf | noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000080041E6811 + bitmaps.rbm[0] = 0x41E6811; + bitmaps.rbm[1] = 0x80; + // DEB - 0x00000000000000000000000001BBF1F1 + bitmaps.deb[0] = 0x1BBF1F1; + // TEB - 0x0000000000081E97 + bitmaps.teb[0] = 0x81E97; + // REB - 0x0000000000000000000000000200FFE7 + bitmaps.reb[0] = 0x200FFE7; + + // Kernels disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 bnlm_3_4- inner node disablement + // 11 bxt_demosaic- inner node disablement + // 12 vcsc_2_0_b- inner node disablement + // 13 gltm_2_0- inner node disablement + // 14 xnr_5_4- inner node disablement + // 15 vcr_3_1- inner node disablement + // 16 glim_2_0- inner node disablement + // 17 acm_1_2- inner node disablement + // 18 gammatm_v4- inner node disablement + // 19 csc_1_1- inner node disablement + // 23 b2i_ds_1_1- inner node disablement + // 24 lbff_crop_espa_1_4- inner node disablement + // 25 tnr7_spatial_1_1- inner node disablement + // 26 tnr_scaler_lb_1_1- inner node disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + // 36 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 37 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 38 tnr7_ims_1_2- inner node disablement + // 39 tnr7_bc_1_2- inner node disablement + // 40 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 41 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 42 tnr7_blend_1_1- inner node disablement + // 43 odr_tnr_fp_yuvn_1_4- inner node disablement + // 44 tnr_scaler_fp_1_1- inner node disablement + // 45 image_upscaler_1_1- inner node disablement + // 46 cas_1_1- inner node disablement + // 47 odr_ofs_mp_1_4- inner node disablement + // 48 b2i_ds_output_1_1- inner node disablement + // 49 odr_ofs_dp_1_4- inner node disablement + // 50 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFF078FFF00; + } else if (nodeRelevantInnerOptions == (no3A | noPdaf | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 odr_dpc_pdaf_1_4- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 ifd_lsc_1_4- inner node disablement + // 7 lsc_1_2- inner node disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 bnlm_3_4- inner node disablement + // 11 bxt_demosaic- inner node disablement + // 12 vcsc_2_0_b- inner node disablement + // 13 gltm_2_0- inner node disablement + // 14 xnr_5_4- inner node disablement + // 15 vcr_3_1- inner node disablement + // 16 glim_2_0- inner node disablement + // 17 acm_1_2- inner node disablement + // 18 gammatm_v4- inner node disablement + // 19 csc_1_1- inner node disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 23 b2i_ds_1_1- inner node disablement + // 24 lbff_crop_espa_1_4- inner node disablement + // 25 tnr7_spatial_1_1- inner node disablement + // 26 tnr_scaler_lb_1_1- inner node disablement + // 27 odr_awb_std_1_4- inner node disablement + // 28 odr_awb_sat_1_4- inner node disablement + // 29 aestatistics_2_1- inner node disablement + // 30 odr_ae_1_4- inner node disablement + // 31 odr_af_std_1_4- inner node disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + // 36 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 37 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 38 tnr7_ims_1_2- inner node disablement + // 39 tnr7_bc_1_2- inner node disablement + // 40 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 41 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 42 tnr7_blend_1_1- inner node disablement + // 43 odr_tnr_fp_yuvn_1_4- inner node disablement + // 44 tnr_scaler_fp_1_1- inner node disablement + // 45 image_upscaler_1_1- inner node disablement + // 46 cas_1_1- inner node disablement + // 47 odr_ofs_mp_1_4- inner node disablement + // 48 b2i_ds_output_1_1- inner node disablement + // 49 odr_ofs_dp_1_4- inner node disablement + // 50 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000067FD9D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x67FD9D; + // DEB - 0x000000000000E13E79F0F9CE8DFBFFF1 + bitmaps.deb[0] = 0x8DFBFFF1; + bitmaps.deb[1] = 0x79F0F9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FC83F9F + bitmaps.teb[0] = 0x3FC83F9F; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode::setInnerNode( + InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 55; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = + nodeInnerOptions & (no3A | noPdaf | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000067FCBD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E13E79FFF9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FFA009F + bitmaps.teb[0] = 0x3FFA009F; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 27 odr_awb_std_1_4- inner node disablement + // 28 odr_awb_sat_1_4- inner node disablement + // 29 aestatistics_2_1- inner node disablement + // 30 odr_ae_1_4- inner node disablement + // 31 odr_af_std_1_4- inner node disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFF8700000; + } else if (nodeRelevantInnerOptions == (noPdaf)) { + // HW bitmaps + // RBM - 0x00000000000000000067FCBD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E13E79FFF9CE8DBBF1F1 + bitmaps.deb[0] = 0x8DBBF1F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FFA1E9F + bitmaps.teb[0] = 0x3FFA1E9F; + // REB - 0x00000000000000000000001FF2F6FFE7 + bitmaps.reb[0] = 0xF2F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xF00000000; + } else if (nodeRelevantInnerOptions == (no3A | noPdaf)) { + // HW bitmaps + // RBM - 0x00000000000000000067FCBD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E13E79FFF9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FFA009F + bitmaps.teb[0] = 0x3FFA009F; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 27 odr_awb_std_1_4- inner node disablement + // 28 odr_awb_sat_1_4- inner node disablement + // 29 aestatistics_2_1- inner node disablement + // 30 odr_ae_1_4- inner node disablement + // 31 odr_af_std_1_4- inner node disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFF8700000; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FDBD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x47FDBD; + // DEB - 0x000000000000C13E79FFF9CE8DFBFFF1 + bitmaps.deb[0] = 0x8DFBFFF1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FFA3F9F + bitmaps.teb[0] = 0x2FFA3F9F; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 51 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x8000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C13E79FFF9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FFA009F + bitmaps.teb[0] = 0x2FFA009F; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 27 odr_awb_std_1_4- inner node disablement + // 28 odr_awb_sat_1_4- inner node disablement + // 29 aestatistics_2_1- inner node disablement + // 30 odr_ae_1_4- inner node disablement + // 31 odr_af_std_1_4- inner node disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + // 51 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x8000FF8700000; + } else if (nodeRelevantInnerOptions == (noPdaf | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C13E79FFF9CE8DBBF1F1 + bitmaps.deb[0] = 0x8DBBF1F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FFA1E9F + bitmaps.teb[0] = 0x2FFA1E9F; + // REB - 0x00000000000000000000001FF2F6FFE7 + bitmaps.reb[0] = 0xF2F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + // 51 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x8000F00000000; + } else if (nodeRelevantInnerOptions == (no3A | noPdaf | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C13E79FFF9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xC13E; + // TEB - 0x000000002FFA009F + bitmaps.teb[0] = 0x2FFA009F; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 27 odr_awb_std_1_4- inner node disablement + // 28 odr_awb_sat_1_4- inner node disablement + // 29 aestatistics_2_1- inner node disablement + // 30 odr_ae_1_4- inner node disablement + // 31 odr_af_std_1_4- inner node disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + // 51 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x8000FF8700000; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FDBD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x27FDBD; + // DEB - 0x000000000000213E79FFF9CE8DFBFFF1 + bitmaps.deb[0] = 0x8DFBFFF1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FFA3F9F + bitmaps.teb[0] = 0x1FFA3F9F; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 52 b2i_ds_output_1_1- inner node disablement + // 53 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x30000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x000000000000213E79FFF9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FFA009F + bitmaps.teb[0] = 0x1FFA009F; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 27 odr_awb_std_1_4- inner node disablement + // 28 odr_awb_sat_1_4- inner node disablement + // 29 aestatistics_2_1- inner node disablement + // 30 odr_ae_1_4- inner node disablement + // 31 odr_af_std_1_4- inner node disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + // 52 b2i_ds_output_1_1- inner node disablement + // 53 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x30000FF8700000; + } else if (nodeRelevantInnerOptions == (noPdaf | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x000000000000213E79FFF9CE8DBBF1F1 + bitmaps.deb[0] = 0x8DBBF1F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FFA1E9F + bitmaps.teb[0] = 0x1FFA1E9F; + // REB - 0x00000000000000000000001FF2F6FFE7 + bitmaps.reb[0] = 0xF2F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + // 52 b2i_ds_output_1_1- inner node disablement + // 53 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x30000F00000000; + } else if (nodeRelevantInnerOptions == (no3A | noPdaf | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x000000000000213E79FFF9CE8DA001F1 + bitmaps.deb[0] = 0x8DA001F1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0x213E; + // TEB - 0x000000001FFA009F + bitmaps.teb[0] = 0x1FFA009F; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 27 odr_awb_std_1_4- inner node disablement + // 28 odr_awb_sat_1_4- inner node disablement + // 29 aestatistics_2_1- inner node disablement + // 30 odr_ae_1_4- inner node disablement + // 31 odr_af_std_1_4- inner node disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + // 52 b2i_ds_output_1_1- inner node disablement + // 53 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x30000FF8700000; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000180041E6811 + bitmaps.rbm[0] = 0x41E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001FBFFF1 + bitmaps.deb[0] = 0x1FBFFF1; + // TEB - 0x0000000000083F97 + bitmaps.teb[0] = 0x83F97; + // REB - 0x0000000000000000000000000601FFE7 + bitmaps.reb[0] = 0x601FFE7; + + // Kernels disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 bnlm_3_4- inner node disablement + // 11 bxt_demosaic- inner node disablement + // 12 vcsc_2_0_b- inner node disablement + // 13 gltm_2_0- inner node disablement + // 14 xnr_5_4- inner node disablement + // 15 vcr_3_1- inner node disablement + // 16 glim_2_0- inner node disablement + // 17 acm_1_2- inner node disablement + // 18 gammatm_v4- inner node disablement + // 19 csc_1_1- inner node disablement + // 23 b2i_ds_1_1- inner node disablement + // 24 lbff_crop_espa_1_4- inner node disablement + // 25 tnr7_spatial_1_1- inner node disablement + // 26 tnr_scaler_lb_1_1- inner node disablement + // 36 ifd_gmv_1_4- inner node disablement + // 37 gmv_statistics_1_1- inner node disablement + // 38 odr_gmv_feature_1_4- inner node disablement + // 39 odr_gmv_match_1_4- inner node disablement + // 40 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 41 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 42 tnr7_ims_1_2- inner node disablement + // 43 tnr7_bc_1_2- inner node disablement + // 44 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 45 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 46 tnr7_blend_1_1- inner node disablement + // 47 odr_tnr_fp_yuvn_1_4- inner node disablement + // 48 tnr_scaler_fp_1_1- inner node disablement + // 49 image_upscaler_1_1- inner node disablement + // 50 cas_1_1- inner node disablement + // 51 odr_ofs_mp_1_4- inner node disablement + // 52 b2i_ds_output_1_1- inner node disablement + // 53 odr_ofs_dp_1_4- inner node disablement + // 54 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFF0078FFF00; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 odr_dpc_pdaf_1_4- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 ifd_lsc_1_4- inner node disablement + // 7 lsc_1_2- inner node disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 bnlm_3_4- inner node disablement + // 11 bxt_demosaic- inner node disablement + // 12 vcsc_2_0_b- inner node disablement + // 13 gltm_2_0- inner node disablement + // 14 xnr_5_4- inner node disablement + // 15 vcr_3_1- inner node disablement + // 16 glim_2_0- inner node disablement + // 17 acm_1_2- inner node disablement + // 18 gammatm_v4- inner node disablement + // 19 csc_1_1- inner node disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 23 b2i_ds_1_1- inner node disablement + // 24 lbff_crop_espa_1_4- inner node disablement + // 25 tnr7_spatial_1_1- inner node disablement + // 26 tnr_scaler_lb_1_1- inner node disablement + // 27 odr_awb_std_1_4- inner node disablement + // 28 odr_awb_sat_1_4- inner node disablement + // 29 aestatistics_2_1- inner node disablement + // 30 odr_ae_1_4- inner node disablement + // 31 odr_af_std_1_4- inner node disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + // 36 ifd_gmv_1_4- inner node disablement + // 37 gmv_statistics_1_1- inner node disablement + // 38 odr_gmv_feature_1_4- inner node disablement + // 39 odr_gmv_match_1_4- inner node disablement + // 40 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 41 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 42 tnr7_ims_1_2- inner node disablement + // 43 tnr7_bc_1_2- inner node disablement + // 44 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 45 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 46 tnr7_blend_1_1- inner node disablement + // 47 odr_tnr_fp_yuvn_1_4- inner node disablement + // 48 tnr_scaler_fp_1_1- inner node disablement + // 49 image_upscaler_1_1- inner node disablement + // 50 cas_1_1- inner node disablement + // 51 odr_ofs_mp_1_4- inner node disablement + // 52 b2i_ds_output_1_1- inner node disablement + // 53 odr_ofs_dp_1_4- inner node disablement + // 54 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFFFFFFFF; + } else if (nodeRelevantInnerOptions == (noPdaf | noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000080041E6811 + bitmaps.rbm[0] = 0x41E6811; + bitmaps.rbm[1] = 0x80; + // DEB - 0x00000000000000000000000001BBF1F1 + bitmaps.deb[0] = 0x1BBF1F1; + // TEB - 0x0000000000081E97 + bitmaps.teb[0] = 0x81E97; + // REB - 0x0000000000000000000000000200FFE7 + bitmaps.reb[0] = 0x200FFE7; + + // Kernels disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 bnlm_3_4- inner node disablement + // 11 bxt_demosaic- inner node disablement + // 12 vcsc_2_0_b- inner node disablement + // 13 gltm_2_0- inner node disablement + // 14 xnr_5_4- inner node disablement + // 15 vcr_3_1- inner node disablement + // 16 glim_2_0- inner node disablement + // 17 acm_1_2- inner node disablement + // 18 gammatm_v4- inner node disablement + // 19 csc_1_1- inner node disablement + // 23 b2i_ds_1_1- inner node disablement + // 24 lbff_crop_espa_1_4- inner node disablement + // 25 tnr7_spatial_1_1- inner node disablement + // 26 tnr_scaler_lb_1_1- inner node disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + // 36 ifd_gmv_1_4- inner node disablement + // 37 gmv_statistics_1_1- inner node disablement + // 38 odr_gmv_feature_1_4- inner node disablement + // 39 odr_gmv_match_1_4- inner node disablement + // 40 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 41 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 42 tnr7_ims_1_2- inner node disablement + // 43 tnr7_bc_1_2- inner node disablement + // 44 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 45 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 46 tnr7_blend_1_1- inner node disablement + // 47 odr_tnr_fp_yuvn_1_4- inner node disablement + // 48 tnr_scaler_fp_1_1- inner node disablement + // 49 image_upscaler_1_1- inner node disablement + // 50 cas_1_1- inner node disablement + // 51 odr_ofs_mp_1_4- inner node disablement + // 52 b2i_ds_output_1_1- inner node disablement + // 53 odr_ofs_dp_1_4- inner node disablement + // 54 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFF078FFF00; + } else if (nodeRelevantInnerOptions == (no3A | noPdaf | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 odr_dpc_pdaf_1_4- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 ifd_lsc_1_4- inner node disablement + // 7 lsc_1_2- inner node disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 bnlm_3_4- inner node disablement + // 11 bxt_demosaic- inner node disablement + // 12 vcsc_2_0_b- inner node disablement + // 13 gltm_2_0- inner node disablement + // 14 xnr_5_4- inner node disablement + // 15 vcr_3_1- inner node disablement + // 16 glim_2_0- inner node disablement + // 17 acm_1_2- inner node disablement + // 18 gammatm_v4- inner node disablement + // 19 csc_1_1- inner node disablement + // 20 rgbs_grid_1_1- inner node disablement + // 21 ccm_3a_2_0- inner node disablement + // 22 fr_grid_1_0- inner node disablement + // 23 b2i_ds_1_1- inner node disablement + // 24 lbff_crop_espa_1_4- inner node disablement + // 25 tnr7_spatial_1_1- inner node disablement + // 26 tnr_scaler_lb_1_1- inner node disablement + // 27 odr_awb_std_1_4- inner node disablement + // 28 odr_awb_sat_1_4- inner node disablement + // 29 aestatistics_2_1- inner node disablement + // 30 odr_ae_1_4- inner node disablement + // 31 odr_af_std_1_4- inner node disablement + // 32 ifd_pdaf_1_4- inner node disablement + // 33 pext_1_0- inner node disablement + // 34 pafstatistics_1_2- inner node disablement + // 35 odr_pdaf_1_4- inner node disablement + // 36 ifd_gmv_1_4- inner node disablement + // 37 gmv_statistics_1_1- inner node disablement + // 38 odr_gmv_feature_1_4- inner node disablement + // 39 odr_gmv_match_1_4- inner node disablement + // 40 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 41 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 42 tnr7_ims_1_2- inner node disablement + // 43 tnr7_bc_1_2- inner node disablement + // 44 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 45 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 46 tnr7_blend_1_1- inner node disablement + // 47 odr_tnr_fp_yuvn_1_4- inner node disablement + // 48 tnr_scaler_fp_1_1- inner node disablement + // 49 image_upscaler_1_1- inner node disablement + // 50 cas_1_1- inner node disablement + // 51 odr_ofs_mp_1_4- inner node disablement + // 52 b2i_ds_output_1_1- inner node disablement + // 53 odr_ofs_dp_1_4- inner node disablement + // 54 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000067FDBD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x67FDBD; + // DEB - 0x000000000000E13E79FFF9CE8DFBFFF1 + bitmaps.deb[0] = 0x8DFBFFF1; + bitmaps.deb[1] = 0x79FFF9CE; + bitmaps.deb[2] = 0xE13E; + // TEB - 0x000000003FFA3F9F + bitmaps.teb[0] = 0x3FFA3F9F; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void IsysWithCvOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) { + // No inner nodes + (void)nodeInnerOptions; +} + +void SwSegnetOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) { + // No inner nodes + (void)nodeInnerOptions; +} + +void LbffBayerNoGmvNoTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 42; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000064009D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1E00000FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F000009F + bitmaps.teb[0] = 0xF000009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FE00; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000044009D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1E00000FFFEED9BF1F1 + bitmaps.deb[0] = 0xED9BF1F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E0001E9F + bitmaps.teb[0] = 0xE0001E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F67FE7 + bitmaps.reb[0] = 0x12F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 39 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x8000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000044009D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1E00000FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E000009F + bitmaps.teb[0] = 0xE000009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 39 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x800001FE00; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000024009D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021E00000FFFEED9BF1F1 + bitmaps.deb[0] = 0xED9BF1F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D0001E9F + bitmaps.teb[0] = 0xD0001E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F67FE7 + bitmaps.reb[0] = 0x12F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 40 b2i_ds_output_1_1- inner node disablement + // 41 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x30000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000024009D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021E00000FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D000009F + bitmaps.teb[0] = 0xD000009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 40 b2i_ds_output_1_1- inner node disablement + // 41 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3000001FE00; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000080001E6811 + bitmaps.rbm[0] = 0x1E6811; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019BF1F1 + bitmaps.deb[0] = 0x19BF1F1; + // TEB - 0x0000000000001E97 + bitmaps.teb[0] = 0x1E97; + // REB - 0x00000000000000000000000002007FE7 + bitmaps.reb[0] = 0x2007FE7; + + // Kernels disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 17 ifd_segmap_bnlm_1_4- inner node disablement + // 18 smurf_bnlm_1_0- inner node disablement + // 19 bnlm_3_4- inner node disablement + // 20 bxt_demosaic- inner node disablement + // 21 vcsc_2_0_b- inner node disablement + // 22 gltm_2_0- inner node disablement + // 23 ifd_segmap_xnr_1_4- inner node disablement + // 24 smurf_xnr_1_0- inner node disablement + // 25 xnr_5_4- inner node disablement + // 26 vcr_3_1- inner node disablement + // 27 glim_2_0- inner node disablement + // 28 ifd_segmap_acm_1_4- inner node disablement + // 29 smurf_acm_1_0- inner node disablement + // 30 acm_1_2- inner node disablement + // 31 gammatm_v4- inner node disablement + // 32 csc_1_1- inner node disablement + // 33 b2i_ds_1_1- inner node disablement + // 34 lbff_crop_espa_1_4- inner node disablement + // 35 image_upscaler_1_1- inner node disablement + // 36 ifd_segmap_cas_1_4- inner node disablement + // 37 smurf_cas_1_0- inner node disablement + // 38 cas_1_1- inner node disablement + // 39 odr_ofs_mp_1_4- inner node disablement + // 40 b2i_ds_output_1_1- inner node disablement + // 41 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFE0180; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgb_ir_2_0- inner node disablement + // 5 ifd_lsc_1_4- inner node disablement + // 6 lsc_1_2- inner node disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_segmap_bnlm_1_4- inner node disablement + // 18 smurf_bnlm_1_0- inner node disablement + // 19 bnlm_3_4- inner node disablement + // 20 bxt_demosaic- inner node disablement + // 21 vcsc_2_0_b- inner node disablement + // 22 gltm_2_0- inner node disablement + // 23 ifd_segmap_xnr_1_4- inner node disablement + // 24 smurf_xnr_1_0- inner node disablement + // 25 xnr_5_4- inner node disablement + // 26 vcr_3_1- inner node disablement + // 27 glim_2_0- inner node disablement + // 28 ifd_segmap_acm_1_4- inner node disablement + // 29 smurf_acm_1_0- inner node disablement + // 30 acm_1_2- inner node disablement + // 31 gammatm_v4- inner node disablement + // 32 csc_1_1- inner node disablement + // 33 b2i_ds_1_1- inner node disablement + // 34 lbff_crop_espa_1_4- inner node disablement + // 35 image_upscaler_1_1- inner node disablement + // 36 ifd_segmap_cas_1_4- inner node disablement + // 37 smurf_cas_1_0- inner node disablement + // 38 cas_1_1- inner node disablement + // 39 odr_ofs_mp_1_4- inner node disablement + // 40 b2i_ds_output_1_1- inner node disablement + // 41 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000064009D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1E00000FFFEED9BF1F1 + bitmaps.deb[0] = 0xED9BF1F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F0001E9F + bitmaps.teb[0] = 0xF0001E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F67FE7 + bitmaps.reb[0] = 0x12F67FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerWithGmvNoTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 46; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x0000000000000000006400BD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E1E0000FFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F032009F + bitmaps.teb[0] = 0xF032009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FE00; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x0000000000000000004400BD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C1E0000FFFFEED9BF1F1 + bitmaps.deb[0] = 0xED9BF1F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E0321E9F + bitmaps.teb[0] = 0xE0321E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F67FE7 + bitmaps.reb[0] = 0x12F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 43 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x80000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x0000000000000000004400BD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C1E0000FFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E032009F + bitmaps.teb[0] = 0xE032009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 43 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x8000001FE00; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x0000000000000000002400BD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x00000000000021E0000FFFFEED9BF1F1 + bitmaps.deb[0] = 0xED9BF1F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D0321E9F + bitmaps.teb[0] = 0xD0321E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F67FE7 + bitmaps.reb[0] = 0x12F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 44 b2i_ds_output_1_1- inner node disablement + // 45 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x300000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x0000000000000000002400BD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x00000000000021E0000FFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D032009F + bitmaps.teb[0] = 0xD032009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 44 b2i_ds_output_1_1- inner node disablement + // 45 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x30000001FE00; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000080001E6811 + bitmaps.rbm[0] = 0x1E6811; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019BF1F1 + bitmaps.deb[0] = 0x19BF1F1; + // TEB - 0x0000000000001E97 + bitmaps.teb[0] = 0x1E97; + // REB - 0x00000000000000000000000002007FE7 + bitmaps.reb[0] = 0x2007FE7; + + // Kernels disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 17 ifd_gmv_1_4- inner node disablement + // 18 ifd_segmap_bnlm_1_4- inner node disablement + // 19 smurf_bnlm_1_0- inner node disablement + // 20 bnlm_3_4- inner node disablement + // 21 bxt_demosaic- inner node disablement + // 22 vcsc_2_0_b- inner node disablement + // 23 gltm_2_0- inner node disablement + // 24 ifd_segmap_xnr_1_4- inner node disablement + // 25 smurf_xnr_1_0- inner node disablement + // 26 xnr_5_4- inner node disablement + // 27 vcr_3_1- inner node disablement + // 28 glim_2_0- inner node disablement + // 29 ifd_segmap_acm_1_4- inner node disablement + // 30 smurf_acm_1_0- inner node disablement + // 31 acm_1_2- inner node disablement + // 32 gammatm_v4- inner node disablement + // 33 csc_1_1- inner node disablement + // 34 b2i_ds_1_1- inner node disablement + // 35 lbff_crop_espa_1_4- inner node disablement + // 36 image_upscaler_1_1- inner node disablement + // 37 gmv_statistics_1_1- inner node disablement + // 38 odr_gmv_feature_1_4- inner node disablement + // 39 odr_gmv_match_1_4- inner node disablement + // 40 ifd_segmap_cas_1_4- inner node disablement + // 41 smurf_cas_1_0- inner node disablement + // 42 cas_1_1- inner node disablement + // 43 odr_ofs_mp_1_4- inner node disablement + // 44 b2i_ds_output_1_1- inner node disablement + // 45 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFE0180; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgb_ir_2_0- inner node disablement + // 5 ifd_lsc_1_4- inner node disablement + // 6 lsc_1_2- inner node disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_gmv_1_4- inner node disablement + // 18 ifd_segmap_bnlm_1_4- inner node disablement + // 19 smurf_bnlm_1_0- inner node disablement + // 20 bnlm_3_4- inner node disablement + // 21 bxt_demosaic- inner node disablement + // 22 vcsc_2_0_b- inner node disablement + // 23 gltm_2_0- inner node disablement + // 24 ifd_segmap_xnr_1_4- inner node disablement + // 25 smurf_xnr_1_0- inner node disablement + // 26 xnr_5_4- inner node disablement + // 27 vcr_3_1- inner node disablement + // 28 glim_2_0- inner node disablement + // 29 ifd_segmap_acm_1_4- inner node disablement + // 30 smurf_acm_1_0- inner node disablement + // 31 acm_1_2- inner node disablement + // 32 gammatm_v4- inner node disablement + // 33 csc_1_1- inner node disablement + // 34 b2i_ds_1_1- inner node disablement + // 35 lbff_crop_espa_1_4- inner node disablement + // 36 image_upscaler_1_1- inner node disablement + // 37 gmv_statistics_1_1- inner node disablement + // 38 odr_gmv_feature_1_4- inner node disablement + // 39 odr_gmv_match_1_4- inner node disablement + // 40 ifd_segmap_cas_1_4- inner node disablement + // 41 smurf_cas_1_0- inner node disablement + // 42 cas_1_1- inner node disablement + // 43 odr_ofs_mp_1_4- inner node disablement + // 44 b2i_ds_output_1_1- inner node disablement + // 45 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x0000000000000000006400BD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E1E0000FFFFEED9BF1F1 + bitmaps.deb[0] = 0xED9BF1F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F0321E9F + bitmaps.teb[0] = 0xF0321E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F67FE7 + bitmaps.reb[0] = 0x12F67FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerNoGmvWithTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 58; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000067FC9D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E1FFFFF0FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFC0009F + bitmaps.teb[0] = 0xFFC0009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FE00; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C1FFFFF0FFFEED9BF1F1 + bitmaps.deb[0] = 0xED9BF1F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFC01E9F + bitmaps.teb[0] = 0xEFC01E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F67FE7 + bitmaps.reb[0] = 0xF2F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 55 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x80000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C1FFFFF0FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFC0009F + bitmaps.teb[0] = 0xEFC0009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 55 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x8000000001FE00; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x00000000000021FFFFF0FFFEED9BF1F1 + bitmaps.deb[0] = 0xED9BF1F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFC01E9F + bitmaps.teb[0] = 0xDFC01E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F67FE7 + bitmaps.reb[0] = 0xF2F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 56 b2i_ds_output_1_1- inner node disablement + // 57 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x300000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x00000000000021FFFFF0FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFC0009F + bitmaps.teb[0] = 0xDFC0009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 56 b2i_ds_output_1_1- inner node disablement + // 57 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x30000000001FE00; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000080001E6811 + bitmaps.rbm[0] = 0x1E6811; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019BF1F1 + bitmaps.deb[0] = 0x19BF1F1; + // TEB - 0x0000000000001E97 + bitmaps.teb[0] = 0x1E97; + // REB - 0x00000000000000000000000002007FE7 + bitmaps.reb[0] = 0x2007FE7; + + // Kernels disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 17 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 18 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 19 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 20 ifd_segmap_bnlm_1_4- inner node disablement + // 21 smurf_bnlm_1_0- inner node disablement + // 22 bnlm_3_4- inner node disablement + // 23 bxt_demosaic- inner node disablement + // 24 vcsc_2_0_b- inner node disablement + // 25 gltm_2_0- inner node disablement + // 26 ifd_segmap_xnr_1_4- inner node disablement + // 27 smurf_xnr_1_0- inner node disablement + // 28 xnr_5_4- inner node disablement + // 29 vcr_3_1- inner node disablement + // 30 glim_2_0- inner node disablement + // 31 ifd_segmap_acm_1_4- inner node disablement + // 32 smurf_acm_1_0- inner node disablement + // 33 acm_1_2- inner node disablement + // 34 gammatm_v4- inner node disablement + // 35 csc_1_1- inner node disablement + // 36 b2i_ds_1_1- inner node disablement + // 37 lbff_crop_espa_1_4- inner node disablement + // 38 tnr7_spatial_1_1- inner node disablement + // 39 tnr_scaler_lb_1_1- inner node disablement + // 40 tnr7_ims_1_2- inner node disablement + // 41 ifd_segmap_tnr_bc_1_4- inner node disablement + // 42 smurf_tnr_bc_1_0- inner node disablement + // 43 tnr7_bc_1_2- inner node disablement + // 44 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 45 ifd_segmap_tnr_blend_1_4- inner node disablement + // 46 smurf_tnr_blend_1_0- inner node disablement + // 47 tnr7_blend_1_1- inner node disablement + // 48 odr_tnr_fp_yuvn_1_4- inner node disablement + // 49 tnr_scaler_fp_1_1- inner node disablement + // 50 image_upscaler_1_1- inner node disablement + // 51 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 52 ifd_segmap_cas_1_4- inner node disablement + // 53 smurf_cas_1_0- inner node disablement + // 54 cas_1_1- inner node disablement + // 55 odr_ofs_mp_1_4- inner node disablement + // 56 b2i_ds_output_1_1- inner node disablement + // 57 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFE0180; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgb_ir_2_0- inner node disablement + // 5 ifd_lsc_1_4- inner node disablement + // 6 lsc_1_2- inner node disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 18 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 19 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 20 ifd_segmap_bnlm_1_4- inner node disablement + // 21 smurf_bnlm_1_0- inner node disablement + // 22 bnlm_3_4- inner node disablement + // 23 bxt_demosaic- inner node disablement + // 24 vcsc_2_0_b- inner node disablement + // 25 gltm_2_0- inner node disablement + // 26 ifd_segmap_xnr_1_4- inner node disablement + // 27 smurf_xnr_1_0- inner node disablement + // 28 xnr_5_4- inner node disablement + // 29 vcr_3_1- inner node disablement + // 30 glim_2_0- inner node disablement + // 31 ifd_segmap_acm_1_4- inner node disablement + // 32 smurf_acm_1_0- inner node disablement + // 33 acm_1_2- inner node disablement + // 34 gammatm_v4- inner node disablement + // 35 csc_1_1- inner node disablement + // 36 b2i_ds_1_1- inner node disablement + // 37 lbff_crop_espa_1_4- inner node disablement + // 38 tnr7_spatial_1_1- inner node disablement + // 39 tnr_scaler_lb_1_1- inner node disablement + // 40 tnr7_ims_1_2- inner node disablement + // 41 ifd_segmap_tnr_bc_1_4- inner node disablement + // 42 smurf_tnr_bc_1_0- inner node disablement + // 43 tnr7_bc_1_2- inner node disablement + // 44 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 45 ifd_segmap_tnr_blend_1_4- inner node disablement + // 46 smurf_tnr_blend_1_0- inner node disablement + // 47 tnr7_blend_1_1- inner node disablement + // 48 odr_tnr_fp_yuvn_1_4- inner node disablement + // 49 tnr_scaler_fp_1_1- inner node disablement + // 50 image_upscaler_1_1- inner node disablement + // 51 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 52 ifd_segmap_cas_1_4- inner node disablement + // 53 smurf_cas_1_0- inner node disablement + // 54 cas_1_1- inner node disablement + // 55 odr_ofs_mp_1_4- inner node disablement + // 56 b2i_ds_output_1_1- inner node disablement + // 57 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000067FC9D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E1FFFFF0FFFEED9BF1F1 + bitmaps.deb[0] = 0xED9BF1F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFC01E9F + bitmaps.teb[0] = 0xFFC01E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F67FE7 + bitmaps.reb[0] = 0xF2F67FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerWithGmvWithTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 62; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000067FCBD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E1FFFFFFFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFF2009F + bitmaps.teb[0] = 0xFFF2009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FE00; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C1FFFFFFFFFEED9BF1F1 + bitmaps.deb[0] = 0xED9BF1F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFF21E9F + bitmaps.teb[0] = 0xEFF21E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F67FE7 + bitmaps.reb[0] = 0xF2F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 59 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x800000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C1FFFFFFFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFF2009F + bitmaps.teb[0] = 0xEFF2009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 59 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x80000000001FE00; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x00000000000021FFFFFFFFFEED9BF1F1 + bitmaps.deb[0] = 0xED9BF1F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFF21E9F + bitmaps.teb[0] = 0xDFF21E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F67FE7 + bitmaps.reb[0] = 0xF2F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 60 b2i_ds_output_1_1- inner node disablement + // 61 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3000000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x00000000000021FFFFFFFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFF2009F + bitmaps.teb[0] = 0xDFF2009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 60 b2i_ds_output_1_1- inner node disablement + // 61 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x300000000001FE00; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000080001E6811 + bitmaps.rbm[0] = 0x1E6811; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019BF1F1 + bitmaps.deb[0] = 0x19BF1F1; + // TEB - 0x0000000000001E97 + bitmaps.teb[0] = 0x1E97; + // REB - 0x00000000000000000000000002007FE7 + bitmaps.reb[0] = 0x2007FE7; + + // Kernels disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 17 ifd_gmv_1_4- inner node disablement + // 18 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 19 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 20 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 21 ifd_segmap_bnlm_1_4- inner node disablement + // 22 smurf_bnlm_1_0- inner node disablement + // 23 bnlm_3_4- inner node disablement + // 24 bxt_demosaic- inner node disablement + // 25 vcsc_2_0_b- inner node disablement + // 26 gltm_2_0- inner node disablement + // 27 ifd_segmap_xnr_1_4- inner node disablement + // 28 smurf_xnr_1_0- inner node disablement + // 29 xnr_5_4- inner node disablement + // 30 vcr_3_1- inner node disablement + // 31 glim_2_0- inner node disablement + // 32 ifd_segmap_acm_1_4- inner node disablement + // 33 smurf_acm_1_0- inner node disablement + // 34 acm_1_2- inner node disablement + // 35 gammatm_v4- inner node disablement + // 36 csc_1_1- inner node disablement + // 37 b2i_ds_1_1- inner node disablement + // 38 lbff_crop_espa_1_4- inner node disablement + // 39 tnr7_spatial_1_1- inner node disablement + // 40 tnr_scaler_lb_1_1- inner node disablement + // 41 tnr7_ims_1_2- inner node disablement + // 42 gmv_statistics_1_1- inner node disablement + // 43 odr_gmv_feature_1_4- inner node disablement + // 44 odr_gmv_match_1_4- inner node disablement + // 45 ifd_segmap_tnr_bc_1_4- inner node disablement + // 46 smurf_tnr_bc_1_0- inner node disablement + // 47 tnr7_bc_1_2- inner node disablement + // 48 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 49 ifd_segmap_tnr_blend_1_4- inner node disablement + // 50 smurf_tnr_blend_1_0- inner node disablement + // 51 tnr7_blend_1_1- inner node disablement + // 52 odr_tnr_fp_yuvn_1_4- inner node disablement + // 53 tnr_scaler_fp_1_1- inner node disablement + // 54 image_upscaler_1_1- inner node disablement + // 55 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 56 ifd_segmap_cas_1_4- inner node disablement + // 57 smurf_cas_1_0- inner node disablement + // 58 cas_1_1- inner node disablement + // 59 odr_ofs_mp_1_4- inner node disablement + // 60 b2i_ds_output_1_1- inner node disablement + // 61 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFFE0180; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgb_ir_2_0- inner node disablement + // 5 ifd_lsc_1_4- inner node disablement + // 6 lsc_1_2- inner node disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_gmv_1_4- inner node disablement + // 18 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 19 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 20 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 21 ifd_segmap_bnlm_1_4- inner node disablement + // 22 smurf_bnlm_1_0- inner node disablement + // 23 bnlm_3_4- inner node disablement + // 24 bxt_demosaic- inner node disablement + // 25 vcsc_2_0_b- inner node disablement + // 26 gltm_2_0- inner node disablement + // 27 ifd_segmap_xnr_1_4- inner node disablement + // 28 smurf_xnr_1_0- inner node disablement + // 29 xnr_5_4- inner node disablement + // 30 vcr_3_1- inner node disablement + // 31 glim_2_0- inner node disablement + // 32 ifd_segmap_acm_1_4- inner node disablement + // 33 smurf_acm_1_0- inner node disablement + // 34 acm_1_2- inner node disablement + // 35 gammatm_v4- inner node disablement + // 36 csc_1_1- inner node disablement + // 37 b2i_ds_1_1- inner node disablement + // 38 lbff_crop_espa_1_4- inner node disablement + // 39 tnr7_spatial_1_1- inner node disablement + // 40 tnr_scaler_lb_1_1- inner node disablement + // 41 tnr7_ims_1_2- inner node disablement + // 42 gmv_statistics_1_1- inner node disablement + // 43 odr_gmv_feature_1_4- inner node disablement + // 44 odr_gmv_match_1_4- inner node disablement + // 45 ifd_segmap_tnr_bc_1_4- inner node disablement + // 46 smurf_tnr_bc_1_0- inner node disablement + // 47 tnr7_bc_1_2- inner node disablement + // 48 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 49 ifd_segmap_tnr_blend_1_4- inner node disablement + // 50 smurf_tnr_blend_1_0- inner node disablement + // 51 tnr7_blend_1_1- inner node disablement + // 52 odr_tnr_fp_yuvn_1_4- inner node disablement + // 53 tnr_scaler_fp_1_1- inner node disablement + // 54 image_upscaler_1_1- inner node disablement + // 55 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 56 ifd_segmap_cas_1_4- inner node disablement + // 57 smurf_cas_1_0- inner node disablement + // 58 cas_1_1- inner node disablement + // 59 odr_ofs_mp_1_4- inner node disablement + // 60 b2i_ds_output_1_1- inner node disablement + // 61 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000067FCBD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E1FFFFFFFFFEED9BF1F1 + bitmaps.deb[0] = 0xED9BF1F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFF21E9F + bitmaps.teb[0] = 0xFFF21E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F67FE7 + bitmaps.reb[0] = 0xF2F67FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void IsysPdaf2WithCvOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) { + // No inner nodes + (void)nodeInnerOptions; +} + +void LbffBayerPdaf2NoGmvNoTnrWithSapOuterNode::setInnerNode( + InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 46; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000064009D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1E00000FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F000009F + bitmaps.teb[0] = 0xF000009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_pdaf_1_4- inner node disablement + // 18 pext_1_0- inner node disablement + // 19 pafstatistics_1_2- inner node disablement + // 20 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFE00; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000044019D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x44019D; + // DEB - 0x000000000000C1E00000FFFEEDDBFFF1 + bitmaps.deb[0] = 0xEDDBFFF1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E0003F9F + bitmaps.teb[0] = 0xE0003F9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F77FE7 + bitmaps.reb[0] = 0x16F77FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 43 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x80000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000044009D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1E00000FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E000009F + bitmaps.teb[0] = 0xE000009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_pdaf_1_4- inner node disablement + // 18 pext_1_0- inner node disablement + // 19 pafstatistics_1_2- inner node disablement + // 20 odr_pdaf_1_4- inner node disablement + // 43 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x800001FFE00; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000024019D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x24019D; + // DEB - 0x00000000000021E00000FFFEEDDBFFF1 + bitmaps.deb[0] = 0xEDDBFFF1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D0003F9F + bitmaps.teb[0] = 0xD0003F9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F77FE7 + bitmaps.reb[0] = 0x16F77FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 44 b2i_ds_output_1_1- inner node disablement + // 45 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x300000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000024009D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021E00000FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D000009F + bitmaps.teb[0] = 0xD000009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_pdaf_1_4- inner node disablement + // 18 pext_1_0- inner node disablement + // 19 pafstatistics_1_2- inner node disablement + // 20 odr_pdaf_1_4- inner node disablement + // 44 b2i_ds_output_1_1- inner node disablement + // 45 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3000001FFE00; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000180001E6811 + bitmaps.rbm[0] = 0x1E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001DBFFF1 + bitmaps.deb[0] = 0x1DBFFF1; + // TEB - 0x0000000000003F97 + bitmaps.teb[0] = 0x3F97; + // REB - 0x00000000000000000000000006017FE7 + bitmaps.reb[0] = 0x6017FE7; + + // Kernels disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 21 ifd_segmap_bnlm_1_4- inner node disablement + // 22 smurf_bnlm_1_0- inner node disablement + // 23 bnlm_3_4- inner node disablement + // 24 bxt_demosaic- inner node disablement + // 25 vcsc_2_0_b- inner node disablement + // 26 gltm_2_0- inner node disablement + // 27 ifd_segmap_xnr_1_4- inner node disablement + // 28 smurf_xnr_1_0- inner node disablement + // 29 xnr_5_4- inner node disablement + // 30 vcr_3_1- inner node disablement + // 31 glim_2_0- inner node disablement + // 32 ifd_segmap_acm_1_4- inner node disablement + // 33 smurf_acm_1_0- inner node disablement + // 34 acm_1_2- inner node disablement + // 35 gammatm_v4- inner node disablement + // 36 csc_1_1- inner node disablement + // 37 b2i_ds_1_1- inner node disablement + // 38 lbff_crop_espa_1_4- inner node disablement + // 39 image_upscaler_1_1- inner node disablement + // 40 ifd_segmap_cas_1_4- inner node disablement + // 41 smurf_cas_1_0- inner node disablement + // 42 cas_1_1- inner node disablement + // 43 odr_ofs_mp_1_4- inner node disablement + // 44 b2i_ds_output_1_1- inner node disablement + // 45 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFE00180; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgb_ir_2_0- inner node disablement + // 5 ifd_lsc_1_4- inner node disablement + // 6 lsc_1_2- inner node disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_pdaf_1_4- inner node disablement + // 18 pext_1_0- inner node disablement + // 19 pafstatistics_1_2- inner node disablement + // 20 odr_pdaf_1_4- inner node disablement + // 21 ifd_segmap_bnlm_1_4- inner node disablement + // 22 smurf_bnlm_1_0- inner node disablement + // 23 bnlm_3_4- inner node disablement + // 24 bxt_demosaic- inner node disablement + // 25 vcsc_2_0_b- inner node disablement + // 26 gltm_2_0- inner node disablement + // 27 ifd_segmap_xnr_1_4- inner node disablement + // 28 smurf_xnr_1_0- inner node disablement + // 29 xnr_5_4- inner node disablement + // 30 vcr_3_1- inner node disablement + // 31 glim_2_0- inner node disablement + // 32 ifd_segmap_acm_1_4- inner node disablement + // 33 smurf_acm_1_0- inner node disablement + // 34 acm_1_2- inner node disablement + // 35 gammatm_v4- inner node disablement + // 36 csc_1_1- inner node disablement + // 37 b2i_ds_1_1- inner node disablement + // 38 lbff_crop_espa_1_4- inner node disablement + // 39 image_upscaler_1_1- inner node disablement + // 40 ifd_segmap_cas_1_4- inner node disablement + // 41 smurf_cas_1_0- inner node disablement + // 42 cas_1_1- inner node disablement + // 43 odr_ofs_mp_1_4- inner node disablement + // 44 b2i_ds_output_1_1- inner node disablement + // 45 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000064019D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x64019D; + // DEB - 0x000000000000E1E00000FFFEEDDBFFF1 + bitmaps.deb[0] = 0xEDDBFFF1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F0003F9F + bitmaps.teb[0] = 0xF0003F9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F77FE7 + bitmaps.reb[0] = 0x16F77FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf2WithGmvNoTnrWithSapOuterNode::setInnerNode( + InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 50; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x0000000000000000006400BD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E1E0000FFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F032009F + bitmaps.teb[0] = 0xF032009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_pdaf_1_4- inner node disablement + // 18 pext_1_0- inner node disablement + // 19 pafstatistics_1_2- inner node disablement + // 20 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFE00; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x0000000000000000004401BD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x4401BD; + // DEB - 0x000000000000C1E0000FFFFEEDDBFFF1 + bitmaps.deb[0] = 0xEDDBFFF1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E0323F9F + bitmaps.teb[0] = 0xE0323F9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F77FE7 + bitmaps.reb[0] = 0x16F77FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 47 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x800000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x0000000000000000004400BD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C1E0000FFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E032009F + bitmaps.teb[0] = 0xE032009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_pdaf_1_4- inner node disablement + // 18 pext_1_0- inner node disablement + // 19 pafstatistics_1_2- inner node disablement + // 20 odr_pdaf_1_4- inner node disablement + // 47 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x8000001FFE00; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x0000000000000000002401BD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x2401BD; + // DEB - 0x00000000000021E0000FFFFEEDDBFFF1 + bitmaps.deb[0] = 0xEDDBFFF1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D0323F9F + bitmaps.teb[0] = 0xD0323F9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F77FE7 + bitmaps.reb[0] = 0x16F77FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 48 b2i_ds_output_1_1- inner node disablement + // 49 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x0000000000000000002400BD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x00000000000021E0000FFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D032009F + bitmaps.teb[0] = 0xD032009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607E7 + bitmaps.reb[0] = 0x12F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_pdaf_1_4- inner node disablement + // 18 pext_1_0- inner node disablement + // 19 pafstatistics_1_2- inner node disablement + // 20 odr_pdaf_1_4- inner node disablement + // 48 b2i_ds_output_1_1- inner node disablement + // 49 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x30000001FFE00; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000180001E6811 + bitmaps.rbm[0] = 0x1E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001DBFFF1 + bitmaps.deb[0] = 0x1DBFFF1; + // TEB - 0x0000000000003F97 + bitmaps.teb[0] = 0x3F97; + // REB - 0x00000000000000000000000006017FE7 + bitmaps.reb[0] = 0x6017FE7; + + // Kernels disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 21 ifd_gmv_1_4- inner node disablement + // 22 ifd_segmap_bnlm_1_4- inner node disablement + // 23 smurf_bnlm_1_0- inner node disablement + // 24 bnlm_3_4- inner node disablement + // 25 bxt_demosaic- inner node disablement + // 26 vcsc_2_0_b- inner node disablement + // 27 gltm_2_0- inner node disablement + // 28 ifd_segmap_xnr_1_4- inner node disablement + // 29 smurf_xnr_1_0- inner node disablement + // 30 xnr_5_4- inner node disablement + // 31 vcr_3_1- inner node disablement + // 32 glim_2_0- inner node disablement + // 33 ifd_segmap_acm_1_4- inner node disablement + // 34 smurf_acm_1_0- inner node disablement + // 35 acm_1_2- inner node disablement + // 36 gammatm_v4- inner node disablement + // 37 csc_1_1- inner node disablement + // 38 b2i_ds_1_1- inner node disablement + // 39 lbff_crop_espa_1_4- inner node disablement + // 40 image_upscaler_1_1- inner node disablement + // 41 gmv_statistics_1_1- inner node disablement + // 42 odr_gmv_feature_1_4- inner node disablement + // 43 odr_gmv_match_1_4- inner node disablement + // 44 ifd_segmap_cas_1_4- inner node disablement + // 45 smurf_cas_1_0- inner node disablement + // 46 cas_1_1- inner node disablement + // 47 odr_ofs_mp_1_4- inner node disablement + // 48 b2i_ds_output_1_1- inner node disablement + // 49 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFE00180; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgb_ir_2_0- inner node disablement + // 5 ifd_lsc_1_4- inner node disablement + // 6 lsc_1_2- inner node disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_pdaf_1_4- inner node disablement + // 18 pext_1_0- inner node disablement + // 19 pafstatistics_1_2- inner node disablement + // 20 odr_pdaf_1_4- inner node disablement + // 21 ifd_gmv_1_4- inner node disablement + // 22 ifd_segmap_bnlm_1_4- inner node disablement + // 23 smurf_bnlm_1_0- inner node disablement + // 24 bnlm_3_4- inner node disablement + // 25 bxt_demosaic- inner node disablement + // 26 vcsc_2_0_b- inner node disablement + // 27 gltm_2_0- inner node disablement + // 28 ifd_segmap_xnr_1_4- inner node disablement + // 29 smurf_xnr_1_0- inner node disablement + // 30 xnr_5_4- inner node disablement + // 31 vcr_3_1- inner node disablement + // 32 glim_2_0- inner node disablement + // 33 ifd_segmap_acm_1_4- inner node disablement + // 34 smurf_acm_1_0- inner node disablement + // 35 acm_1_2- inner node disablement + // 36 gammatm_v4- inner node disablement + // 37 csc_1_1- inner node disablement + // 38 b2i_ds_1_1- inner node disablement + // 39 lbff_crop_espa_1_4- inner node disablement + // 40 image_upscaler_1_1- inner node disablement + // 41 gmv_statistics_1_1- inner node disablement + // 42 odr_gmv_feature_1_4- inner node disablement + // 43 odr_gmv_match_1_4- inner node disablement + // 44 ifd_segmap_cas_1_4- inner node disablement + // 45 smurf_cas_1_0- inner node disablement + // 46 cas_1_1- inner node disablement + // 47 odr_ofs_mp_1_4- inner node disablement + // 48 b2i_ds_output_1_1- inner node disablement + // 49 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x0000000000000000006401BD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x6401BD; + // DEB - 0x000000000000E1E0000FFFFEEDDBFFF1 + bitmaps.deb[0] = 0xEDDBFFF1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F0323F9F + bitmaps.teb[0] = 0xF0323F9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F77FE7 + bitmaps.reb[0] = 0x16F77FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf2NoGmvWithTnrWithSapOuterNode::setInnerNode( + InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 62; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000067FC9D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E1FFFFF0FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFC0009F + bitmaps.teb[0] = 0xFFC0009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_pdaf_1_4- inner node disablement + // 18 pext_1_0- inner node disablement + // 19 pafstatistics_1_2- inner node disablement + // 20 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFE00; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FD9D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x47FD9D; + // DEB - 0x000000000000C1FFFFF0FFFEEDDBFFF1 + bitmaps.deb[0] = 0xEDDBFFF1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFC03F9F + bitmaps.teb[0] = 0xEFC03F9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F77FE7 + bitmaps.reb[0] = 0xF6F77FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 59 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x800000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C1FFFFF0FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFC0009F + bitmaps.teb[0] = 0xEFC0009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_pdaf_1_4- inner node disablement + // 18 pext_1_0- inner node disablement + // 19 pafstatistics_1_2- inner node disablement + // 20 odr_pdaf_1_4- inner node disablement + // 59 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x8000000001FFE00; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FD9D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x27FD9D; + // DEB - 0x00000000000021FFFFF0FFFEEDDBFFF1 + bitmaps.deb[0] = 0xEDDBFFF1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFC03F9F + bitmaps.teb[0] = 0xDFC03F9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F77FE7 + bitmaps.reb[0] = 0xF6F77FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 60 b2i_ds_output_1_1- inner node disablement + // 61 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3000000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x00000000000021FFFFF0FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFC0009F + bitmaps.teb[0] = 0xDFC0009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_pdaf_1_4- inner node disablement + // 18 pext_1_0- inner node disablement + // 19 pafstatistics_1_2- inner node disablement + // 20 odr_pdaf_1_4- inner node disablement + // 60 b2i_ds_output_1_1- inner node disablement + // 61 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x30000000001FFE00; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000180001E6811 + bitmaps.rbm[0] = 0x1E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001DBFFF1 + bitmaps.deb[0] = 0x1DBFFF1; + // TEB - 0x0000000000003F97 + bitmaps.teb[0] = 0x3F97; + // REB - 0x00000000000000000000000006017FE7 + bitmaps.reb[0] = 0x6017FE7; + + // Kernels disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 21 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 22 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 23 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 24 ifd_segmap_bnlm_1_4- inner node disablement + // 25 smurf_bnlm_1_0- inner node disablement + // 26 bnlm_3_4- inner node disablement + // 27 bxt_demosaic- inner node disablement + // 28 vcsc_2_0_b- inner node disablement + // 29 gltm_2_0- inner node disablement + // 30 ifd_segmap_xnr_1_4- inner node disablement + // 31 smurf_xnr_1_0- inner node disablement + // 32 xnr_5_4- inner node disablement + // 33 vcr_3_1- inner node disablement + // 34 glim_2_0- inner node disablement + // 35 ifd_segmap_acm_1_4- inner node disablement + // 36 smurf_acm_1_0- inner node disablement + // 37 acm_1_2- inner node disablement + // 38 gammatm_v4- inner node disablement + // 39 csc_1_1- inner node disablement + // 40 b2i_ds_1_1- inner node disablement + // 41 lbff_crop_espa_1_4- inner node disablement + // 42 tnr7_spatial_1_1- inner node disablement + // 43 tnr_scaler_lb_1_1- inner node disablement + // 44 tnr7_ims_1_2- inner node disablement + // 45 ifd_segmap_tnr_bc_1_4- inner node disablement + // 46 smurf_tnr_bc_1_0- inner node disablement + // 47 tnr7_bc_1_2- inner node disablement + // 48 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 49 ifd_segmap_tnr_blend_1_4- inner node disablement + // 50 smurf_tnr_blend_1_0- inner node disablement + // 51 tnr7_blend_1_1- inner node disablement + // 52 odr_tnr_fp_yuvn_1_4- inner node disablement + // 53 tnr_scaler_fp_1_1- inner node disablement + // 54 image_upscaler_1_1- inner node disablement + // 55 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 56 ifd_segmap_cas_1_4- inner node disablement + // 57 smurf_cas_1_0- inner node disablement + // 58 cas_1_1- inner node disablement + // 59 odr_ofs_mp_1_4- inner node disablement + // 60 b2i_ds_output_1_1- inner node disablement + // 61 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFE00180; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgb_ir_2_0- inner node disablement + // 5 ifd_lsc_1_4- inner node disablement + // 6 lsc_1_2- inner node disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_pdaf_1_4- inner node disablement + // 18 pext_1_0- inner node disablement + // 19 pafstatistics_1_2- inner node disablement + // 20 odr_pdaf_1_4- inner node disablement + // 21 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 22 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 23 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 24 ifd_segmap_bnlm_1_4- inner node disablement + // 25 smurf_bnlm_1_0- inner node disablement + // 26 bnlm_3_4- inner node disablement + // 27 bxt_demosaic- inner node disablement + // 28 vcsc_2_0_b- inner node disablement + // 29 gltm_2_0- inner node disablement + // 30 ifd_segmap_xnr_1_4- inner node disablement + // 31 smurf_xnr_1_0- inner node disablement + // 32 xnr_5_4- inner node disablement + // 33 vcr_3_1- inner node disablement + // 34 glim_2_0- inner node disablement + // 35 ifd_segmap_acm_1_4- inner node disablement + // 36 smurf_acm_1_0- inner node disablement + // 37 acm_1_2- inner node disablement + // 38 gammatm_v4- inner node disablement + // 39 csc_1_1- inner node disablement + // 40 b2i_ds_1_1- inner node disablement + // 41 lbff_crop_espa_1_4- inner node disablement + // 42 tnr7_spatial_1_1- inner node disablement + // 43 tnr_scaler_lb_1_1- inner node disablement + // 44 tnr7_ims_1_2- inner node disablement + // 45 ifd_segmap_tnr_bc_1_4- inner node disablement + // 46 smurf_tnr_bc_1_0- inner node disablement + // 47 tnr7_bc_1_2- inner node disablement + // 48 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 49 ifd_segmap_tnr_blend_1_4- inner node disablement + // 50 smurf_tnr_blend_1_0- inner node disablement + // 51 tnr7_blend_1_1- inner node disablement + // 52 odr_tnr_fp_yuvn_1_4- inner node disablement + // 53 tnr_scaler_fp_1_1- inner node disablement + // 54 image_upscaler_1_1- inner node disablement + // 55 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 56 ifd_segmap_cas_1_4- inner node disablement + // 57 smurf_cas_1_0- inner node disablement + // 58 cas_1_1- inner node disablement + // 59 odr_ofs_mp_1_4- inner node disablement + // 60 b2i_ds_output_1_1- inner node disablement + // 61 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000067FD9D501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x67FD9D; + // DEB - 0x000000000000E1FFFFF0FFFEEDDBFFF1 + bitmaps.deb[0] = 0xEDDBFFF1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFC03F9F + bitmaps.teb[0] = 0xFFC03F9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F77FE7 + bitmaps.reb[0] = 0xF6F77FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf2WithGmvWithTnrWithSapOuterNode::setInnerNode( + InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 66; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[4].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000067FCBD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E1FFFFFFFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFF2009F + bitmaps.teb[0] = 0xFFF2009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_pdaf_1_4- inner node disablement + // 18 pext_1_0- inner node disablement + // 19 pafstatistics_1_2- inner node disablement + // 20 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFE00; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FDBD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x47FDBD; + // DEB - 0x000000000000C1FFFFFFFFFEEDDBFFF1 + bitmaps.deb[0] = 0xEDDBFFF1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFF23F9F + bitmaps.teb[0] = 0xEFF23F9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F77FE7 + bitmaps.reb[0] = 0xF6F77FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 63 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x8000000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C1FFFFFFFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFF2009F + bitmaps.teb[0] = 0xEFF2009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_pdaf_1_4- inner node disablement + // 18 pext_1_0- inner node disablement + // 19 pafstatistics_1_2- inner node disablement + // 20 odr_pdaf_1_4- inner node disablement + // 63 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x80000000001FFE00; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FDBD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x27FDBD; + // DEB - 0x00000000000021FFFFFFFFFEEDDBFFF1 + bitmaps.deb[0] = 0xEDDBFFF1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFF23F9F + bitmaps.teb[0] = 0xDFF23F9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F77FE7 + bitmaps.reb[0] = 0xF6F77FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 64 b2i_ds_output_1_1- inner node disablement + // 65 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[1] = 0x3; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x00000000000021FFFFFFFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFF2009F + bitmaps.teb[0] = 0xDFF2009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607E7 + bitmaps.reb[0] = 0xF2F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_pdaf_1_4- inner node disablement + // 18 pext_1_0- inner node disablement + // 19 pafstatistics_1_2- inner node disablement + // 20 odr_pdaf_1_4- inner node disablement + // 64 b2i_ds_output_1_1- inner node disablement + // 65 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFE00; + disabledRunKernelsBitmap[1] = 0x3; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000180001E6811 + bitmaps.rbm[0] = 0x1E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001DBFFF1 + bitmaps.deb[0] = 0x1DBFFF1; + // TEB - 0x0000000000003F97 + bitmaps.teb[0] = 0x3F97; + // REB - 0x00000000000000000000000006017FE7 + bitmaps.reb[0] = 0x6017FE7; + + // Kernels disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 21 ifd_gmv_1_4- inner node disablement + // 22 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 23 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 24 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 25 ifd_segmap_bnlm_1_4- inner node disablement + // 26 smurf_bnlm_1_0- inner node disablement + // 27 bnlm_3_4- inner node disablement + // 28 bxt_demosaic- inner node disablement + // 29 vcsc_2_0_b- inner node disablement + // 30 gltm_2_0- inner node disablement + // 31 ifd_segmap_xnr_1_4- inner node disablement + // 32 smurf_xnr_1_0- inner node disablement + // 33 xnr_5_4- inner node disablement + // 34 vcr_3_1- inner node disablement + // 35 glim_2_0- inner node disablement + // 36 ifd_segmap_acm_1_4- inner node disablement + // 37 smurf_acm_1_0- inner node disablement + // 38 acm_1_2- inner node disablement + // 39 gammatm_v4- inner node disablement + // 40 csc_1_1- inner node disablement + // 41 b2i_ds_1_1- inner node disablement + // 42 lbff_crop_espa_1_4- inner node disablement + // 43 tnr7_spatial_1_1- inner node disablement + // 44 tnr_scaler_lb_1_1- inner node disablement + // 45 tnr7_ims_1_2- inner node disablement + // 46 gmv_statistics_1_1- inner node disablement + // 47 odr_gmv_feature_1_4- inner node disablement + // 48 odr_gmv_match_1_4- inner node disablement + // 49 ifd_segmap_tnr_bc_1_4- inner node disablement + // 50 smurf_tnr_bc_1_0- inner node disablement + // 51 tnr7_bc_1_2- inner node disablement + // 52 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 53 ifd_segmap_tnr_blend_1_4- inner node disablement + // 54 smurf_tnr_blend_1_0- inner node disablement + // 55 tnr7_blend_1_1- inner node disablement + // 56 odr_tnr_fp_yuvn_1_4- inner node disablement + // 57 tnr_scaler_fp_1_1- inner node disablement + // 58 image_upscaler_1_1- inner node disablement + // 59 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 60 ifd_segmap_cas_1_4- inner node disablement + // 61 smurf_cas_1_0- inner node disablement + // 62 cas_1_1- inner node disablement + // 63 odr_ofs_mp_1_4- inner node disablement + // 64 b2i_ds_output_1_1- inner node disablement + // 65 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFE00180; + disabledRunKernelsBitmap[1] = 0x3; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgb_ir_2_0- inner node disablement + // 5 ifd_lsc_1_4- inner node disablement + // 6 lsc_1_2- inner node disablement + // 7 gd_2_2- inner node disablement + // 8 wb_1_1- inner node disablement + // 9 rgbs_grid_1_1- inner node disablement + // 10 ccm_3a_2_0- inner node disablement + // 11 fr_grid_1_0- inner node disablement + // 12 odr_awb_std_1_4- inner node disablement + // 13 odr_awb_sat_1_4- inner node disablement + // 14 aestatistics_2_1- inner node disablement + // 15 odr_ae_1_4- inner node disablement + // 16 odr_af_std_1_4- inner node disablement + // 17 ifd_pdaf_1_4- inner node disablement + // 18 pext_1_0- inner node disablement + // 19 pafstatistics_1_2- inner node disablement + // 20 odr_pdaf_1_4- inner node disablement + // 21 ifd_gmv_1_4- inner node disablement + // 22 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 23 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 24 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 25 ifd_segmap_bnlm_1_4- inner node disablement + // 26 smurf_bnlm_1_0- inner node disablement + // 27 bnlm_3_4- inner node disablement + // 28 bxt_demosaic- inner node disablement + // 29 vcsc_2_0_b- inner node disablement + // 30 gltm_2_0- inner node disablement + // 31 ifd_segmap_xnr_1_4- inner node disablement + // 32 smurf_xnr_1_0- inner node disablement + // 33 xnr_5_4- inner node disablement + // 34 vcr_3_1- inner node disablement + // 35 glim_2_0- inner node disablement + // 36 ifd_segmap_acm_1_4- inner node disablement + // 37 smurf_acm_1_0- inner node disablement + // 38 acm_1_2- inner node disablement + // 39 gammatm_v4- inner node disablement + // 40 csc_1_1- inner node disablement + // 41 b2i_ds_1_1- inner node disablement + // 42 lbff_crop_espa_1_4- inner node disablement + // 43 tnr7_spatial_1_1- inner node disablement + // 44 tnr_scaler_lb_1_1- inner node disablement + // 45 tnr7_ims_1_2- inner node disablement + // 46 gmv_statistics_1_1- inner node disablement + // 47 odr_gmv_feature_1_4- inner node disablement + // 48 odr_gmv_match_1_4- inner node disablement + // 49 ifd_segmap_tnr_bc_1_4- inner node disablement + // 50 smurf_tnr_bc_1_0- inner node disablement + // 51 tnr7_bc_1_2- inner node disablement + // 52 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 53 ifd_segmap_tnr_blend_1_4- inner node disablement + // 54 smurf_tnr_blend_1_0- inner node disablement + // 55 tnr7_blend_1_1- inner node disablement + // 56 odr_tnr_fp_yuvn_1_4- inner node disablement + // 57 tnr_scaler_fp_1_1- inner node disablement + // 58 image_upscaler_1_1- inner node disablement + // 59 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 60 ifd_segmap_cas_1_4- inner node disablement + // 61 smurf_cas_1_0- inner node disablement + // 62 cas_1_1- inner node disablement + // 63 odr_ofs_mp_1_4- inner node disablement + // 64 b2i_ds_output_1_1- inner node disablement + // 65 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFFFFFFF; + disabledRunKernelsBitmap[1] = 0x3; + } else // default inner node + { + // RBM - 0x00000000000000000067FDBD501F6811 + bitmaps.rbm[0] = 0x501F6811; + bitmaps.rbm[1] = 0x67FDBD; + // DEB - 0x000000000000E1FFFFFFFFFEEDDBFFF1 + bitmaps.deb[0] = 0xEDDBFFF1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFF23F9F + bitmaps.teb[0] = 0xFFF23F9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F77FE7 + bitmaps.reb[0] = 0xF6F77FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf3NoGmvNoTnrWithSapOuterNode::setInnerNode( + InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 45; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000064009D58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1E00000FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F000009F + bitmaps.teb[0] = 0xF000009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F787E7 + bitmaps.reb[0] = 0x16F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 12 rgbs_grid_1_1- inner node disablement + // 13 ccm_3a_2_0- inner node disablement + // 14 fr_grid_1_0- inner node disablement + // 15 odr_awb_std_1_4- inner node disablement + // 16 odr_awb_sat_1_4- inner node disablement + // 17 aestatistics_2_1- inner node disablement + // 18 odr_ae_1_4- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFF0D0; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000044019D581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x44019D; + // DEB - 0x000000000000C1E00000FFFEEDDBFDF1 + bitmaps.deb[0] = 0xEDDBFDF1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E0003E9F + bitmaps.teb[0] = 0xE0003E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 42 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x40000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000044009D58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1E00000FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E000009F + bitmaps.teb[0] = 0xE000009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F787E7 + bitmaps.reb[0] = 0x16F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 12 rgbs_grid_1_1- inner node disablement + // 13 ccm_3a_2_0- inner node disablement + // 14 fr_grid_1_0- inner node disablement + // 15 odr_awb_std_1_4- inner node disablement + // 16 odr_awb_sat_1_4- inner node disablement + // 17 aestatistics_2_1- inner node disablement + // 18 odr_ae_1_4- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 42 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x400000FF0D0; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000024019D581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x24019D; + // DEB - 0x00000000000021E00000FFFEEDDBFDF1 + bitmaps.deb[0] = 0xEDDBFDF1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D0003E9F + bitmaps.teb[0] = 0xD0003E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 43 b2i_ds_output_1_1- inner node disablement + // 44 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x180000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000024009D58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021E00000FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D000009F + bitmaps.teb[0] = 0xD000009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F787E7 + bitmaps.reb[0] = 0x16F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 12 rgbs_grid_1_1- inner node disablement + // 13 ccm_3a_2_0- inner node disablement + // 14 fr_grid_1_0- inner node disablement + // 15 odr_awb_std_1_4- inner node disablement + // 16 odr_awb_sat_1_4- inner node disablement + // 17 aestatistics_2_1- inner node disablement + // 18 odr_ae_1_4- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 43 b2i_ds_output_1_1- inner node disablement + // 44 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1800000FF0D0; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000180081E6811 + bitmaps.rbm[0] = 0x81E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001DBFDF1 + bitmaps.deb[0] = 0x1DBFDF1; + // TEB - 0x0000000000003E97 + bitmaps.teb[0] = 0x3E97; + // REB - 0x0000000000000000000000000601FFE7 + bitmaps.reb[0] = 0x601FFE7; + + // Kernels disablement + // 10 gd_2_2- inner node disablement + // 11 wb_1_1- inner node disablement + // 20 ifd_segmap_bnlm_1_4- inner node disablement + // 21 smurf_bnlm_1_0- inner node disablement + // 22 bnlm_3_4- inner node disablement + // 23 bxt_demosaic- inner node disablement + // 24 vcsc_2_0_b- inner node disablement + // 25 gltm_2_0- inner node disablement + // 26 ifd_segmap_xnr_1_4- inner node disablement + // 27 smurf_xnr_1_0- inner node disablement + // 28 xnr_5_4- inner node disablement + // 29 vcr_3_1- inner node disablement + // 30 glim_2_0- inner node disablement + // 31 ifd_segmap_acm_1_4- inner node disablement + // 32 smurf_acm_1_0- inner node disablement + // 33 acm_1_2- inner node disablement + // 34 gammatm_v4- inner node disablement + // 35 csc_1_1- inner node disablement + // 36 b2i_ds_1_1- inner node disablement + // 37 lbff_crop_espa_1_4- inner node disablement + // 38 image_upscaler_1_1- inner node disablement + // 39 ifd_segmap_cas_1_4- inner node disablement + // 40 smurf_cas_1_0- inner node disablement + // 41 cas_1_1- inner node disablement + // 42 odr_ofs_mp_1_4- inner node disablement + // 43 b2i_ds_output_1_1- inner node disablement + // 44 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFF00C00; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 pext_1_0- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 8 ifd_lsc_1_4- inner node disablement + // 9 lsc_1_2- inner node disablement + // 10 gd_2_2- inner node disablement + // 11 wb_1_1- inner node disablement + // 12 rgbs_grid_1_1- inner node disablement + // 13 ccm_3a_2_0- inner node disablement + // 14 fr_grid_1_0- inner node disablement + // 15 odr_awb_std_1_4- inner node disablement + // 16 odr_awb_sat_1_4- inner node disablement + // 17 aestatistics_2_1- inner node disablement + // 18 odr_ae_1_4- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 20 ifd_segmap_bnlm_1_4- inner node disablement + // 21 smurf_bnlm_1_0- inner node disablement + // 22 bnlm_3_4- inner node disablement + // 23 bxt_demosaic- inner node disablement + // 24 vcsc_2_0_b- inner node disablement + // 25 gltm_2_0- inner node disablement + // 26 ifd_segmap_xnr_1_4- inner node disablement + // 27 smurf_xnr_1_0- inner node disablement + // 28 xnr_5_4- inner node disablement + // 29 vcr_3_1- inner node disablement + // 30 glim_2_0- inner node disablement + // 31 ifd_segmap_acm_1_4- inner node disablement + // 32 smurf_acm_1_0- inner node disablement + // 33 acm_1_2- inner node disablement + // 34 gammatm_v4- inner node disablement + // 35 csc_1_1- inner node disablement + // 36 b2i_ds_1_1- inner node disablement + // 37 lbff_crop_espa_1_4- inner node disablement + // 38 image_upscaler_1_1- inner node disablement + // 39 ifd_segmap_cas_1_4- inner node disablement + // 40 smurf_cas_1_0- inner node disablement + // 41 cas_1_1- inner node disablement + // 42 odr_ofs_mp_1_4- inner node disablement + // 43 b2i_ds_output_1_1- inner node disablement + // 44 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000064019D581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x64019D; + // DEB - 0x000000000000E1E00000FFFEEDDBFDF1 + bitmaps.deb[0] = 0xEDDBFDF1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F0003E9F + bitmaps.teb[0] = 0xF0003E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf3WithGmvNoTnrWithSapOuterNode::setInnerNode( + InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 49; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x0000000000000000006400BD58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E1E0000FFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F032009F + bitmaps.teb[0] = 0xF032009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F787E7 + bitmaps.reb[0] = 0x16F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 12 rgbs_grid_1_1- inner node disablement + // 13 ccm_3a_2_0- inner node disablement + // 14 fr_grid_1_0- inner node disablement + // 15 odr_awb_std_1_4- inner node disablement + // 16 odr_awb_sat_1_4- inner node disablement + // 17 aestatistics_2_1- inner node disablement + // 18 odr_ae_1_4- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFF0D0; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x0000000000000000004401BD581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x4401BD; + // DEB - 0x000000000000C1E0000FFFFEEDDBFDF1 + bitmaps.deb[0] = 0xEDDBFDF1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E0323E9F + bitmaps.teb[0] = 0xE0323E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 46 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x400000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x0000000000000000004400BD58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C1E0000FFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E032009F + bitmaps.teb[0] = 0xE032009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F787E7 + bitmaps.reb[0] = 0x16F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 12 rgbs_grid_1_1- inner node disablement + // 13 ccm_3a_2_0- inner node disablement + // 14 fr_grid_1_0- inner node disablement + // 15 odr_awb_std_1_4- inner node disablement + // 16 odr_awb_sat_1_4- inner node disablement + // 17 aestatistics_2_1- inner node disablement + // 18 odr_ae_1_4- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 46 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x4000000FF0D0; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x0000000000000000002401BD581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x2401BD; + // DEB - 0x00000000000021E0000FFFFEEDDBFDF1 + bitmaps.deb[0] = 0xEDDBFDF1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D0323E9F + bitmaps.teb[0] = 0xD0323E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1800000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x0000000000000000002400BD58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x00000000000021E0000FFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D032009F + bitmaps.teb[0] = 0xD032009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F787E7 + bitmaps.reb[0] = 0x16F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 12 rgbs_grid_1_1- inner node disablement + // 13 ccm_3a_2_0- inner node disablement + // 14 fr_grid_1_0- inner node disablement + // 15 odr_awb_std_1_4- inner node disablement + // 16 odr_awb_sat_1_4- inner node disablement + // 17 aestatistics_2_1- inner node disablement + // 18 odr_ae_1_4- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x18000000FF0D0; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000180081E6811 + bitmaps.rbm[0] = 0x81E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001DBFDF1 + bitmaps.deb[0] = 0x1DBFDF1; + // TEB - 0x0000000000003E97 + bitmaps.teb[0] = 0x3E97; + // REB - 0x0000000000000000000000000601FFE7 + bitmaps.reb[0] = 0x601FFE7; + + // Kernels disablement + // 10 gd_2_2- inner node disablement + // 11 wb_1_1- inner node disablement + // 20 ifd_gmv_1_4- inner node disablement + // 21 ifd_segmap_bnlm_1_4- inner node disablement + // 22 smurf_bnlm_1_0- inner node disablement + // 23 bnlm_3_4- inner node disablement + // 24 bxt_demosaic- inner node disablement + // 25 vcsc_2_0_b- inner node disablement + // 26 gltm_2_0- inner node disablement + // 27 ifd_segmap_xnr_1_4- inner node disablement + // 28 smurf_xnr_1_0- inner node disablement + // 29 xnr_5_4- inner node disablement + // 30 vcr_3_1- inner node disablement + // 31 glim_2_0- inner node disablement + // 32 ifd_segmap_acm_1_4- inner node disablement + // 33 smurf_acm_1_0- inner node disablement + // 34 acm_1_2- inner node disablement + // 35 gammatm_v4- inner node disablement + // 36 csc_1_1- inner node disablement + // 37 b2i_ds_1_1- inner node disablement + // 38 lbff_crop_espa_1_4- inner node disablement + // 39 image_upscaler_1_1- inner node disablement + // 40 gmv_statistics_1_1- inner node disablement + // 41 odr_gmv_feature_1_4- inner node disablement + // 42 odr_gmv_match_1_4- inner node disablement + // 43 ifd_segmap_cas_1_4- inner node disablement + // 44 smurf_cas_1_0- inner node disablement + // 45 cas_1_1- inner node disablement + // 46 odr_ofs_mp_1_4- inner node disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFF00C00; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 pext_1_0- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 8 ifd_lsc_1_4- inner node disablement + // 9 lsc_1_2- inner node disablement + // 10 gd_2_2- inner node disablement + // 11 wb_1_1- inner node disablement + // 12 rgbs_grid_1_1- inner node disablement + // 13 ccm_3a_2_0- inner node disablement + // 14 fr_grid_1_0- inner node disablement + // 15 odr_awb_std_1_4- inner node disablement + // 16 odr_awb_sat_1_4- inner node disablement + // 17 aestatistics_2_1- inner node disablement + // 18 odr_ae_1_4- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 20 ifd_gmv_1_4- inner node disablement + // 21 ifd_segmap_bnlm_1_4- inner node disablement + // 22 smurf_bnlm_1_0- inner node disablement + // 23 bnlm_3_4- inner node disablement + // 24 bxt_demosaic- inner node disablement + // 25 vcsc_2_0_b- inner node disablement + // 26 gltm_2_0- inner node disablement + // 27 ifd_segmap_xnr_1_4- inner node disablement + // 28 smurf_xnr_1_0- inner node disablement + // 29 xnr_5_4- inner node disablement + // 30 vcr_3_1- inner node disablement + // 31 glim_2_0- inner node disablement + // 32 ifd_segmap_acm_1_4- inner node disablement + // 33 smurf_acm_1_0- inner node disablement + // 34 acm_1_2- inner node disablement + // 35 gammatm_v4- inner node disablement + // 36 csc_1_1- inner node disablement + // 37 b2i_ds_1_1- inner node disablement + // 38 lbff_crop_espa_1_4- inner node disablement + // 39 image_upscaler_1_1- inner node disablement + // 40 gmv_statistics_1_1- inner node disablement + // 41 odr_gmv_feature_1_4- inner node disablement + // 42 odr_gmv_match_1_4- inner node disablement + // 43 ifd_segmap_cas_1_4- inner node disablement + // 44 smurf_cas_1_0- inner node disablement + // 45 cas_1_1- inner node disablement + // 46 odr_ofs_mp_1_4- inner node disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x0000000000000000006401BD581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x6401BD; + // DEB - 0x000000000000E1E0000FFFFEEDDBFDF1 + bitmaps.deb[0] = 0xEDDBFDF1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F0323E9F + bitmaps.teb[0] = 0xF0323E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf3NoGmvWithTnrWithSapOuterNode::setInnerNode( + InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 61; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000067FC9D58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E1FFFFF0FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFC0009F + bitmaps.teb[0] = 0xFFC0009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F787E7 + bitmaps.reb[0] = 0xF6F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 12 rgbs_grid_1_1- inner node disablement + // 13 ccm_3a_2_0- inner node disablement + // 14 fr_grid_1_0- inner node disablement + // 15 odr_awb_std_1_4- inner node disablement + // 16 odr_awb_sat_1_4- inner node disablement + // 17 aestatistics_2_1- inner node disablement + // 18 odr_ae_1_4- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFF0D0; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FD9D581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x47FD9D; + // DEB - 0x000000000000C1FFFFF0FFFEEDDBFDF1 + bitmaps.deb[0] = 0xEDDBFDF1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFC03E9F + bitmaps.teb[0] = 0xEFC03E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 58 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x400000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C1FFFFF0FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFC0009F + bitmaps.teb[0] = 0xEFC0009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F787E7 + bitmaps.reb[0] = 0xF6F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 12 rgbs_grid_1_1- inner node disablement + // 13 ccm_3a_2_0- inner node disablement + // 14 fr_grid_1_0- inner node disablement + // 15 odr_awb_std_1_4- inner node disablement + // 16 odr_awb_sat_1_4- inner node disablement + // 17 aestatistics_2_1- inner node disablement + // 18 odr_ae_1_4- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 58 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x4000000000FF0D0; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FD9D581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x27FD9D; + // DEB - 0x00000000000021FFFFF0FFFEEDDBFDF1 + bitmaps.deb[0] = 0xEDDBFDF1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFC03E9F + bitmaps.teb[0] = 0xDFC03E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 59 b2i_ds_output_1_1- inner node disablement + // 60 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1800000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x00000000000021FFFFF0FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFC0009F + bitmaps.teb[0] = 0xDFC0009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F787E7 + bitmaps.reb[0] = 0xF6F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 12 rgbs_grid_1_1- inner node disablement + // 13 ccm_3a_2_0- inner node disablement + // 14 fr_grid_1_0- inner node disablement + // 15 odr_awb_std_1_4- inner node disablement + // 16 odr_awb_sat_1_4- inner node disablement + // 17 aestatistics_2_1- inner node disablement + // 18 odr_ae_1_4- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 59 b2i_ds_output_1_1- inner node disablement + // 60 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x18000000000FF0D0; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000180081E6811 + bitmaps.rbm[0] = 0x81E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001DBFDF1 + bitmaps.deb[0] = 0x1DBFDF1; + // TEB - 0x0000000000003E97 + bitmaps.teb[0] = 0x3E97; + // REB - 0x0000000000000000000000000601FFE7 + bitmaps.reb[0] = 0x601FFE7; + + // Kernels disablement + // 10 gd_2_2- inner node disablement + // 11 wb_1_1- inner node disablement + // 20 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 21 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 22 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 23 ifd_segmap_bnlm_1_4- inner node disablement + // 24 smurf_bnlm_1_0- inner node disablement + // 25 bnlm_3_4- inner node disablement + // 26 bxt_demosaic- inner node disablement + // 27 vcsc_2_0_b- inner node disablement + // 28 gltm_2_0- inner node disablement + // 29 ifd_segmap_xnr_1_4- inner node disablement + // 30 smurf_xnr_1_0- inner node disablement + // 31 xnr_5_4- inner node disablement + // 32 vcr_3_1- inner node disablement + // 33 glim_2_0- inner node disablement + // 34 ifd_segmap_acm_1_4- inner node disablement + // 35 smurf_acm_1_0- inner node disablement + // 36 acm_1_2- inner node disablement + // 37 gammatm_v4- inner node disablement + // 38 csc_1_1- inner node disablement + // 39 b2i_ds_1_1- inner node disablement + // 40 lbff_crop_espa_1_4- inner node disablement + // 41 tnr7_spatial_1_1- inner node disablement + // 42 tnr_scaler_lb_1_1- inner node disablement + // 43 tnr7_ims_1_2- inner node disablement + // 44 ifd_segmap_tnr_bc_1_4- inner node disablement + // 45 smurf_tnr_bc_1_0- inner node disablement + // 46 tnr7_bc_1_2- inner node disablement + // 47 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 48 ifd_segmap_tnr_blend_1_4- inner node disablement + // 49 smurf_tnr_blend_1_0- inner node disablement + // 50 tnr7_blend_1_1- inner node disablement + // 51 odr_tnr_fp_yuvn_1_4- inner node disablement + // 52 tnr_scaler_fp_1_1- inner node disablement + // 53 image_upscaler_1_1- inner node disablement + // 54 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 55 ifd_segmap_cas_1_4- inner node disablement + // 56 smurf_cas_1_0- inner node disablement + // 57 cas_1_1- inner node disablement + // 58 odr_ofs_mp_1_4- inner node disablement + // 59 b2i_ds_output_1_1- inner node disablement + // 60 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFFF00C00; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 pext_1_0- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 8 ifd_lsc_1_4- inner node disablement + // 9 lsc_1_2- inner node disablement + // 10 gd_2_2- inner node disablement + // 11 wb_1_1- inner node disablement + // 12 rgbs_grid_1_1- inner node disablement + // 13 ccm_3a_2_0- inner node disablement + // 14 fr_grid_1_0- inner node disablement + // 15 odr_awb_std_1_4- inner node disablement + // 16 odr_awb_sat_1_4- inner node disablement + // 17 aestatistics_2_1- inner node disablement + // 18 odr_ae_1_4- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 20 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 21 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 22 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 23 ifd_segmap_bnlm_1_4- inner node disablement + // 24 smurf_bnlm_1_0- inner node disablement + // 25 bnlm_3_4- inner node disablement + // 26 bxt_demosaic- inner node disablement + // 27 vcsc_2_0_b- inner node disablement + // 28 gltm_2_0- inner node disablement + // 29 ifd_segmap_xnr_1_4- inner node disablement + // 30 smurf_xnr_1_0- inner node disablement + // 31 xnr_5_4- inner node disablement + // 32 vcr_3_1- inner node disablement + // 33 glim_2_0- inner node disablement + // 34 ifd_segmap_acm_1_4- inner node disablement + // 35 smurf_acm_1_0- inner node disablement + // 36 acm_1_2- inner node disablement + // 37 gammatm_v4- inner node disablement + // 38 csc_1_1- inner node disablement + // 39 b2i_ds_1_1- inner node disablement + // 40 lbff_crop_espa_1_4- inner node disablement + // 41 tnr7_spatial_1_1- inner node disablement + // 42 tnr_scaler_lb_1_1- inner node disablement + // 43 tnr7_ims_1_2- inner node disablement + // 44 ifd_segmap_tnr_bc_1_4- inner node disablement + // 45 smurf_tnr_bc_1_0- inner node disablement + // 46 tnr7_bc_1_2- inner node disablement + // 47 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 48 ifd_segmap_tnr_blend_1_4- inner node disablement + // 49 smurf_tnr_blend_1_0- inner node disablement + // 50 tnr7_blend_1_1- inner node disablement + // 51 odr_tnr_fp_yuvn_1_4- inner node disablement + // 52 tnr_scaler_fp_1_1- inner node disablement + // 53 image_upscaler_1_1- inner node disablement + // 54 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 55 ifd_segmap_cas_1_4- inner node disablement + // 56 smurf_cas_1_0- inner node disablement + // 57 cas_1_1- inner node disablement + // 58 odr_ofs_mp_1_4- inner node disablement + // 59 b2i_ds_output_1_1- inner node disablement + // 60 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000067FD9D581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x67FD9D; + // DEB - 0x000000000000E1FFFFF0FFFEEDDBFDF1 + bitmaps.deb[0] = 0xEDDBFDF1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFC03E9F + bitmaps.teb[0] = 0xFFC03E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf3WithGmvWithTnrWithSapOuterNode::setInnerNode( + InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 65; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000067FCBD58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E1FFFFFFFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFF2009F + bitmaps.teb[0] = 0xFFF2009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F787E7 + bitmaps.reb[0] = 0xF6F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 12 rgbs_grid_1_1- inner node disablement + // 13 ccm_3a_2_0- inner node disablement + // 14 fr_grid_1_0- inner node disablement + // 15 odr_awb_std_1_4- inner node disablement + // 16 odr_awb_sat_1_4- inner node disablement + // 17 aestatistics_2_1- inner node disablement + // 18 odr_ae_1_4- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFF0D0; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FDBD581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x47FDBD; + // DEB - 0x000000000000C1FFFFFFFFFEEDDBFDF1 + bitmaps.deb[0] = 0xEDDBFDF1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFF23E9F + bitmaps.teb[0] = 0xEFF23E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 62 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x4000000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C1FFFFFFFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFF2009F + bitmaps.teb[0] = 0xEFF2009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F787E7 + bitmaps.reb[0] = 0xF6F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 12 rgbs_grid_1_1- inner node disablement + // 13 ccm_3a_2_0- inner node disablement + // 14 fr_grid_1_0- inner node disablement + // 15 odr_awb_std_1_4- inner node disablement + // 16 odr_awb_sat_1_4- inner node disablement + // 17 aestatistics_2_1- inner node disablement + // 18 odr_ae_1_4- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 62 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x40000000000FF0D0; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FDBD581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x27FDBD; + // DEB - 0x00000000000021FFFFFFFFFEEDDBFDF1 + bitmaps.deb[0] = 0xEDDBFDF1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFF23E9F + bitmaps.teb[0] = 0xDFF23E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 63 b2i_ds_output_1_1- inner node disablement + // 64 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x8000000000000000; + disabledRunKernelsBitmap[1] = 0x1; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD58016811 + bitmaps.rbm[0] = 0x58016811; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x00000000000021FFFFFFFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFF2009F + bitmaps.teb[0] = 0xDFF2009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F787E7 + bitmaps.reb[0] = 0xF6F787E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 pext_1_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 12 rgbs_grid_1_1- inner node disablement + // 13 ccm_3a_2_0- inner node disablement + // 14 fr_grid_1_0- inner node disablement + // 15 odr_awb_std_1_4- inner node disablement + // 16 odr_awb_sat_1_4- inner node disablement + // 17 aestatistics_2_1- inner node disablement + // 18 odr_ae_1_4- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 63 b2i_ds_output_1_1- inner node disablement + // 64 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x80000000000FF0D0; + disabledRunKernelsBitmap[1] = 0x1; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000180081E6811 + bitmaps.rbm[0] = 0x81E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001DBFDF1 + bitmaps.deb[0] = 0x1DBFDF1; + // TEB - 0x0000000000003E97 + bitmaps.teb[0] = 0x3E97; + // REB - 0x0000000000000000000000000601FFE7 + bitmaps.reb[0] = 0x601FFE7; + + // Kernels disablement + // 10 gd_2_2- inner node disablement + // 11 wb_1_1- inner node disablement + // 20 ifd_gmv_1_4- inner node disablement + // 21 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 22 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 23 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 24 ifd_segmap_bnlm_1_4- inner node disablement + // 25 smurf_bnlm_1_0- inner node disablement + // 26 bnlm_3_4- inner node disablement + // 27 bxt_demosaic- inner node disablement + // 28 vcsc_2_0_b- inner node disablement + // 29 gltm_2_0- inner node disablement + // 30 ifd_segmap_xnr_1_4- inner node disablement + // 31 smurf_xnr_1_0- inner node disablement + // 32 xnr_5_4- inner node disablement + // 33 vcr_3_1- inner node disablement + // 34 glim_2_0- inner node disablement + // 35 ifd_segmap_acm_1_4- inner node disablement + // 36 smurf_acm_1_0- inner node disablement + // 37 acm_1_2- inner node disablement + // 38 gammatm_v4- inner node disablement + // 39 csc_1_1- inner node disablement + // 40 b2i_ds_1_1- inner node disablement + // 41 lbff_crop_espa_1_4- inner node disablement + // 42 tnr7_spatial_1_1- inner node disablement + // 43 tnr_scaler_lb_1_1- inner node disablement + // 44 tnr7_ims_1_2- inner node disablement + // 45 gmv_statistics_1_1- inner node disablement + // 46 odr_gmv_feature_1_4- inner node disablement + // 47 odr_gmv_match_1_4- inner node disablement + // 48 ifd_segmap_tnr_bc_1_4- inner node disablement + // 49 smurf_tnr_bc_1_0- inner node disablement + // 50 tnr7_bc_1_2- inner node disablement + // 51 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 52 ifd_segmap_tnr_blend_1_4- inner node disablement + // 53 smurf_tnr_blend_1_0- inner node disablement + // 54 tnr7_blend_1_1- inner node disablement + // 55 odr_tnr_fp_yuvn_1_4- inner node disablement + // 56 tnr_scaler_fp_1_1- inner node disablement + // 57 image_upscaler_1_1- inner node disablement + // 58 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 59 ifd_segmap_cas_1_4- inner node disablement + // 60 smurf_cas_1_0- inner node disablement + // 61 cas_1_1- inner node disablement + // 62 odr_ofs_mp_1_4- inner node disablement + // 63 b2i_ds_output_1_1- inner node disablement + // 64 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFF00C00; + disabledRunKernelsBitmap[1] = 0x1; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 pext_1_0- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 pafstatistics_1_2- inner node disablement + // 7 odr_pdaf_1_4- inner node disablement + // 8 ifd_lsc_1_4- inner node disablement + // 9 lsc_1_2- inner node disablement + // 10 gd_2_2- inner node disablement + // 11 wb_1_1- inner node disablement + // 12 rgbs_grid_1_1- inner node disablement + // 13 ccm_3a_2_0- inner node disablement + // 14 fr_grid_1_0- inner node disablement + // 15 odr_awb_std_1_4- inner node disablement + // 16 odr_awb_sat_1_4- inner node disablement + // 17 aestatistics_2_1- inner node disablement + // 18 odr_ae_1_4- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 20 ifd_gmv_1_4- inner node disablement + // 21 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 22 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 23 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 24 ifd_segmap_bnlm_1_4- inner node disablement + // 25 smurf_bnlm_1_0- inner node disablement + // 26 bnlm_3_4- inner node disablement + // 27 bxt_demosaic- inner node disablement + // 28 vcsc_2_0_b- inner node disablement + // 29 gltm_2_0- inner node disablement + // 30 ifd_segmap_xnr_1_4- inner node disablement + // 31 smurf_xnr_1_0- inner node disablement + // 32 xnr_5_4- inner node disablement + // 33 vcr_3_1- inner node disablement + // 34 glim_2_0- inner node disablement + // 35 ifd_segmap_acm_1_4- inner node disablement + // 36 smurf_acm_1_0- inner node disablement + // 37 acm_1_2- inner node disablement + // 38 gammatm_v4- inner node disablement + // 39 csc_1_1- inner node disablement + // 40 b2i_ds_1_1- inner node disablement + // 41 lbff_crop_espa_1_4- inner node disablement + // 42 tnr7_spatial_1_1- inner node disablement + // 43 tnr_scaler_lb_1_1- inner node disablement + // 44 tnr7_ims_1_2- inner node disablement + // 45 gmv_statistics_1_1- inner node disablement + // 46 odr_gmv_feature_1_4- inner node disablement + // 47 odr_gmv_match_1_4- inner node disablement + // 48 ifd_segmap_tnr_bc_1_4- inner node disablement + // 49 smurf_tnr_bc_1_0- inner node disablement + // 50 tnr7_bc_1_2- inner node disablement + // 51 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 52 ifd_segmap_tnr_blend_1_4- inner node disablement + // 53 smurf_tnr_blend_1_0- inner node disablement + // 54 tnr7_blend_1_1- inner node disablement + // 55 odr_tnr_fp_yuvn_1_4- inner node disablement + // 56 tnr_scaler_fp_1_1- inner node disablement + // 57 image_upscaler_1_1- inner node disablement + // 58 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 59 ifd_segmap_cas_1_4- inner node disablement + // 60 smurf_cas_1_0- inner node disablement + // 61 cas_1_1- inner node disablement + // 62 odr_ofs_mp_1_4- inner node disablement + // 63 b2i_ds_output_1_1- inner node disablement + // 64 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFFFFFFF; + disabledRunKernelsBitmap[1] = 0x1; + } else // default inner node + { + // RBM - 0x00000000000000000067FDBD581F6811 + bitmaps.rbm[0] = 0x581F6811; + bitmaps.rbm[1] = 0x67FDBD; + // DEB - 0x000000000000E1FFFFFFFFFEEDDBFDF1 + bitmaps.deb[0] = 0xEDDBFDF1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFF23E9F + bitmaps.teb[0] = 0xFFF23E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void IsysDolWithCvOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) { + // No inner nodes + (void)nodeInnerOptions; +} + +void LbffDol2InputsNoGmvNoTnrWithSapOuterNode::setInnerNode( + InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 45; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[8].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[17].run_kernel.enable = 0; // wb_1_1 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000064009D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1E00000FFFEED8001FB + bitmaps.deb[0] = 0xED8001FB; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F00000BF + bitmaps.teb[0] = 0xF00000BF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 18 fr_grid_1_0- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC3EC0; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000044009D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1E00000FFFEED9FF1FB + bitmaps.deb[0] = 0xED9FF1FB; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E0041EBF + bitmaps.teb[0] = 0xE0041EBF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 42 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x40000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000044009D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1E00000FFFEED8001FB + bitmaps.deb[0] = 0xED8001FB; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E00000BF + bitmaps.teb[0] = 0xE00000BF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 18 fr_grid_1_0- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 42 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x400000C3EC0; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000024009D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021E00000FFFEED9FF1FB + bitmaps.deb[0] = 0xED9FF1FB; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D0041EBF + bitmaps.teb[0] = 0xD0041EBF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 43 b2i_ds_output_1_1- inner node disablement + // 44 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x180000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000024009D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021E00000FFFEED8001FB + bitmaps.deb[0] = 0xED8001FB; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D00000BF + bitmaps.teb[0] = 0xD00000BF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 18 fr_grid_1_0- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 43 b2i_ds_output_1_1- inner node disablement + // 44 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1800000C3EC0; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000008002526E16 + bitmaps.rbm[0] = 0x2526E16; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019FF1FB + bitmaps.deb[0] = 0x19FF1FB; + // TEB - 0x0000000000041EBF + bitmaps.teb[0] = 0x41EBF; + // REB - 0x00000000000000000000000002007FF7 + bitmaps.reb[0] = 0x2007FF7; + + // Kernels disablement + // 16 gd_2_2- inner node disablement + // 17 wb_1_1- inner node disablement + // 20 ifd_segmap_bnlm_1_4- inner node disablement + // 21 smurf_bnlm_1_0- inner node disablement + // 22 bnlm_3_4- inner node disablement + // 23 bxt_demosaic- inner node disablement + // 24 vcsc_2_0_b- inner node disablement + // 25 gltm_2_0- inner node disablement + // 26 ifd_segmap_xnr_1_4- inner node disablement + // 27 smurf_xnr_1_0- inner node disablement + // 28 xnr_5_4- inner node disablement + // 29 vcr_3_1- inner node disablement + // 30 glim_2_0- inner node disablement + // 31 ifd_segmap_acm_1_4- inner node disablement + // 32 smurf_acm_1_0- inner node disablement + // 33 acm_1_2- inner node disablement + // 34 gammatm_v4- inner node disablement + // 35 csc_1_1- inner node disablement + // 36 b2i_ds_1_1- inner node disablement + // 37 lbff_crop_espa_1_4- inner node disablement + // 38 image_upscaler_1_1- inner node disablement + // 39 ifd_segmap_cas_1_4- inner node disablement + // 40 smurf_cas_1_0- inner node disablement + // 41 cas_1_1- inner node disablement + // 42 odr_ofs_mp_1_4- inner node disablement + // 43 b2i_ds_output_1_1- inner node disablement + // 44 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFF30000; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 ifd_pipe_long_1_4- inner node disablement + // 2 dol_lite_1_2- inner node disablement + // 3 bxt_blc- inner node disablement + // 4 linearization2_0- inner node disablement + // 5 dpc_2_2- inner node disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 8 rgb_ir_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 14 ifd_lsc_1_4- inner node disablement + // 15 lsc_1_2- inner node disablement + // 16 gd_2_2- inner node disablement + // 17 wb_1_1- inner node disablement + // 18 fr_grid_1_0- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 20 ifd_segmap_bnlm_1_4- inner node disablement + // 21 smurf_bnlm_1_0- inner node disablement + // 22 bnlm_3_4- inner node disablement + // 23 bxt_demosaic- inner node disablement + // 24 vcsc_2_0_b- inner node disablement + // 25 gltm_2_0- inner node disablement + // 26 ifd_segmap_xnr_1_4- inner node disablement + // 27 smurf_xnr_1_0- inner node disablement + // 28 xnr_5_4- inner node disablement + // 29 vcr_3_1- inner node disablement + // 30 glim_2_0- inner node disablement + // 31 ifd_segmap_acm_1_4- inner node disablement + // 32 smurf_acm_1_0- inner node disablement + // 33 acm_1_2- inner node disablement + // 34 gammatm_v4- inner node disablement + // 35 csc_1_1- inner node disablement + // 36 b2i_ds_1_1- inner node disablement + // 37 lbff_crop_espa_1_4- inner node disablement + // 38 image_upscaler_1_1- inner node disablement + // 39 ifd_segmap_cas_1_4- inner node disablement + // 40 smurf_cas_1_0- inner node disablement + // 41 cas_1_1- inner node disablement + // 42 odr_ofs_mp_1_4- inner node disablement + // 43 b2i_ds_output_1_1- inner node disablement + // 44 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000064009D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1E00000FFFEED9FF1FB + bitmaps.deb[0] = 0xED9FF1FB; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F0041EBF + bitmaps.teb[0] = 0xF0041EBF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffDol2InputsWithGmvNoTnrWithSapOuterNode::setInnerNode( + InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 49; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[8].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[17].run_kernel.enable = 0; // wb_1_1 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x0000000000000000006400BD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E1E0000FFFFEED8001FB + bitmaps.deb[0] = 0xED8001FB; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F03200BF + bitmaps.teb[0] = 0xF03200BF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 18 fr_grid_1_0- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC3EC0; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x0000000000000000004400BD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C1E0000FFFFEED9FF1FB + bitmaps.deb[0] = 0xED9FF1FB; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E0361EBF + bitmaps.teb[0] = 0xE0361EBF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 46 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x400000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x0000000000000000004400BD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C1E0000FFFFEED8001FB + bitmaps.deb[0] = 0xED8001FB; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E03200BF + bitmaps.teb[0] = 0xE03200BF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 18 fr_grid_1_0- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 46 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x4000000C3EC0; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x0000000000000000002400BD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x00000000000021E0000FFFFEED9FF1FB + bitmaps.deb[0] = 0xED9FF1FB; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D0361EBF + bitmaps.teb[0] = 0xD0361EBF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1800000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x0000000000000000002400BD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x00000000000021E0000FFFFEED8001FB + bitmaps.deb[0] = 0xED8001FB; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D03200BF + bitmaps.teb[0] = 0xD03200BF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 18 fr_grid_1_0- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x18000000C3EC0; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000008002526E16 + bitmaps.rbm[0] = 0x2526E16; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019FF1FB + bitmaps.deb[0] = 0x19FF1FB; + // TEB - 0x0000000000041EBF + bitmaps.teb[0] = 0x41EBF; + // REB - 0x00000000000000000000000002007FF7 + bitmaps.reb[0] = 0x2007FF7; + + // Kernels disablement + // 16 gd_2_2- inner node disablement + // 17 wb_1_1- inner node disablement + // 20 ifd_gmv_1_4- inner node disablement + // 21 ifd_segmap_bnlm_1_4- inner node disablement + // 22 smurf_bnlm_1_0- inner node disablement + // 23 bnlm_3_4- inner node disablement + // 24 bxt_demosaic- inner node disablement + // 25 vcsc_2_0_b- inner node disablement + // 26 gltm_2_0- inner node disablement + // 27 ifd_segmap_xnr_1_4- inner node disablement + // 28 smurf_xnr_1_0- inner node disablement + // 29 xnr_5_4- inner node disablement + // 30 vcr_3_1- inner node disablement + // 31 glim_2_0- inner node disablement + // 32 ifd_segmap_acm_1_4- inner node disablement + // 33 smurf_acm_1_0- inner node disablement + // 34 acm_1_2- inner node disablement + // 35 gammatm_v4- inner node disablement + // 36 csc_1_1- inner node disablement + // 37 b2i_ds_1_1- inner node disablement + // 38 lbff_crop_espa_1_4- inner node disablement + // 39 image_upscaler_1_1- inner node disablement + // 40 gmv_statistics_1_1- inner node disablement + // 41 odr_gmv_feature_1_4- inner node disablement + // 42 odr_gmv_match_1_4- inner node disablement + // 43 ifd_segmap_cas_1_4- inner node disablement + // 44 smurf_cas_1_0- inner node disablement + // 45 cas_1_1- inner node disablement + // 46 odr_ofs_mp_1_4- inner node disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFF30000; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 ifd_pipe_long_1_4- inner node disablement + // 2 dol_lite_1_2- inner node disablement + // 3 bxt_blc- inner node disablement + // 4 linearization2_0- inner node disablement + // 5 dpc_2_2- inner node disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 8 rgb_ir_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 14 ifd_lsc_1_4- inner node disablement + // 15 lsc_1_2- inner node disablement + // 16 gd_2_2- inner node disablement + // 17 wb_1_1- inner node disablement + // 18 fr_grid_1_0- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 20 ifd_gmv_1_4- inner node disablement + // 21 ifd_segmap_bnlm_1_4- inner node disablement + // 22 smurf_bnlm_1_0- inner node disablement + // 23 bnlm_3_4- inner node disablement + // 24 bxt_demosaic- inner node disablement + // 25 vcsc_2_0_b- inner node disablement + // 26 gltm_2_0- inner node disablement + // 27 ifd_segmap_xnr_1_4- inner node disablement + // 28 smurf_xnr_1_0- inner node disablement + // 29 xnr_5_4- inner node disablement + // 30 vcr_3_1- inner node disablement + // 31 glim_2_0- inner node disablement + // 32 ifd_segmap_acm_1_4- inner node disablement + // 33 smurf_acm_1_0- inner node disablement + // 34 acm_1_2- inner node disablement + // 35 gammatm_v4- inner node disablement + // 36 csc_1_1- inner node disablement + // 37 b2i_ds_1_1- inner node disablement + // 38 lbff_crop_espa_1_4- inner node disablement + // 39 image_upscaler_1_1- inner node disablement + // 40 gmv_statistics_1_1- inner node disablement + // 41 odr_gmv_feature_1_4- inner node disablement + // 42 odr_gmv_match_1_4- inner node disablement + // 43 ifd_segmap_cas_1_4- inner node disablement + // 44 smurf_cas_1_0- inner node disablement + // 45 cas_1_1- inner node disablement + // 46 odr_ofs_mp_1_4- inner node disablement + // 47 b2i_ds_output_1_1- inner node disablement + // 48 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x0000000000000000006400BD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E1E0000FFFFEED9FF1FB + bitmaps.deb[0] = 0xED9FF1FB; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F0361EBF + bitmaps.teb[0] = 0xF0361EBF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffDol2InputsNoGmvWithTnrWithSapOuterNode::setInnerNode( + InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 61; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[8].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[17].run_kernel.enable = 0; // wb_1_1 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000067FC9D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E1FFFFF0FFFEED8001FB + bitmaps.deb[0] = 0xED8001FB; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFC000BF + bitmaps.teb[0] = 0xFFC000BF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 18 fr_grid_1_0- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC3EC0; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C1FFFFF0FFFEED9FF1FB + bitmaps.deb[0] = 0xED9FF1FB; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFC41EBF + bitmaps.teb[0] = 0xEFC41EBF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 58 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x400000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C1FFFFF0FFFEED8001FB + bitmaps.deb[0] = 0xED8001FB; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFC000BF + bitmaps.teb[0] = 0xEFC000BF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 18 fr_grid_1_0- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 58 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x4000000000C3EC0; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x00000000000021FFFFF0FFFEED9FF1FB + bitmaps.deb[0] = 0xED9FF1FB; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFC41EBF + bitmaps.teb[0] = 0xDFC41EBF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 59 b2i_ds_output_1_1- inner node disablement + // 60 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1800000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x00000000000021FFFFF0FFFEED8001FB + bitmaps.deb[0] = 0xED8001FB; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFC000BF + bitmaps.teb[0] = 0xDFC000BF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 18 fr_grid_1_0- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 59 b2i_ds_output_1_1- inner node disablement + // 60 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x18000000000C3EC0; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000008002526E16 + bitmaps.rbm[0] = 0x2526E16; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019FF1FB + bitmaps.deb[0] = 0x19FF1FB; + // TEB - 0x0000000000041EBF + bitmaps.teb[0] = 0x41EBF; + // REB - 0x00000000000000000000000002007FF7 + bitmaps.reb[0] = 0x2007FF7; + + // Kernels disablement + // 16 gd_2_2- inner node disablement + // 17 wb_1_1- inner node disablement + // 20 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 21 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 22 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 23 ifd_segmap_bnlm_1_4- inner node disablement + // 24 smurf_bnlm_1_0- inner node disablement + // 25 bnlm_3_4- inner node disablement + // 26 bxt_demosaic- inner node disablement + // 27 vcsc_2_0_b- inner node disablement + // 28 gltm_2_0- inner node disablement + // 29 ifd_segmap_xnr_1_4- inner node disablement + // 30 smurf_xnr_1_0- inner node disablement + // 31 xnr_5_4- inner node disablement + // 32 vcr_3_1- inner node disablement + // 33 glim_2_0- inner node disablement + // 34 ifd_segmap_acm_1_4- inner node disablement + // 35 smurf_acm_1_0- inner node disablement + // 36 acm_1_2- inner node disablement + // 37 gammatm_v4- inner node disablement + // 38 csc_1_1- inner node disablement + // 39 b2i_ds_1_1- inner node disablement + // 40 lbff_crop_espa_1_4- inner node disablement + // 41 tnr7_spatial_1_1- inner node disablement + // 42 tnr_scaler_lb_1_1- inner node disablement + // 43 tnr7_ims_1_2- inner node disablement + // 44 ifd_segmap_tnr_bc_1_4- inner node disablement + // 45 smurf_tnr_bc_1_0- inner node disablement + // 46 tnr7_bc_1_2- inner node disablement + // 47 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 48 ifd_segmap_tnr_blend_1_4- inner node disablement + // 49 smurf_tnr_blend_1_0- inner node disablement + // 50 tnr7_blend_1_1- inner node disablement + // 51 odr_tnr_fp_yuvn_1_4- inner node disablement + // 52 tnr_scaler_fp_1_1- inner node disablement + // 53 image_upscaler_1_1- inner node disablement + // 54 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 55 ifd_segmap_cas_1_4- inner node disablement + // 56 smurf_cas_1_0- inner node disablement + // 57 cas_1_1- inner node disablement + // 58 odr_ofs_mp_1_4- inner node disablement + // 59 b2i_ds_output_1_1- inner node disablement + // 60 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFFF30000; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 ifd_pipe_long_1_4- inner node disablement + // 2 dol_lite_1_2- inner node disablement + // 3 bxt_blc- inner node disablement + // 4 linearization2_0- inner node disablement + // 5 dpc_2_2- inner node disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 8 rgb_ir_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 14 ifd_lsc_1_4- inner node disablement + // 15 lsc_1_2- inner node disablement + // 16 gd_2_2- inner node disablement + // 17 wb_1_1- inner node disablement + // 18 fr_grid_1_0- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 20 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 21 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 22 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 23 ifd_segmap_bnlm_1_4- inner node disablement + // 24 smurf_bnlm_1_0- inner node disablement + // 25 bnlm_3_4- inner node disablement + // 26 bxt_demosaic- inner node disablement + // 27 vcsc_2_0_b- inner node disablement + // 28 gltm_2_0- inner node disablement + // 29 ifd_segmap_xnr_1_4- inner node disablement + // 30 smurf_xnr_1_0- inner node disablement + // 31 xnr_5_4- inner node disablement + // 32 vcr_3_1- inner node disablement + // 33 glim_2_0- inner node disablement + // 34 ifd_segmap_acm_1_4- inner node disablement + // 35 smurf_acm_1_0- inner node disablement + // 36 acm_1_2- inner node disablement + // 37 gammatm_v4- inner node disablement + // 38 csc_1_1- inner node disablement + // 39 b2i_ds_1_1- inner node disablement + // 40 lbff_crop_espa_1_4- inner node disablement + // 41 tnr7_spatial_1_1- inner node disablement + // 42 tnr_scaler_lb_1_1- inner node disablement + // 43 tnr7_ims_1_2- inner node disablement + // 44 ifd_segmap_tnr_bc_1_4- inner node disablement + // 45 smurf_tnr_bc_1_0- inner node disablement + // 46 tnr7_bc_1_2- inner node disablement + // 47 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 48 ifd_segmap_tnr_blend_1_4- inner node disablement + // 49 smurf_tnr_blend_1_0- inner node disablement + // 50 tnr7_blend_1_1- inner node disablement + // 51 odr_tnr_fp_yuvn_1_4- inner node disablement + // 52 tnr_scaler_fp_1_1- inner node disablement + // 53 image_upscaler_1_1- inner node disablement + // 54 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 55 ifd_segmap_cas_1_4- inner node disablement + // 56 smurf_cas_1_0- inner node disablement + // 57 cas_1_1- inner node disablement + // 58 odr_ofs_mp_1_4- inner node disablement + // 59 b2i_ds_output_1_1- inner node disablement + // 60 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000067FC9D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E1FFFFF0FFFEED9FF1FB + bitmaps.deb[0] = 0xED9FF1FB; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFC41EBF + bitmaps.teb[0] = 0xFFC41EBF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffDol2InputsWithGmvWithTnrWithSapOuterNode::setInnerNode( + InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 65; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[8].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[17].run_kernel.enable = 0; // wb_1_1 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000067FCBD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E1FFFFFFFFFEED8001FB + bitmaps.deb[0] = 0xED8001FB; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFF200BF + bitmaps.teb[0] = 0xFFF200BF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 18 fr_grid_1_0- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC3EC0; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C1FFFFFFFFFEED9FF1FB + bitmaps.deb[0] = 0xED9FF1FB; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFF61EBF + bitmaps.teb[0] = 0xEFF61EBF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 62 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x4000000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C1FFFFFFFFFEED8001FB + bitmaps.deb[0] = 0xED8001FB; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFF200BF + bitmaps.teb[0] = 0xEFF200BF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 18 fr_grid_1_0- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 62 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x40000000000C3EC0; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x00000000000021FFFFFFFFFEED9FF1FB + bitmaps.deb[0] = 0xED9FF1FB; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFF61EBF + bitmaps.teb[0] = 0xDFF61EBF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 63 b2i_ds_output_1_1- inner node disablement + // 64 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x8000000000000000; + disabledRunKernelsBitmap[1] = 0x1; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x00000000000021FFFFFFFFFEED8001FB + bitmaps.deb[0] = 0xED8001FB; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFF200BF + bitmaps.teb[0] = 0xDFF200BF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 18 fr_grid_1_0- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 63 b2i_ds_output_1_1- inner node disablement + // 64 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x80000000000C3EC0; + disabledRunKernelsBitmap[1] = 0x1; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000008002526E16 + bitmaps.rbm[0] = 0x2526E16; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019FF1FB + bitmaps.deb[0] = 0x19FF1FB; + // TEB - 0x0000000000041EBF + bitmaps.teb[0] = 0x41EBF; + // REB - 0x00000000000000000000000002007FF7 + bitmaps.reb[0] = 0x2007FF7; + + // Kernels disablement + // 16 gd_2_2- inner node disablement + // 17 wb_1_1- inner node disablement + // 20 ifd_gmv_1_4- inner node disablement + // 21 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 22 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 23 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 24 ifd_segmap_bnlm_1_4- inner node disablement + // 25 smurf_bnlm_1_0- inner node disablement + // 26 bnlm_3_4- inner node disablement + // 27 bxt_demosaic- inner node disablement + // 28 vcsc_2_0_b- inner node disablement + // 29 gltm_2_0- inner node disablement + // 30 ifd_segmap_xnr_1_4- inner node disablement + // 31 smurf_xnr_1_0- inner node disablement + // 32 xnr_5_4- inner node disablement + // 33 vcr_3_1- inner node disablement + // 34 glim_2_0- inner node disablement + // 35 ifd_segmap_acm_1_4- inner node disablement + // 36 smurf_acm_1_0- inner node disablement + // 37 acm_1_2- inner node disablement + // 38 gammatm_v4- inner node disablement + // 39 csc_1_1- inner node disablement + // 40 b2i_ds_1_1- inner node disablement + // 41 lbff_crop_espa_1_4- inner node disablement + // 42 tnr7_spatial_1_1- inner node disablement + // 43 tnr_scaler_lb_1_1- inner node disablement + // 44 tnr7_ims_1_2- inner node disablement + // 45 gmv_statistics_1_1- inner node disablement + // 46 odr_gmv_feature_1_4- inner node disablement + // 47 odr_gmv_match_1_4- inner node disablement + // 48 ifd_segmap_tnr_bc_1_4- inner node disablement + // 49 smurf_tnr_bc_1_0- inner node disablement + // 50 tnr7_bc_1_2- inner node disablement + // 51 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 52 ifd_segmap_tnr_blend_1_4- inner node disablement + // 53 smurf_tnr_blend_1_0- inner node disablement + // 54 tnr7_blend_1_1- inner node disablement + // 55 odr_tnr_fp_yuvn_1_4- inner node disablement + // 56 tnr_scaler_fp_1_1- inner node disablement + // 57 image_upscaler_1_1- inner node disablement + // 58 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 59 ifd_segmap_cas_1_4- inner node disablement + // 60 smurf_cas_1_0- inner node disablement + // 61 cas_1_1- inner node disablement + // 62 odr_ofs_mp_1_4- inner node disablement + // 63 b2i_ds_output_1_1- inner node disablement + // 64 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFF30000; + disabledRunKernelsBitmap[1] = 0x1; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 ifd_pipe_long_1_4- inner node disablement + // 2 dol_lite_1_2- inner node disablement + // 3 bxt_blc- inner node disablement + // 4 linearization2_0- inner node disablement + // 5 dpc_2_2- inner node disablement + // 6 rgbs_grid_1_1- inner node disablement + // 7 ccm_3a_2_0- inner node disablement + // 8 rgb_ir_2_0- inner node disablement + // 9 odr_awb_std_1_4- inner node disablement + // 10 odr_awb_sve_1_4- inner node disablement + // 11 odr_awb_sat_1_4- inner node disablement + // 12 aestatistics_2_1- inner node disablement + // 13 odr_ae_1_4- inner node disablement + // 14 ifd_lsc_1_4- inner node disablement + // 15 lsc_1_2- inner node disablement + // 16 gd_2_2- inner node disablement + // 17 wb_1_1- inner node disablement + // 18 fr_grid_1_0- inner node disablement + // 19 odr_af_std_1_4- inner node disablement + // 20 ifd_gmv_1_4- inner node disablement + // 21 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 22 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 23 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 24 ifd_segmap_bnlm_1_4- inner node disablement + // 25 smurf_bnlm_1_0- inner node disablement + // 26 bnlm_3_4- inner node disablement + // 27 bxt_demosaic- inner node disablement + // 28 vcsc_2_0_b- inner node disablement + // 29 gltm_2_0- inner node disablement + // 30 ifd_segmap_xnr_1_4- inner node disablement + // 31 smurf_xnr_1_0- inner node disablement + // 32 xnr_5_4- inner node disablement + // 33 vcr_3_1- inner node disablement + // 34 glim_2_0- inner node disablement + // 35 ifd_segmap_acm_1_4- inner node disablement + // 36 smurf_acm_1_0- inner node disablement + // 37 acm_1_2- inner node disablement + // 38 gammatm_v4- inner node disablement + // 39 csc_1_1- inner node disablement + // 40 b2i_ds_1_1- inner node disablement + // 41 lbff_crop_espa_1_4- inner node disablement + // 42 tnr7_spatial_1_1- inner node disablement + // 43 tnr_scaler_lb_1_1- inner node disablement + // 44 tnr7_ims_1_2- inner node disablement + // 45 gmv_statistics_1_1- inner node disablement + // 46 odr_gmv_feature_1_4- inner node disablement + // 47 odr_gmv_match_1_4- inner node disablement + // 48 ifd_segmap_tnr_bc_1_4- inner node disablement + // 49 smurf_tnr_bc_1_0- inner node disablement + // 50 tnr7_bc_1_2- inner node disablement + // 51 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 52 ifd_segmap_tnr_blend_1_4- inner node disablement + // 53 smurf_tnr_blend_1_0- inner node disablement + // 54 tnr7_blend_1_1- inner node disablement + // 55 odr_tnr_fp_yuvn_1_4- inner node disablement + // 56 tnr_scaler_fp_1_1- inner node disablement + // 57 image_upscaler_1_1- inner node disablement + // 58 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 59 ifd_segmap_cas_1_4- inner node disablement + // 60 smurf_cas_1_0- inner node disablement + // 61 cas_1_1- inner node disablement + // 62 odr_ofs_mp_1_4- inner node disablement + // 63 b2i_ds_output_1_1- inner node disablement + // 64 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFFFFFFF; + disabledRunKernelsBitmap[1] = 0x1; + } else // default inner node + { + // RBM - 0x00000000000000000067FCBD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E1FFFFFFFFFEED9FF1FB + bitmaps.deb[0] = 0xED9FF1FB; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFF61EBF + bitmaps.teb[0] = 0xFFF61EBF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffDol3InputsNoGmvNoTnrWithSapOuterNode::setInnerNode( + InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 46; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[9].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[18].run_kernel.enable = 0; // wb_1_1 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000064009D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1E00000FFFEED8001FF + bitmaps.deb[0] = 0xED8001FF; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F00000FF + bitmaps.teb[0] = 0xF00000FF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 20 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x187D80; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000044009D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1E00000FFFEED9FF1FF + bitmaps.deb[0] = 0xED9FF1FF; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E0041EFF + bitmaps.teb[0] = 0xE0041EFF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 43 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x80000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000044009D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1E00000FFFEED8001FF + bitmaps.deb[0] = 0xED8001FF; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E00000FF + bitmaps.teb[0] = 0xE00000FF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 20 odr_af_std_1_4- inner node disablement + // 43 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x80000187D80; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000024009D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021E00000FFFEED9FF1FF + bitmaps.deb[0] = 0xED9FF1FF; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D0041EFF + bitmaps.teb[0] = 0xD0041EFF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 44 b2i_ds_output_1_1- inner node disablement + // 45 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x300000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000024009D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021E00000FFFEED8001FF + bitmaps.deb[0] = 0xED8001FF; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D00000FF + bitmaps.teb[0] = 0xD00000FF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 20 odr_af_std_1_4- inner node disablement + // 44 b2i_ds_output_1_1- inner node disablement + // 45 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x300000187D80; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000008002526E16 + bitmaps.rbm[0] = 0x2526E16; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019FF1FF + bitmaps.deb[0] = 0x19FF1FF; + // TEB - 0x0000000000041EFF + bitmaps.teb[0] = 0x41EFF; + // REB - 0x00000000000000000000000002007FF7 + bitmaps.reb[0] = 0x2007FF7; + + // Kernels disablement + // 17 gd_2_2- inner node disablement + // 18 wb_1_1- inner node disablement + // 21 ifd_segmap_bnlm_1_4- inner node disablement + // 22 smurf_bnlm_1_0- inner node disablement + // 23 bnlm_3_4- inner node disablement + // 24 bxt_demosaic- inner node disablement + // 25 vcsc_2_0_b- inner node disablement + // 26 gltm_2_0- inner node disablement + // 27 ifd_segmap_xnr_1_4- inner node disablement + // 28 smurf_xnr_1_0- inner node disablement + // 29 xnr_5_4- inner node disablement + // 30 vcr_3_1- inner node disablement + // 31 glim_2_0- inner node disablement + // 32 ifd_segmap_acm_1_4- inner node disablement + // 33 smurf_acm_1_0- inner node disablement + // 34 acm_1_2- inner node disablement + // 35 gammatm_v4- inner node disablement + // 36 csc_1_1- inner node disablement + // 37 b2i_ds_1_1- inner node disablement + // 38 lbff_crop_espa_1_4- inner node disablement + // 39 image_upscaler_1_1- inner node disablement + // 40 ifd_segmap_cas_1_4- inner node disablement + // 41 smurf_cas_1_0- inner node disablement + // 42 cas_1_1- inner node disablement + // 43 odr_ofs_mp_1_4- inner node disablement + // 44 b2i_ds_output_1_1- inner node disablement + // 45 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFE60000; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 ifd_pipe_long_1_4- inner node disablement + // 2 ifd_pipe_short_smth_1_4- inner node disablement + // 3 dol_lite_1_2- inner node disablement + // 4 bxt_blc- inner node disablement + // 5 linearization2_0- inner node disablement + // 6 dpc_2_2- inner node disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 9 rgb_ir_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 ifd_lsc_1_4- inner node disablement + // 16 lsc_1_2- inner node disablement + // 17 gd_2_2- inner node disablement + // 18 wb_1_1- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 20 odr_af_std_1_4- inner node disablement + // 21 ifd_segmap_bnlm_1_4- inner node disablement + // 22 smurf_bnlm_1_0- inner node disablement + // 23 bnlm_3_4- inner node disablement + // 24 bxt_demosaic- inner node disablement + // 25 vcsc_2_0_b- inner node disablement + // 26 gltm_2_0- inner node disablement + // 27 ifd_segmap_xnr_1_4- inner node disablement + // 28 smurf_xnr_1_0- inner node disablement + // 29 xnr_5_4- inner node disablement + // 30 vcr_3_1- inner node disablement + // 31 glim_2_0- inner node disablement + // 32 ifd_segmap_acm_1_4- inner node disablement + // 33 smurf_acm_1_0- inner node disablement + // 34 acm_1_2- inner node disablement + // 35 gammatm_v4- inner node disablement + // 36 csc_1_1- inner node disablement + // 37 b2i_ds_1_1- inner node disablement + // 38 lbff_crop_espa_1_4- inner node disablement + // 39 image_upscaler_1_1- inner node disablement + // 40 ifd_segmap_cas_1_4- inner node disablement + // 41 smurf_cas_1_0- inner node disablement + // 42 cas_1_1- inner node disablement + // 43 odr_ofs_mp_1_4- inner node disablement + // 44 b2i_ds_output_1_1- inner node disablement + // 45 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000064009D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1E00000FFFEED9FF1FF + bitmaps.deb[0] = 0xED9FF1FF; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F0041EFF + bitmaps.teb[0] = 0xF0041EFF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffDol3InputsWithGmvNoTnrWithSapOuterNode::setInnerNode( + InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 50; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[9].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[18].run_kernel.enable = 0; // wb_1_1 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x0000000000000000006400BD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E1E0000FFFFEED8001FF + bitmaps.deb[0] = 0xED8001FF; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F03200FF + bitmaps.teb[0] = 0xF03200FF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 20 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x187D80; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x0000000000000000004400BD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C1E0000FFFFEED9FF1FF + bitmaps.deb[0] = 0xED9FF1FF; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E0361EFF + bitmaps.teb[0] = 0xE0361EFF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 47 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x800000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x0000000000000000004400BD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C1E0000FFFFEED8001FF + bitmaps.deb[0] = 0xED8001FF; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E03200FF + bitmaps.teb[0] = 0xE03200FF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 20 odr_af_std_1_4- inner node disablement + // 47 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x800000187D80; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x0000000000000000002400BD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x00000000000021E0000FFFFEED9FF1FF + bitmaps.deb[0] = 0xED9FF1FF; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D0361EFF + bitmaps.teb[0] = 0xD0361EFF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 48 b2i_ds_output_1_1- inner node disablement + // 49 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x0000000000000000002400BD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x00000000000021E0000FFFFEED8001FF + bitmaps.deb[0] = 0xED8001FF; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D03200FF + bitmaps.teb[0] = 0xD03200FF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F607F7 + bitmaps.reb[0] = 0x12F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 20 odr_af_std_1_4- inner node disablement + // 48 b2i_ds_output_1_1- inner node disablement + // 49 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3000000187D80; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000008002526E16 + bitmaps.rbm[0] = 0x2526E16; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019FF1FF + bitmaps.deb[0] = 0x19FF1FF; + // TEB - 0x0000000000041EFF + bitmaps.teb[0] = 0x41EFF; + // REB - 0x00000000000000000000000002007FF7 + bitmaps.reb[0] = 0x2007FF7; + + // Kernels disablement + // 17 gd_2_2- inner node disablement + // 18 wb_1_1- inner node disablement + // 21 ifd_gmv_1_4- inner node disablement + // 22 ifd_segmap_bnlm_1_4- inner node disablement + // 23 smurf_bnlm_1_0- inner node disablement + // 24 bnlm_3_4- inner node disablement + // 25 bxt_demosaic- inner node disablement + // 26 vcsc_2_0_b- inner node disablement + // 27 gltm_2_0- inner node disablement + // 28 ifd_segmap_xnr_1_4- inner node disablement + // 29 smurf_xnr_1_0- inner node disablement + // 30 xnr_5_4- inner node disablement + // 31 vcr_3_1- inner node disablement + // 32 glim_2_0- inner node disablement + // 33 ifd_segmap_acm_1_4- inner node disablement + // 34 smurf_acm_1_0- inner node disablement + // 35 acm_1_2- inner node disablement + // 36 gammatm_v4- inner node disablement + // 37 csc_1_1- inner node disablement + // 38 b2i_ds_1_1- inner node disablement + // 39 lbff_crop_espa_1_4- inner node disablement + // 40 image_upscaler_1_1- inner node disablement + // 41 gmv_statistics_1_1- inner node disablement + // 42 odr_gmv_feature_1_4- inner node disablement + // 43 odr_gmv_match_1_4- inner node disablement + // 44 ifd_segmap_cas_1_4- inner node disablement + // 45 smurf_cas_1_0- inner node disablement + // 46 cas_1_1- inner node disablement + // 47 odr_ofs_mp_1_4- inner node disablement + // 48 b2i_ds_output_1_1- inner node disablement + // 49 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFE60000; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 ifd_pipe_long_1_4- inner node disablement + // 2 ifd_pipe_short_smth_1_4- inner node disablement + // 3 dol_lite_1_2- inner node disablement + // 4 bxt_blc- inner node disablement + // 5 linearization2_0- inner node disablement + // 6 dpc_2_2- inner node disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 9 rgb_ir_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 ifd_lsc_1_4- inner node disablement + // 16 lsc_1_2- inner node disablement + // 17 gd_2_2- inner node disablement + // 18 wb_1_1- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 20 odr_af_std_1_4- inner node disablement + // 21 ifd_gmv_1_4- inner node disablement + // 22 ifd_segmap_bnlm_1_4- inner node disablement + // 23 smurf_bnlm_1_0- inner node disablement + // 24 bnlm_3_4- inner node disablement + // 25 bxt_demosaic- inner node disablement + // 26 vcsc_2_0_b- inner node disablement + // 27 gltm_2_0- inner node disablement + // 28 ifd_segmap_xnr_1_4- inner node disablement + // 29 smurf_xnr_1_0- inner node disablement + // 30 xnr_5_4- inner node disablement + // 31 vcr_3_1- inner node disablement + // 32 glim_2_0- inner node disablement + // 33 ifd_segmap_acm_1_4- inner node disablement + // 34 smurf_acm_1_0- inner node disablement + // 35 acm_1_2- inner node disablement + // 36 gammatm_v4- inner node disablement + // 37 csc_1_1- inner node disablement + // 38 b2i_ds_1_1- inner node disablement + // 39 lbff_crop_espa_1_4- inner node disablement + // 40 image_upscaler_1_1- inner node disablement + // 41 gmv_statistics_1_1- inner node disablement + // 42 odr_gmv_feature_1_4- inner node disablement + // 43 odr_gmv_match_1_4- inner node disablement + // 44 ifd_segmap_cas_1_4- inner node disablement + // 45 smurf_cas_1_0- inner node disablement + // 46 cas_1_1- inner node disablement + // 47 odr_ofs_mp_1_4- inner node disablement + // 48 b2i_ds_output_1_1- inner node disablement + // 49 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x0000000000000000006400BD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E1E0000FFFFEED9FF1FF + bitmaps.deb[0] = 0xED9FF1FF; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F0361EFF + bitmaps.teb[0] = 0xF0361EFF; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F67FF7 + bitmaps.reb[0] = 0x12F67FF7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffDol3InputsNoGmvWithTnrWithSapOuterNode::setInnerNode( + InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 62; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[9].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[18].run_kernel.enable = 0; // wb_1_1 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000067FC9D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E1FFFFF0FFFEED8001FF + bitmaps.deb[0] = 0xED8001FF; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFC000FF + bitmaps.teb[0] = 0xFFC000FF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 20 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x187D80; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C1FFFFF0FFFEED9FF1FF + bitmaps.deb[0] = 0xED9FF1FF; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFC41EFF + bitmaps.teb[0] = 0xEFC41EFF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 59 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x800000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C1FFFFF0FFFEED8001FF + bitmaps.deb[0] = 0xED8001FF; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFC000FF + bitmaps.teb[0] = 0xEFC000FF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 20 odr_af_std_1_4- inner node disablement + // 59 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x800000000187D80; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x00000000000021FFFFF0FFFEED9FF1FF + bitmaps.deb[0] = 0xED9FF1FF; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFC41EFF + bitmaps.teb[0] = 0xDFC41EFF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 60 b2i_ds_output_1_1- inner node disablement + // 61 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3000000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x00000000000021FFFFF0FFFEED8001FF + bitmaps.deb[0] = 0xED8001FF; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFC000FF + bitmaps.teb[0] = 0xDFC000FF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 20 odr_af_std_1_4- inner node disablement + // 60 b2i_ds_output_1_1- inner node disablement + // 61 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3000000000187D80; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000008002526E16 + bitmaps.rbm[0] = 0x2526E16; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019FF1FF + bitmaps.deb[0] = 0x19FF1FF; + // TEB - 0x0000000000041EFF + bitmaps.teb[0] = 0x41EFF; + // REB - 0x00000000000000000000000002007FF7 + bitmaps.reb[0] = 0x2007FF7; + + // Kernels disablement + // 17 gd_2_2- inner node disablement + // 18 wb_1_1- inner node disablement + // 21 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 22 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 23 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 24 ifd_segmap_bnlm_1_4- inner node disablement + // 25 smurf_bnlm_1_0- inner node disablement + // 26 bnlm_3_4- inner node disablement + // 27 bxt_demosaic- inner node disablement + // 28 vcsc_2_0_b- inner node disablement + // 29 gltm_2_0- inner node disablement + // 30 ifd_segmap_xnr_1_4- inner node disablement + // 31 smurf_xnr_1_0- inner node disablement + // 32 xnr_5_4- inner node disablement + // 33 vcr_3_1- inner node disablement + // 34 glim_2_0- inner node disablement + // 35 ifd_segmap_acm_1_4- inner node disablement + // 36 smurf_acm_1_0- inner node disablement + // 37 acm_1_2- inner node disablement + // 38 gammatm_v4- inner node disablement + // 39 csc_1_1- inner node disablement + // 40 b2i_ds_1_1- inner node disablement + // 41 lbff_crop_espa_1_4- inner node disablement + // 42 tnr7_spatial_1_1- inner node disablement + // 43 tnr_scaler_lb_1_1- inner node disablement + // 44 tnr7_ims_1_2- inner node disablement + // 45 ifd_segmap_tnr_bc_1_4- inner node disablement + // 46 smurf_tnr_bc_1_0- inner node disablement + // 47 tnr7_bc_1_2- inner node disablement + // 48 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 49 ifd_segmap_tnr_blend_1_4- inner node disablement + // 50 smurf_tnr_blend_1_0- inner node disablement + // 51 tnr7_blend_1_1- inner node disablement + // 52 odr_tnr_fp_yuvn_1_4- inner node disablement + // 53 tnr_scaler_fp_1_1- inner node disablement + // 54 image_upscaler_1_1- inner node disablement + // 55 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 56 ifd_segmap_cas_1_4- inner node disablement + // 57 smurf_cas_1_0- inner node disablement + // 58 cas_1_1- inner node disablement + // 59 odr_ofs_mp_1_4- inner node disablement + // 60 b2i_ds_output_1_1- inner node disablement + // 61 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFE60000; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 ifd_pipe_long_1_4- inner node disablement + // 2 ifd_pipe_short_smth_1_4- inner node disablement + // 3 dol_lite_1_2- inner node disablement + // 4 bxt_blc- inner node disablement + // 5 linearization2_0- inner node disablement + // 6 dpc_2_2- inner node disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 9 rgb_ir_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 ifd_lsc_1_4- inner node disablement + // 16 lsc_1_2- inner node disablement + // 17 gd_2_2- inner node disablement + // 18 wb_1_1- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 20 odr_af_std_1_4- inner node disablement + // 21 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 22 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 23 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 24 ifd_segmap_bnlm_1_4- inner node disablement + // 25 smurf_bnlm_1_0- inner node disablement + // 26 bnlm_3_4- inner node disablement + // 27 bxt_demosaic- inner node disablement + // 28 vcsc_2_0_b- inner node disablement + // 29 gltm_2_0- inner node disablement + // 30 ifd_segmap_xnr_1_4- inner node disablement + // 31 smurf_xnr_1_0- inner node disablement + // 32 xnr_5_4- inner node disablement + // 33 vcr_3_1- inner node disablement + // 34 glim_2_0- inner node disablement + // 35 ifd_segmap_acm_1_4- inner node disablement + // 36 smurf_acm_1_0- inner node disablement + // 37 acm_1_2- inner node disablement + // 38 gammatm_v4- inner node disablement + // 39 csc_1_1- inner node disablement + // 40 b2i_ds_1_1- inner node disablement + // 41 lbff_crop_espa_1_4- inner node disablement + // 42 tnr7_spatial_1_1- inner node disablement + // 43 tnr_scaler_lb_1_1- inner node disablement + // 44 tnr7_ims_1_2- inner node disablement + // 45 ifd_segmap_tnr_bc_1_4- inner node disablement + // 46 smurf_tnr_bc_1_0- inner node disablement + // 47 tnr7_bc_1_2- inner node disablement + // 48 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 49 ifd_segmap_tnr_blend_1_4- inner node disablement + // 50 smurf_tnr_blend_1_0- inner node disablement + // 51 tnr7_blend_1_1- inner node disablement + // 52 odr_tnr_fp_yuvn_1_4- inner node disablement + // 53 tnr_scaler_fp_1_1- inner node disablement + // 54 image_upscaler_1_1- inner node disablement + // 55 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 56 ifd_segmap_cas_1_4- inner node disablement + // 57 smurf_cas_1_0- inner node disablement + // 58 cas_1_1- inner node disablement + // 59 odr_ofs_mp_1_4- inner node disablement + // 60 b2i_ds_output_1_1- inner node disablement + // 61 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFFFFFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000067FC9D52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E1FFFFF0FFFEED9FF1FF + bitmaps.deb[0] = 0xED9FF1FF; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFC41EFF + bitmaps.teb[0] = 0xFFC41EFF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffDol3InputsWithGmvWithTnrWithSapOuterNode::setInnerNode( + InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 66; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[9].run_kernel.enable = 0; // rgb_ir_2_0 + nodeKernels.kernelList[18].run_kernel.enable = 0; // wb_1_1 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000067FCBD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E1FFFFFFFFFEED8001FF + bitmaps.deb[0] = 0xED8001FF; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFF200FF + bitmaps.teb[0] = 0xFFF200FF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 20 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x187D80; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C1FFFFFFFFFEED9FF1FF + bitmaps.deb[0] = 0xED9FF1FF; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFF61EFF + bitmaps.teb[0] = 0xEFF61EFF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 63 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x8000000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C1FFFFFFFFFEED8001FF + bitmaps.deb[0] = 0xED8001FF; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFF200FF + bitmaps.teb[0] = 0xEFF200FF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 20 odr_af_std_1_4- inner node disablement + // 63 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x8000000000187D80; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x00000000000021FFFFFFFFFEED9FF1FF + bitmaps.deb[0] = 0xED9FF1FF; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFF61EFF + bitmaps.teb[0] = 0xDFF61EFF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 64 b2i_ds_output_1_1- inner node disablement + // 65 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[1] = 0x3; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD50016816 + bitmaps.rbm[0] = 0x50016816; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x00000000000021FFFFFFFFFEED8001FF + bitmaps.deb[0] = 0xED8001FF; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFF200FF + bitmaps.teb[0] = 0xDFF200FF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F607F7 + bitmaps.reb[0] = 0xF2F607F7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 20 odr_af_std_1_4- inner node disablement + // 64 b2i_ds_output_1_1- inner node disablement + // 65 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x187D80; + disabledRunKernelsBitmap[1] = 0x3; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000008002526E16 + bitmaps.rbm[0] = 0x2526E16; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019FF1FF + bitmaps.deb[0] = 0x19FF1FF; + // TEB - 0x0000000000041EFF + bitmaps.teb[0] = 0x41EFF; + // REB - 0x00000000000000000000000002007FF7 + bitmaps.reb[0] = 0x2007FF7; + + // Kernels disablement + // 17 gd_2_2- inner node disablement + // 18 wb_1_1- inner node disablement + // 21 ifd_gmv_1_4- inner node disablement + // 22 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 23 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 24 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 25 ifd_segmap_bnlm_1_4- inner node disablement + // 26 smurf_bnlm_1_0- inner node disablement + // 27 bnlm_3_4- inner node disablement + // 28 bxt_demosaic- inner node disablement + // 29 vcsc_2_0_b- inner node disablement + // 30 gltm_2_0- inner node disablement + // 31 ifd_segmap_xnr_1_4- inner node disablement + // 32 smurf_xnr_1_0- inner node disablement + // 33 xnr_5_4- inner node disablement + // 34 vcr_3_1- inner node disablement + // 35 glim_2_0- inner node disablement + // 36 ifd_segmap_acm_1_4- inner node disablement + // 37 smurf_acm_1_0- inner node disablement + // 38 acm_1_2- inner node disablement + // 39 gammatm_v4- inner node disablement + // 40 csc_1_1- inner node disablement + // 41 b2i_ds_1_1- inner node disablement + // 42 lbff_crop_espa_1_4- inner node disablement + // 43 tnr7_spatial_1_1- inner node disablement + // 44 tnr_scaler_lb_1_1- inner node disablement + // 45 tnr7_ims_1_2- inner node disablement + // 46 gmv_statistics_1_1- inner node disablement + // 47 odr_gmv_feature_1_4- inner node disablement + // 48 odr_gmv_match_1_4- inner node disablement + // 49 ifd_segmap_tnr_bc_1_4- inner node disablement + // 50 smurf_tnr_bc_1_0- inner node disablement + // 51 tnr7_bc_1_2- inner node disablement + // 52 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 53 ifd_segmap_tnr_blend_1_4- inner node disablement + // 54 smurf_tnr_blend_1_0- inner node disablement + // 55 tnr7_blend_1_1- inner node disablement + // 56 odr_tnr_fp_yuvn_1_4- inner node disablement + // 57 tnr_scaler_fp_1_1- inner node disablement + // 58 image_upscaler_1_1- inner node disablement + // 59 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 60 ifd_segmap_cas_1_4- inner node disablement + // 61 smurf_cas_1_0- inner node disablement + // 62 cas_1_1- inner node disablement + // 63 odr_ofs_mp_1_4- inner node disablement + // 64 b2i_ds_output_1_1- inner node disablement + // 65 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFE60000; + disabledRunKernelsBitmap[1] = 0x3; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 ifd_pipe_long_1_4- inner node disablement + // 2 ifd_pipe_short_smth_1_4- inner node disablement + // 3 dol_lite_1_2- inner node disablement + // 4 bxt_blc- inner node disablement + // 5 linearization2_0- inner node disablement + // 6 dpc_2_2- inner node disablement + // 7 rgbs_grid_1_1- inner node disablement + // 8 ccm_3a_2_0- inner node disablement + // 9 rgb_ir_2_0- inner node disablement + // 10 odr_awb_std_1_4- inner node disablement + // 11 odr_awb_sve_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 ifd_lsc_1_4- inner node disablement + // 16 lsc_1_2- inner node disablement + // 17 gd_2_2- inner node disablement + // 18 wb_1_1- inner node disablement + // 19 fr_grid_1_0- inner node disablement + // 20 odr_af_std_1_4- inner node disablement + // 21 ifd_gmv_1_4- inner node disablement + // 22 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 23 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 24 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 25 ifd_segmap_bnlm_1_4- inner node disablement + // 26 smurf_bnlm_1_0- inner node disablement + // 27 bnlm_3_4- inner node disablement + // 28 bxt_demosaic- inner node disablement + // 29 vcsc_2_0_b- inner node disablement + // 30 gltm_2_0- inner node disablement + // 31 ifd_segmap_xnr_1_4- inner node disablement + // 32 smurf_xnr_1_0- inner node disablement + // 33 xnr_5_4- inner node disablement + // 34 vcr_3_1- inner node disablement + // 35 glim_2_0- inner node disablement + // 36 ifd_segmap_acm_1_4- inner node disablement + // 37 smurf_acm_1_0- inner node disablement + // 38 acm_1_2- inner node disablement + // 39 gammatm_v4- inner node disablement + // 40 csc_1_1- inner node disablement + // 41 b2i_ds_1_1- inner node disablement + // 42 lbff_crop_espa_1_4- inner node disablement + // 43 tnr7_spatial_1_1- inner node disablement + // 44 tnr_scaler_lb_1_1- inner node disablement + // 45 tnr7_ims_1_2- inner node disablement + // 46 gmv_statistics_1_1- inner node disablement + // 47 odr_gmv_feature_1_4- inner node disablement + // 48 odr_gmv_match_1_4- inner node disablement + // 49 ifd_segmap_tnr_bc_1_4- inner node disablement + // 50 smurf_tnr_bc_1_0- inner node disablement + // 51 tnr7_bc_1_2- inner node disablement + // 52 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 53 ifd_segmap_tnr_blend_1_4- inner node disablement + // 54 smurf_tnr_blend_1_0- inner node disablement + // 55 tnr7_blend_1_1- inner node disablement + // 56 odr_tnr_fp_yuvn_1_4- inner node disablement + // 57 tnr_scaler_fp_1_1- inner node disablement + // 58 image_upscaler_1_1- inner node disablement + // 59 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 60 ifd_segmap_cas_1_4- inner node disablement + // 61 smurf_cas_1_0- inner node disablement + // 62 cas_1_1- inner node disablement + // 63 odr_ofs_mp_1_4- inner node disablement + // 64 b2i_ds_output_1_1- inner node disablement + // 65 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFFFFFFF; + disabledRunKernelsBitmap[1] = 0x3; + } else // default inner node + { + // RBM - 0x00000000000000000067FCBD52536E16 + bitmaps.rbm[0] = 0x52536E16; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E1FFFFFFFFFEED9FF1FF + bitmaps.deb[0] = 0xED9FF1FF; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFF61EFF + bitmaps.teb[0] = 0xFFF61EFF; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F67FF7 + bitmaps.reb[0] = 0xF2F67FF7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffRgbIrNoGmvNoTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 44; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = + nodeInnerOptions & (no3A | noIr | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x0000000000000000006400DD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x6400DD; + // DEB - 0x000000000000E1E00000FFFEEF8001F1 + bitmaps.deb[0] = 0xEF8001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F000409F + bitmaps.teb[0] = 0xF000409F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7C390; + } else if (nodeRelevantInnerOptions == (noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000064009D503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1E00000FFFEED9FF1F1 + bitmaps.deb[0] = 0xED9FF1F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F0041E9F + bitmaps.teb[0] = 0xF0041E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x40; + } else if (nodeRelevantInnerOptions == (no3A | noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000064009D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1E00000FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F000009F + bitmaps.teb[0] = 0xF000009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7C3D0; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x0000000000000000004400DD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x4400DD; + // DEB - 0x000000000000C1E00000FFFEEF9FF1F1 + bitmaps.deb[0] = 0xEF9FF1F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E0045E9F + bitmaps.teb[0] = 0xE0045E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 41 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x20000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x0000000000000000004400DD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x4400DD; + // DEB - 0x000000000000C1E00000FFFEEF8001F1 + bitmaps.deb[0] = 0xEF8001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E000409F + bitmaps.teb[0] = 0xE000409F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 41 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x2000007C390; + } else if (nodeRelevantInnerOptions == (noMp | noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000044009D503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1E00000FFFEED9FF1F1 + bitmaps.deb[0] = 0xED9FF1F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E0041E9F + bitmaps.teb[0] = 0xE0041E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + // 41 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x20000000040; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000044009D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1E00000FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E000009F + bitmaps.teb[0] = 0xE000009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 41 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x2000007C3D0; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x0000000000000000002400DD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x2400DD; + // DEB - 0x00000000000021E00000FFFEEF9FF1F1 + bitmaps.deb[0] = 0xEF9FF1F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D0045E9F + bitmaps.teb[0] = 0xD0045E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 42 b2i_ds_output_1_1- inner node disablement + // 43 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC0000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x0000000000000000002400DD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x2400DD; + // DEB - 0x00000000000021E00000FFFEEF8001F1 + bitmaps.deb[0] = 0xEF8001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D000409F + bitmaps.teb[0] = 0xD000409F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 42 b2i_ds_output_1_1- inner node disablement + // 43 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC000007C390; + } else if (nodeRelevantInnerOptions == (noDp | noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000024009D503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021E00000FFFEED9FF1F1 + bitmaps.deb[0] = 0xED9FF1F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D0041E9F + bitmaps.teb[0] = 0xD0041E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + // 42 b2i_ds_output_1_1- inner node disablement + // 43 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC0000000040; + } else if (nodeRelevantInnerOptions == (no3A | noDp | noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000024009D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021E00000FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D000009F + bitmaps.teb[0] = 0xD000009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 42 b2i_ds_output_1_1- inner node disablement + // 43 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC000007C3D0; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000004000206071 + bitmaps.rbm[0] = 0x206071; + bitmaps.rbm[1] = 0x40; + // DEB - 0x00000000000000000000000003871131 + bitmaps.deb[0] = 0x3871131; + // TEB - 0x0000000000045817 + bitmaps.teb[0] = 0x45817; + // REB - 0x0000000000000000000000000300118F + bitmaps.reb[0] = 0x300118F; + + // Kernels disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 19 ifd_segmap_bnlm_1_4- inner node disablement + // 20 smurf_bnlm_1_0- inner node disablement + // 21 bnlm_3_4- inner node disablement + // 22 bxt_demosaic- inner node disablement + // 23 vcsc_2_0_b- inner node disablement + // 24 gltm_2_0- inner node disablement + // 25 ifd_segmap_xnr_1_4- inner node disablement + // 26 smurf_xnr_1_0- inner node disablement + // 27 xnr_5_4- inner node disablement + // 28 vcr_3_1- inner node disablement + // 29 glim_2_0- inner node disablement + // 30 ifd_segmap_acm_1_4- inner node disablement + // 31 smurf_acm_1_0- inner node disablement + // 32 acm_1_2- inner node disablement + // 33 gammatm_v4- inner node disablement + // 34 csc_1_1- inner node disablement + // 35 b2i_ds_1_1- inner node disablement + // 36 lbff_crop_espa_1_4- inner node disablement + // 37 image_upscaler_1_1- inner node disablement + // 38 ifd_segmap_cas_1_4- inner node disablement + // 39 smurf_cas_1_0- inner node disablement + // 40 cas_1_1- inner node disablement + // 41 odr_ofs_mp_1_4- inner node disablement + // 42 b2i_ds_output_1_1- inner node disablement + // 43 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFC00; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000004000006011 + bitmaps.rbm[0] = 0x6011; + bitmaps.rbm[1] = 0x40; + // DEB - 0x00000000000000000000000003800131 + bitmaps.deb[0] = 0x3800131; + // TEB - 0x0000000000004017 + bitmaps.teb[0] = 0x4017; + // REB - 0x00000000000000000000000003000187 + bitmaps.reb[0] = 0x3000187; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 19 ifd_segmap_bnlm_1_4- inner node disablement + // 20 smurf_bnlm_1_0- inner node disablement + // 21 bnlm_3_4- inner node disablement + // 22 bxt_demosaic- inner node disablement + // 23 vcsc_2_0_b- inner node disablement + // 24 gltm_2_0- inner node disablement + // 25 ifd_segmap_xnr_1_4- inner node disablement + // 26 smurf_xnr_1_0- inner node disablement + // 27 xnr_5_4- inner node disablement + // 28 vcr_3_1- inner node disablement + // 29 glim_2_0- inner node disablement + // 30 ifd_segmap_acm_1_4- inner node disablement + // 31 smurf_acm_1_0- inner node disablement + // 32 acm_1_2- inner node disablement + // 33 gammatm_v4- inner node disablement + // 34 csc_1_1- inner node disablement + // 35 b2i_ds_1_1- inner node disablement + // 36 lbff_crop_espa_1_4- inner node disablement + // 37 image_upscaler_1_1- inner node disablement + // 38 ifd_segmap_cas_1_4- inner node disablement + // 39 smurf_cas_1_0- inner node disablement + // 40 cas_1_1- inner node disablement + // 41 odr_ofs_mp_1_4- inner node disablement + // 42 b2i_ds_output_1_1- inner node disablement + // 43 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFF90; + } else if (nodeRelevantInnerOptions == (noMp | noDp | noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000200061 + bitmaps.rbm[0] = 0x200061; + // DEB - 0x00000000000000000000000000071031 + bitmaps.deb[0] = 0x71031; + // TEB - 0x0000000000041817 + bitmaps.teb[0] = 0x41817; + // REB - 0x0000000000000000000000000000100F + bitmaps.reb[0] = 0x100F; + + // Kernels disablement + // 3 dpc_2_2- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 19 ifd_segmap_bnlm_1_4- inner node disablement + // 20 smurf_bnlm_1_0- inner node disablement + // 21 bnlm_3_4- inner node disablement + // 22 bxt_demosaic- inner node disablement + // 23 vcsc_2_0_b- inner node disablement + // 24 gltm_2_0- inner node disablement + // 25 ifd_segmap_xnr_1_4- inner node disablement + // 26 smurf_xnr_1_0- inner node disablement + // 27 xnr_5_4- inner node disablement + // 28 vcr_3_1- inner node disablement + // 29 glim_2_0- inner node disablement + // 30 ifd_segmap_acm_1_4- inner node disablement + // 31 smurf_acm_1_0- inner node disablement + // 32 acm_1_2- inner node disablement + // 33 gammatm_v4- inner node disablement + // 34 csc_1_1- inner node disablement + // 35 b2i_ds_1_1- inner node disablement + // 36 lbff_crop_espa_1_4- inner node disablement + // 37 image_upscaler_1_1- inner node disablement + // 38 ifd_segmap_cas_1_4- inner node disablement + // 39 smurf_cas_1_0- inner node disablement + // 40 cas_1_1- inner node disablement + // 41 odr_ofs_mp_1_4- inner node disablement + // 42 b2i_ds_output_1_1- inner node disablement + // 43 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFC68; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp | noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgbs_grid_1_1- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 19 ifd_segmap_bnlm_1_4- inner node disablement + // 20 smurf_bnlm_1_0- inner node disablement + // 21 bnlm_3_4- inner node disablement + // 22 bxt_demosaic- inner node disablement + // 23 vcsc_2_0_b- inner node disablement + // 24 gltm_2_0- inner node disablement + // 25 ifd_segmap_xnr_1_4- inner node disablement + // 26 smurf_xnr_1_0- inner node disablement + // 27 xnr_5_4- inner node disablement + // 28 vcr_3_1- inner node disablement + // 29 glim_2_0- inner node disablement + // 30 ifd_segmap_acm_1_4- inner node disablement + // 31 smurf_acm_1_0- inner node disablement + // 32 acm_1_2- inner node disablement + // 33 gammatm_v4- inner node disablement + // 34 csc_1_1- inner node disablement + // 35 b2i_ds_1_1- inner node disablement + // 36 lbff_crop_espa_1_4- inner node disablement + // 37 image_upscaler_1_1- inner node disablement + // 38 ifd_segmap_cas_1_4- inner node disablement + // 39 smurf_cas_1_0- inner node disablement + // 40 cas_1_1- inner node disablement + // 41 odr_ofs_mp_1_4- inner node disablement + // 42 b2i_ds_output_1_1- inner node disablement + // 43 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x0000000000000000006400DD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x6400DD; + // DEB - 0x000000000000E1E00000FFFEEF9FF1F1 + bitmaps.deb[0] = 0xEF9FF1F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F0045E9F + bitmaps.teb[0] = 0xF0045E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffRgbIrWithGmvNoTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 48; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = + nodeInnerOptions & (no3A | noIr | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x0000000000000000006400FD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x6400FD; + // DEB - 0x000000000000E1E0000FFFFEEF8001F1 + bitmaps.deb[0] = 0xEF8001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F032409F + bitmaps.teb[0] = 0xF032409F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7C390; + } else if (nodeRelevantInnerOptions == (noIr)) { + // HW bitmaps + // RBM - 0x0000000000000000006400BD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E1E0000FFFFEED9FF1F1 + bitmaps.deb[0] = 0xED9FF1F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F0361E9F + bitmaps.teb[0] = 0xF0361E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x40; + } else if (nodeRelevantInnerOptions == (no3A | noIr)) { + // HW bitmaps + // RBM - 0x0000000000000000006400BD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E1E0000FFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F032009F + bitmaps.teb[0] = 0xF032009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7C3D0; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x0000000000000000004400FD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x4400FD; + // DEB - 0x000000000000C1E0000FFFFEEF9FF1F1 + bitmaps.deb[0] = 0xEF9FF1F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E0365E9F + bitmaps.teb[0] = 0xE0365E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 45 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x200000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x0000000000000000004400FD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x4400FD; + // DEB - 0x000000000000C1E0000FFFFEEF8001F1 + bitmaps.deb[0] = 0xEF8001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E032409F + bitmaps.teb[0] = 0xE032409F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 45 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x20000007C390; + } else if (nodeRelevantInnerOptions == (noMp | noIr)) { + // HW bitmaps + // RBM - 0x0000000000000000004400BD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C1E0000FFFFEED9FF1F1 + bitmaps.deb[0] = 0xED9FF1F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E0361E9F + bitmaps.teb[0] = 0xE0361E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + // 45 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x200000000040; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noIr)) { + // HW bitmaps + // RBM - 0x0000000000000000004400BD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C1E0000FFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E032009F + bitmaps.teb[0] = 0xE032009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 45 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x20000007C3D0; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x0000000000000000002400FD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x2400FD; + // DEB - 0x00000000000021E0000FFFFEEF9FF1F1 + bitmaps.deb[0] = 0xEF9FF1F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D0365E9F + bitmaps.teb[0] = 0xD0365E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 46 b2i_ds_output_1_1- inner node disablement + // 47 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC00000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x0000000000000000002400FD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x2400FD; + // DEB - 0x00000000000021E0000FFFFEEF8001F1 + bitmaps.deb[0] = 0xEF8001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D032409F + bitmaps.teb[0] = 0xD032409F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 46 b2i_ds_output_1_1- inner node disablement + // 47 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC0000007C390; + } else if (nodeRelevantInnerOptions == (noDp | noIr)) { + // HW bitmaps + // RBM - 0x0000000000000000002400BD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x00000000000021E0000FFFFEED9FF1F1 + bitmaps.deb[0] = 0xED9FF1F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D0361E9F + bitmaps.teb[0] = 0xD0361E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + // 46 b2i_ds_output_1_1- inner node disablement + // 47 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC00000000040; + } else if (nodeRelevantInnerOptions == (no3A | noDp | noIr)) { + // HW bitmaps + // RBM - 0x0000000000000000002400BD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x00000000000021E0000FFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D032009F + bitmaps.teb[0] = 0xD032009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F607E7 + bitmaps.reb[0] = 0x13F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 46 b2i_ds_output_1_1- inner node disablement + // 47 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC0000007C3D0; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x0000000000000000000000C0003A6871 + bitmaps.rbm[0] = 0x3A6871; + bitmaps.rbm[1] = 0xC0; + // DEB - 0x000000000000000000000000039FF1F1 + bitmaps.deb[0] = 0x39FF1F1; + // TEB - 0x0000000000045E97 + bitmaps.teb[0] = 0x45E97; + // REB - 0x00000000000000000000000003007FEF + bitmaps.reb[0] = 0x3007FEF; + + // Kernels disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 19 ifd_gmv_1_4- inner node disablement + // 20 ifd_segmap_bnlm_1_4- inner node disablement + // 21 smurf_bnlm_1_0- inner node disablement + // 22 bnlm_3_4- inner node disablement + // 23 bxt_demosaic- inner node disablement + // 24 vcsc_2_0_b- inner node disablement + // 25 gltm_2_0- inner node disablement + // 26 ifd_segmap_xnr_1_4- inner node disablement + // 27 smurf_xnr_1_0- inner node disablement + // 28 xnr_5_4- inner node disablement + // 29 vcr_3_1- inner node disablement + // 30 glim_2_0- inner node disablement + // 31 ifd_segmap_acm_1_4- inner node disablement + // 32 smurf_acm_1_0- inner node disablement + // 33 acm_1_2- inner node disablement + // 34 gammatm_v4- inner node disablement + // 35 csc_1_1- inner node disablement + // 36 b2i_ds_1_1- inner node disablement + // 37 lbff_crop_espa_1_4- inner node disablement + // 38 image_upscaler_1_1- inner node disablement + // 39 gmv_statistics_1_1- inner node disablement + // 40 odr_gmv_feature_1_4- inner node disablement + // 41 odr_gmv_match_1_4- inner node disablement + // 42 ifd_segmap_cas_1_4- inner node disablement + // 43 smurf_cas_1_0- inner node disablement + // 44 cas_1_1- inner node disablement + // 45 odr_ofs_mp_1_4- inner node disablement + // 46 b2i_ds_output_1_1- inner node disablement + // 47 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFF83000; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000004000006011 + bitmaps.rbm[0] = 0x6011; + bitmaps.rbm[1] = 0x40; + // DEB - 0x00000000000000000000000003800131 + bitmaps.deb[0] = 0x3800131; + // TEB - 0x0000000000004017 + bitmaps.teb[0] = 0x4017; + // REB - 0x00000000000000000000000003000187 + bitmaps.reb[0] = 0x3000187; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 19 ifd_gmv_1_4- inner node disablement + // 20 ifd_segmap_bnlm_1_4- inner node disablement + // 21 smurf_bnlm_1_0- inner node disablement + // 22 bnlm_3_4- inner node disablement + // 23 bxt_demosaic- inner node disablement + // 24 vcsc_2_0_b- inner node disablement + // 25 gltm_2_0- inner node disablement + // 26 ifd_segmap_xnr_1_4- inner node disablement + // 27 smurf_xnr_1_0- inner node disablement + // 28 xnr_5_4- inner node disablement + // 29 vcr_3_1- inner node disablement + // 30 glim_2_0- inner node disablement + // 31 ifd_segmap_acm_1_4- inner node disablement + // 32 smurf_acm_1_0- inner node disablement + // 33 acm_1_2- inner node disablement + // 34 gammatm_v4- inner node disablement + // 35 csc_1_1- inner node disablement + // 36 b2i_ds_1_1- inner node disablement + // 37 lbff_crop_espa_1_4- inner node disablement + // 38 image_upscaler_1_1- inner node disablement + // 39 gmv_statistics_1_1- inner node disablement + // 40 odr_gmv_feature_1_4- inner node disablement + // 41 odr_gmv_match_1_4- inner node disablement + // 42 ifd_segmap_cas_1_4- inner node disablement + // 43 smurf_cas_1_0- inner node disablement + // 44 cas_1_1- inner node disablement + // 45 odr_ofs_mp_1_4- inner node disablement + // 46 b2i_ds_output_1_1- inner node disablement + // 47 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFF90; + } else if (nodeRelevantInnerOptions == (noMp | noDp | noIr)) { + // HW bitmaps + // RBM - 0x000000000000000000000080003A6871 + bitmaps.rbm[0] = 0x3A6871; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019FF1F1 + bitmaps.deb[0] = 0x19FF1F1; + // TEB - 0x0000000000041E97 + bitmaps.teb[0] = 0x41E97; + // REB - 0x00000000000000000000000003007FEF + bitmaps.reb[0] = 0x3007FEF; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 19 ifd_gmv_1_4- inner node disablement + // 20 ifd_segmap_bnlm_1_4- inner node disablement + // 21 smurf_bnlm_1_0- inner node disablement + // 22 bnlm_3_4- inner node disablement + // 23 bxt_demosaic- inner node disablement + // 24 vcsc_2_0_b- inner node disablement + // 25 gltm_2_0- inner node disablement + // 26 ifd_segmap_xnr_1_4- inner node disablement + // 27 smurf_xnr_1_0- inner node disablement + // 28 xnr_5_4- inner node disablement + // 29 vcr_3_1- inner node disablement + // 30 glim_2_0- inner node disablement + // 31 ifd_segmap_acm_1_4- inner node disablement + // 32 smurf_acm_1_0- inner node disablement + // 33 acm_1_2- inner node disablement + // 34 gammatm_v4- inner node disablement + // 35 csc_1_1- inner node disablement + // 36 b2i_ds_1_1- inner node disablement + // 37 lbff_crop_espa_1_4- inner node disablement + // 38 image_upscaler_1_1- inner node disablement + // 39 gmv_statistics_1_1- inner node disablement + // 40 odr_gmv_feature_1_4- inner node disablement + // 41 odr_gmv_match_1_4- inner node disablement + // 42 ifd_segmap_cas_1_4- inner node disablement + // 43 smurf_cas_1_0- inner node disablement + // 44 cas_1_1- inner node disablement + // 45 odr_ofs_mp_1_4- inner node disablement + // 46 b2i_ds_output_1_1- inner node disablement + // 47 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFF83040; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp | noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgbs_grid_1_1- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 19 ifd_gmv_1_4- inner node disablement + // 20 ifd_segmap_bnlm_1_4- inner node disablement + // 21 smurf_bnlm_1_0- inner node disablement + // 22 bnlm_3_4- inner node disablement + // 23 bxt_demosaic- inner node disablement + // 24 vcsc_2_0_b- inner node disablement + // 25 gltm_2_0- inner node disablement + // 26 ifd_segmap_xnr_1_4- inner node disablement + // 27 smurf_xnr_1_0- inner node disablement + // 28 xnr_5_4- inner node disablement + // 29 vcr_3_1- inner node disablement + // 30 glim_2_0- inner node disablement + // 31 ifd_segmap_acm_1_4- inner node disablement + // 32 smurf_acm_1_0- inner node disablement + // 33 acm_1_2- inner node disablement + // 34 gammatm_v4- inner node disablement + // 35 csc_1_1- inner node disablement + // 36 b2i_ds_1_1- inner node disablement + // 37 lbff_crop_espa_1_4- inner node disablement + // 38 image_upscaler_1_1- inner node disablement + // 39 gmv_statistics_1_1- inner node disablement + // 40 odr_gmv_feature_1_4- inner node disablement + // 41 odr_gmv_match_1_4- inner node disablement + // 42 ifd_segmap_cas_1_4- inner node disablement + // 43 smurf_cas_1_0- inner node disablement + // 44 cas_1_1- inner node disablement + // 45 odr_ofs_mp_1_4- inner node disablement + // 46 b2i_ds_output_1_1- inner node disablement + // 47 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x0000000000000000006400FD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x6400FD; + // DEB - 0x000000000000E1E0000FFFFEEF9FF1F1 + bitmaps.deb[0] = 0xEF9FF1F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F0365E9F + bitmaps.teb[0] = 0xF0365E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F13F67FEF + bitmaps.reb[0] = 0x13F67FEF; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffRgbIrNoGmvWithTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 60; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = + nodeInnerOptions & (no3A | noIr | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000067FCDD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x67FCDD; + // DEB - 0x000000000000E1FFFFF0FFFEEF8001F1 + bitmaps.deb[0] = 0xEF8001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFC0409F + bitmaps.teb[0] = 0xFFC0409F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7C390; + } else if (nodeRelevantInnerOptions == (noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000067FC9D503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E1FFFFF0FFFEED9FF1F1 + bitmaps.deb[0] = 0xED9FF1F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFC41E9F + bitmaps.teb[0] = 0xFFC41E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x40; + } else if (nodeRelevantInnerOptions == (no3A | noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000067FC9D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E1FFFFF0FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFC0009F + bitmaps.teb[0] = 0xFFC0009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7C3D0; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FCDD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x47FCDD; + // DEB - 0x000000000000C1FFFFF0FFFEEF9FF1F1 + bitmaps.deb[0] = 0xEF9FF1F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFC45E9F + bitmaps.teb[0] = 0xEFC45E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 57 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x200000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FCDD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x47FCDD; + // DEB - 0x000000000000C1FFFFF0FFFEEF8001F1 + bitmaps.deb[0] = 0xEF8001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFC0409F + bitmaps.teb[0] = 0xEFC0409F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 57 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x20000000007C390; + } else if (nodeRelevantInnerOptions == (noMp | noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C1FFFFF0FFFEED9FF1F1 + bitmaps.deb[0] = 0xED9FF1F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFC41E9F + bitmaps.teb[0] = 0xEFC41E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + // 57 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x200000000000040; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C1FFFFF0FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFC0009F + bitmaps.teb[0] = 0xEFC0009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 57 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x20000000007C3D0; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FCDD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x27FCDD; + // DEB - 0x00000000000021FFFFF0FFFEEF9FF1F1 + bitmaps.deb[0] = 0xEF9FF1F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFC45E9F + bitmaps.teb[0] = 0xDFC45E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 58 b2i_ds_output_1_1- inner node disablement + // 59 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC00000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FCDD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x27FCDD; + // DEB - 0x00000000000021FFFFF0FFFEEF8001F1 + bitmaps.deb[0] = 0xEF8001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFC0409F + bitmaps.teb[0] = 0xDFC0409F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 58 b2i_ds_output_1_1- inner node disablement + // 59 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC0000000007C390; + } else if (nodeRelevantInnerOptions == (noDp | noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x00000000000021FFFFF0FFFEED9FF1F1 + bitmaps.deb[0] = 0xED9FF1F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFC41E9F + bitmaps.teb[0] = 0xDFC41E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + // 58 b2i_ds_output_1_1- inner node disablement + // 59 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC00000000000040; + } else if (nodeRelevantInnerOptions == (no3A | noDp | noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x00000000000021FFFFF0FFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFC0009F + bitmaps.teb[0] = 0xDFC0009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 58 b2i_ds_output_1_1- inner node disablement + // 59 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC0000000007C3D0; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x0000000000000000000000C0003A6871 + bitmaps.rbm[0] = 0x3A6871; + bitmaps.rbm[1] = 0xC0; + // DEB - 0x000000000000000000000000039FF1F1 + bitmaps.deb[0] = 0x39FF1F1; + // TEB - 0x0000000000045E97 + bitmaps.teb[0] = 0x45E97; + // REB - 0x00000000000000000000000003007FEF + bitmaps.reb[0] = 0x3007FEF; + + // Kernels disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 19 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 20 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 21 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 22 ifd_segmap_bnlm_1_4- inner node disablement + // 23 smurf_bnlm_1_0- inner node disablement + // 24 bnlm_3_4- inner node disablement + // 25 bxt_demosaic- inner node disablement + // 26 vcsc_2_0_b- inner node disablement + // 27 gltm_2_0- inner node disablement + // 28 ifd_segmap_xnr_1_4- inner node disablement + // 29 smurf_xnr_1_0- inner node disablement + // 30 xnr_5_4- inner node disablement + // 31 vcr_3_1- inner node disablement + // 32 glim_2_0- inner node disablement + // 33 ifd_segmap_acm_1_4- inner node disablement + // 34 smurf_acm_1_0- inner node disablement + // 35 acm_1_2- inner node disablement + // 36 gammatm_v4- inner node disablement + // 37 csc_1_1- inner node disablement + // 38 b2i_ds_1_1- inner node disablement + // 39 lbff_crop_espa_1_4- inner node disablement + // 40 tnr7_spatial_1_1- inner node disablement + // 41 tnr_scaler_lb_1_1- inner node disablement + // 42 tnr7_ims_1_2- inner node disablement + // 43 ifd_segmap_tnr_bc_1_4- inner node disablement + // 44 smurf_tnr_bc_1_0- inner node disablement + // 45 tnr7_bc_1_2- inner node disablement + // 46 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 47 ifd_segmap_tnr_blend_1_4- inner node disablement + // 48 smurf_tnr_blend_1_0- inner node disablement + // 49 tnr7_blend_1_1- inner node disablement + // 50 odr_tnr_fp_yuvn_1_4- inner node disablement + // 51 tnr_scaler_fp_1_1- inner node disablement + // 52 image_upscaler_1_1- inner node disablement + // 53 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 54 ifd_segmap_cas_1_4- inner node disablement + // 55 smurf_cas_1_0- inner node disablement + // 56 cas_1_1- inner node disablement + // 57 odr_ofs_mp_1_4- inner node disablement + // 58 b2i_ds_output_1_1- inner node disablement + // 59 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFF83000; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000004000006011 + bitmaps.rbm[0] = 0x6011; + bitmaps.rbm[1] = 0x40; + // DEB - 0x00000000000000000000000003800131 + bitmaps.deb[0] = 0x3800131; + // TEB - 0x0000000000004017 + bitmaps.teb[0] = 0x4017; + // REB - 0x00000000000000000000000003000187 + bitmaps.reb[0] = 0x3000187; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 19 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 20 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 21 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 22 ifd_segmap_bnlm_1_4- inner node disablement + // 23 smurf_bnlm_1_0- inner node disablement + // 24 bnlm_3_4- inner node disablement + // 25 bxt_demosaic- inner node disablement + // 26 vcsc_2_0_b- inner node disablement + // 27 gltm_2_0- inner node disablement + // 28 ifd_segmap_xnr_1_4- inner node disablement + // 29 smurf_xnr_1_0- inner node disablement + // 30 xnr_5_4- inner node disablement + // 31 vcr_3_1- inner node disablement + // 32 glim_2_0- inner node disablement + // 33 ifd_segmap_acm_1_4- inner node disablement + // 34 smurf_acm_1_0- inner node disablement + // 35 acm_1_2- inner node disablement + // 36 gammatm_v4- inner node disablement + // 37 csc_1_1- inner node disablement + // 38 b2i_ds_1_1- inner node disablement + // 39 lbff_crop_espa_1_4- inner node disablement + // 40 tnr7_spatial_1_1- inner node disablement + // 41 tnr_scaler_lb_1_1- inner node disablement + // 42 tnr7_ims_1_2- inner node disablement + // 43 ifd_segmap_tnr_bc_1_4- inner node disablement + // 44 smurf_tnr_bc_1_0- inner node disablement + // 45 tnr7_bc_1_2- inner node disablement + // 46 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 47 ifd_segmap_tnr_blend_1_4- inner node disablement + // 48 smurf_tnr_blend_1_0- inner node disablement + // 49 tnr7_blend_1_1- inner node disablement + // 50 odr_tnr_fp_yuvn_1_4- inner node disablement + // 51 tnr_scaler_fp_1_1- inner node disablement + // 52 image_upscaler_1_1- inner node disablement + // 53 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 54 ifd_segmap_cas_1_4- inner node disablement + // 55 smurf_cas_1_0- inner node disablement + // 56 cas_1_1- inner node disablement + // 57 odr_ofs_mp_1_4- inner node disablement + // 58 b2i_ds_output_1_1- inner node disablement + // 59 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFFFF90; + } else if (nodeRelevantInnerOptions == (noMp | noDp | noIr)) { + // HW bitmaps + // RBM - 0x000000000000000000000080003A6871 + bitmaps.rbm[0] = 0x3A6871; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019FF1F1 + bitmaps.deb[0] = 0x19FF1F1; + // TEB - 0x0000000000041E97 + bitmaps.teb[0] = 0x41E97; + // REB - 0x00000000000000000000000003007FEF + bitmaps.reb[0] = 0x3007FEF; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 19 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 20 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 21 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 22 ifd_segmap_bnlm_1_4- inner node disablement + // 23 smurf_bnlm_1_0- inner node disablement + // 24 bnlm_3_4- inner node disablement + // 25 bxt_demosaic- inner node disablement + // 26 vcsc_2_0_b- inner node disablement + // 27 gltm_2_0- inner node disablement + // 28 ifd_segmap_xnr_1_4- inner node disablement + // 29 smurf_xnr_1_0- inner node disablement + // 30 xnr_5_4- inner node disablement + // 31 vcr_3_1- inner node disablement + // 32 glim_2_0- inner node disablement + // 33 ifd_segmap_acm_1_4- inner node disablement + // 34 smurf_acm_1_0- inner node disablement + // 35 acm_1_2- inner node disablement + // 36 gammatm_v4- inner node disablement + // 37 csc_1_1- inner node disablement + // 38 b2i_ds_1_1- inner node disablement + // 39 lbff_crop_espa_1_4- inner node disablement + // 40 tnr7_spatial_1_1- inner node disablement + // 41 tnr_scaler_lb_1_1- inner node disablement + // 42 tnr7_ims_1_2- inner node disablement + // 43 ifd_segmap_tnr_bc_1_4- inner node disablement + // 44 smurf_tnr_bc_1_0- inner node disablement + // 45 tnr7_bc_1_2- inner node disablement + // 46 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 47 ifd_segmap_tnr_blend_1_4- inner node disablement + // 48 smurf_tnr_blend_1_0- inner node disablement + // 49 tnr7_blend_1_1- inner node disablement + // 50 odr_tnr_fp_yuvn_1_4- inner node disablement + // 51 tnr_scaler_fp_1_1- inner node disablement + // 52 image_upscaler_1_1- inner node disablement + // 53 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 54 ifd_segmap_cas_1_4- inner node disablement + // 55 smurf_cas_1_0- inner node disablement + // 56 cas_1_1- inner node disablement + // 57 odr_ofs_mp_1_4- inner node disablement + // 58 b2i_ds_output_1_1- inner node disablement + // 59 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFF83040; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp | noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgbs_grid_1_1- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 19 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 20 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 21 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 22 ifd_segmap_bnlm_1_4- inner node disablement + // 23 smurf_bnlm_1_0- inner node disablement + // 24 bnlm_3_4- inner node disablement + // 25 bxt_demosaic- inner node disablement + // 26 vcsc_2_0_b- inner node disablement + // 27 gltm_2_0- inner node disablement + // 28 ifd_segmap_xnr_1_4- inner node disablement + // 29 smurf_xnr_1_0- inner node disablement + // 30 xnr_5_4- inner node disablement + // 31 vcr_3_1- inner node disablement + // 32 glim_2_0- inner node disablement + // 33 ifd_segmap_acm_1_4- inner node disablement + // 34 smurf_acm_1_0- inner node disablement + // 35 acm_1_2- inner node disablement + // 36 gammatm_v4- inner node disablement + // 37 csc_1_1- inner node disablement + // 38 b2i_ds_1_1- inner node disablement + // 39 lbff_crop_espa_1_4- inner node disablement + // 40 tnr7_spatial_1_1- inner node disablement + // 41 tnr_scaler_lb_1_1- inner node disablement + // 42 tnr7_ims_1_2- inner node disablement + // 43 ifd_segmap_tnr_bc_1_4- inner node disablement + // 44 smurf_tnr_bc_1_0- inner node disablement + // 45 tnr7_bc_1_2- inner node disablement + // 46 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 47 ifd_segmap_tnr_blend_1_4- inner node disablement + // 48 smurf_tnr_blend_1_0- inner node disablement + // 49 tnr7_blend_1_1- inner node disablement + // 50 odr_tnr_fp_yuvn_1_4- inner node disablement + // 51 tnr_scaler_fp_1_1- inner node disablement + // 52 image_upscaler_1_1- inner node disablement + // 53 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 54 ifd_segmap_cas_1_4- inner node disablement + // 55 smurf_cas_1_0- inner node disablement + // 56 cas_1_1- inner node disablement + // 57 odr_ofs_mp_1_4- inner node disablement + // 58 b2i_ds_output_1_1- inner node disablement + // 59 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000067FCDD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x67FCDD; + // DEB - 0x000000000000E1FFFFF0FFFEEF9FF1F1 + bitmaps.deb[0] = 0xEF9FF1F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFC45E9F + bitmaps.teb[0] = 0xFFC45E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffRgbIrWithGmvWithTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 64; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = + nodeInnerOptions & (no3A | noIr | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000067FCFD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x67FCFD; + // DEB - 0x000000000000E1FFFFFFFFFEEF8001F1 + bitmaps.deb[0] = 0xEF8001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFF2409F + bitmaps.teb[0] = 0xFFF2409F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7C390; + } else if (nodeRelevantInnerOptions == (noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000067FCBD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E1FFFFFFFFFEED9FF1F1 + bitmaps.deb[0] = 0xED9FF1F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFF61E9F + bitmaps.teb[0] = 0xFFF61E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x40; + } else if (nodeRelevantInnerOptions == (no3A | noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000067FCBD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E1FFFFFFFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFF2009F + bitmaps.teb[0] = 0xFFF2009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7C3D0; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FCFD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x47FCFD; + // DEB - 0x000000000000C1FFFFFFFFFEEF9FF1F1 + bitmaps.deb[0] = 0xEF9FF1F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFF65E9F + bitmaps.teb[0] = 0xEFF65E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 61 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x2000000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FCFD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x47FCFD; + // DEB - 0x000000000000C1FFFFFFFFFEEF8001F1 + bitmaps.deb[0] = 0xEF8001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFF2409F + bitmaps.teb[0] = 0xEFF2409F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 61 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x200000000007C390; + } else if (nodeRelevantInnerOptions == (noMp | noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C1FFFFFFFFFEED9FF1F1 + bitmaps.deb[0] = 0xED9FF1F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFF61E9F + bitmaps.teb[0] = 0xEFF61E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + // 61 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x2000000000000040; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C1FFFFFFFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFF2009F + bitmaps.teb[0] = 0xEFF2009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 61 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x200000000007C3D0; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FCFD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x27FCFD; + // DEB - 0x00000000000021FFFFFFFFFEEF9FF1F1 + bitmaps.deb[0] = 0xEF9FF1F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFF65E9F + bitmaps.teb[0] = 0xDFF65E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 62 b2i_ds_output_1_1- inner node disablement + // 63 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC000000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FCFD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x27FCFD; + // DEB - 0x00000000000021FFFFFFFFFEEF8001F1 + bitmaps.deb[0] = 0xEF8001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFF2409F + bitmaps.teb[0] = 0xDFF2409F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 62 b2i_ds_output_1_1- inner node disablement + // 63 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC00000000007C390; + } else if (nodeRelevantInnerOptions == (noDp | noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x00000000000021FFFFFFFFFEED9FF1F1 + bitmaps.deb[0] = 0xED9FF1F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFF61E9F + bitmaps.teb[0] = 0xDFF61E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + // 62 b2i_ds_output_1_1- inner node disablement + // 63 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC000000000000040; + } else if (nodeRelevantInnerOptions == (no3A | noDp | noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD50016811 + bitmaps.rbm[0] = 0x50016811; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x00000000000021FFFFFFFFFEED8001F1 + bitmaps.deb[0] = 0xED8001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFF2009F + bitmaps.teb[0] = 0xDFF2009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F607E7 + bitmaps.reb[0] = 0xF3F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 62 b2i_ds_output_1_1- inner node disablement + // 63 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xC00000000007C3D0; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x0000000000000000000000C0003A6871 + bitmaps.rbm[0] = 0x3A6871; + bitmaps.rbm[1] = 0xC0; + // DEB - 0x000000000000000000000000039FF1F1 + bitmaps.deb[0] = 0x39FF1F1; + // TEB - 0x0000000000045E97 + bitmaps.teb[0] = 0x45E97; + // REB - 0x00000000000000000000000003007FEF + bitmaps.reb[0] = 0x3007FEF; + + // Kernels disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 19 ifd_gmv_1_4- inner node disablement + // 20 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 21 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 22 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 23 ifd_segmap_bnlm_1_4- inner node disablement + // 24 smurf_bnlm_1_0- inner node disablement + // 25 bnlm_3_4- inner node disablement + // 26 bxt_demosaic- inner node disablement + // 27 vcsc_2_0_b- inner node disablement + // 28 gltm_2_0- inner node disablement + // 29 ifd_segmap_xnr_1_4- inner node disablement + // 30 smurf_xnr_1_0- inner node disablement + // 31 xnr_5_4- inner node disablement + // 32 vcr_3_1- inner node disablement + // 33 glim_2_0- inner node disablement + // 34 ifd_segmap_acm_1_4- inner node disablement + // 35 smurf_acm_1_0- inner node disablement + // 36 acm_1_2- inner node disablement + // 37 gammatm_v4- inner node disablement + // 38 csc_1_1- inner node disablement + // 39 b2i_ds_1_1- inner node disablement + // 40 lbff_crop_espa_1_4- inner node disablement + // 41 tnr7_spatial_1_1- inner node disablement + // 42 tnr_scaler_lb_1_1- inner node disablement + // 43 tnr7_ims_1_2- inner node disablement + // 44 gmv_statistics_1_1- inner node disablement + // 45 odr_gmv_feature_1_4- inner node disablement + // 46 odr_gmv_match_1_4- inner node disablement + // 47 ifd_segmap_tnr_bc_1_4- inner node disablement + // 48 smurf_tnr_bc_1_0- inner node disablement + // 49 tnr7_bc_1_2- inner node disablement + // 50 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 51 ifd_segmap_tnr_blend_1_4- inner node disablement + // 52 smurf_tnr_blend_1_0- inner node disablement + // 53 tnr7_blend_1_1- inner node disablement + // 54 odr_tnr_fp_yuvn_1_4- inner node disablement + // 55 tnr_scaler_fp_1_1- inner node disablement + // 56 image_upscaler_1_1- inner node disablement + // 57 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 58 ifd_segmap_cas_1_4- inner node disablement + // 59 smurf_cas_1_0- inner node disablement + // 60 cas_1_1- inner node disablement + // 61 odr_ofs_mp_1_4- inner node disablement + // 62 b2i_ds_output_1_1- inner node disablement + // 63 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFF83000; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000004000006011 + bitmaps.rbm[0] = 0x6011; + bitmaps.rbm[1] = 0x40; + // DEB - 0x00000000000000000000000003800131 + bitmaps.deb[0] = 0x3800131; + // TEB - 0x0000000000004017 + bitmaps.teb[0] = 0x4017; + // REB - 0x00000000000000000000000003000187 + bitmaps.reb[0] = 0x3000187; + + // Kernels disablement + // 4 rgbs_grid_1_1- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 19 ifd_gmv_1_4- inner node disablement + // 20 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 21 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 22 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 23 ifd_segmap_bnlm_1_4- inner node disablement + // 24 smurf_bnlm_1_0- inner node disablement + // 25 bnlm_3_4- inner node disablement + // 26 bxt_demosaic- inner node disablement + // 27 vcsc_2_0_b- inner node disablement + // 28 gltm_2_0- inner node disablement + // 29 ifd_segmap_xnr_1_4- inner node disablement + // 30 smurf_xnr_1_0- inner node disablement + // 31 xnr_5_4- inner node disablement + // 32 vcr_3_1- inner node disablement + // 33 glim_2_0- inner node disablement + // 34 ifd_segmap_acm_1_4- inner node disablement + // 35 smurf_acm_1_0- inner node disablement + // 36 acm_1_2- inner node disablement + // 37 gammatm_v4- inner node disablement + // 38 csc_1_1- inner node disablement + // 39 b2i_ds_1_1- inner node disablement + // 40 lbff_crop_espa_1_4- inner node disablement + // 41 tnr7_spatial_1_1- inner node disablement + // 42 tnr_scaler_lb_1_1- inner node disablement + // 43 tnr7_ims_1_2- inner node disablement + // 44 gmv_statistics_1_1- inner node disablement + // 45 odr_gmv_feature_1_4- inner node disablement + // 46 odr_gmv_match_1_4- inner node disablement + // 47 ifd_segmap_tnr_bc_1_4- inner node disablement + // 48 smurf_tnr_bc_1_0- inner node disablement + // 49 tnr7_bc_1_2- inner node disablement + // 50 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 51 ifd_segmap_tnr_blend_1_4- inner node disablement + // 52 smurf_tnr_blend_1_0- inner node disablement + // 53 tnr7_blend_1_1- inner node disablement + // 54 odr_tnr_fp_yuvn_1_4- inner node disablement + // 55 tnr_scaler_fp_1_1- inner node disablement + // 56 image_upscaler_1_1- inner node disablement + // 57 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 58 ifd_segmap_cas_1_4- inner node disablement + // 59 smurf_cas_1_0- inner node disablement + // 60 cas_1_1- inner node disablement + // 61 odr_ofs_mp_1_4- inner node disablement + // 62 b2i_ds_output_1_1- inner node disablement + // 63 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFFFFF90; + } else if (nodeRelevantInnerOptions == (noMp | noDp | noIr)) { + // HW bitmaps + // RBM - 0x000000000000000000000080003A6871 + bitmaps.rbm[0] = 0x3A6871; + bitmaps.rbm[1] = 0x80; + // DEB - 0x000000000000000000000000019FF1F1 + bitmaps.deb[0] = 0x19FF1F1; + // TEB - 0x0000000000041E97 + bitmaps.teb[0] = 0x41E97; + // REB - 0x00000000000000000000000003007FEF + bitmaps.reb[0] = 0x3007FEF; + + // Kernels disablement + // 6 odr_ir_1_4- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 19 ifd_gmv_1_4- inner node disablement + // 20 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 21 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 22 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 23 ifd_segmap_bnlm_1_4- inner node disablement + // 24 smurf_bnlm_1_0- inner node disablement + // 25 bnlm_3_4- inner node disablement + // 26 bxt_demosaic- inner node disablement + // 27 vcsc_2_0_b- inner node disablement + // 28 gltm_2_0- inner node disablement + // 29 ifd_segmap_xnr_1_4- inner node disablement + // 30 smurf_xnr_1_0- inner node disablement + // 31 xnr_5_4- inner node disablement + // 32 vcr_3_1- inner node disablement + // 33 glim_2_0- inner node disablement + // 34 ifd_segmap_acm_1_4- inner node disablement + // 35 smurf_acm_1_0- inner node disablement + // 36 acm_1_2- inner node disablement + // 37 gammatm_v4- inner node disablement + // 38 csc_1_1- inner node disablement + // 39 b2i_ds_1_1- inner node disablement + // 40 lbff_crop_espa_1_4- inner node disablement + // 41 tnr7_spatial_1_1- inner node disablement + // 42 tnr_scaler_lb_1_1- inner node disablement + // 43 tnr7_ims_1_2- inner node disablement + // 44 gmv_statistics_1_1- inner node disablement + // 45 odr_gmv_feature_1_4- inner node disablement + // 46 odr_gmv_match_1_4- inner node disablement + // 47 ifd_segmap_tnr_bc_1_4- inner node disablement + // 48 smurf_tnr_bc_1_0- inner node disablement + // 49 tnr7_bc_1_2- inner node disablement + // 50 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 51 ifd_segmap_tnr_blend_1_4- inner node disablement + // 52 smurf_tnr_blend_1_0- inner node disablement + // 53 tnr7_blend_1_1- inner node disablement + // 54 odr_tnr_fp_yuvn_1_4- inner node disablement + // 55 tnr_scaler_fp_1_1- inner node disablement + // 56 image_upscaler_1_1- inner node disablement + // 57 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 58 ifd_segmap_cas_1_4- inner node disablement + // 59 smurf_cas_1_0- inner node disablement + // 60 cas_1_1- inner node disablement + // 61 odr_ofs_mp_1_4- inner node disablement + // 62 b2i_ds_output_1_1- inner node disablement + // 63 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFF83040; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp | noIr)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 rgbs_grid_1_1- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 odr_ir_1_4- inner node disablement + // 7 odr_awb_std_1_4- inner node disablement + // 8 odr_awb_sve_1_4- inner node disablement + // 9 odr_awb_sat_1_4- inner node disablement + // 10 ifd_lsc_1_4- inner node disablement + // 11 lsc_1_2- inner node disablement + // 12 gd_2_2- inner node disablement + // 13 wb_1_1- inner node disablement + // 14 ccm_3a_2_0- inner node disablement + // 15 fr_grid_1_0- inner node disablement + // 16 aestatistics_2_1- inner node disablement + // 17 odr_ae_1_4- inner node disablement + // 18 odr_af_std_1_4- inner node disablement + // 19 ifd_gmv_1_4- inner node disablement + // 20 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 21 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 22 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 23 ifd_segmap_bnlm_1_4- inner node disablement + // 24 smurf_bnlm_1_0- inner node disablement + // 25 bnlm_3_4- inner node disablement + // 26 bxt_demosaic- inner node disablement + // 27 vcsc_2_0_b- inner node disablement + // 28 gltm_2_0- inner node disablement + // 29 ifd_segmap_xnr_1_4- inner node disablement + // 30 smurf_xnr_1_0- inner node disablement + // 31 xnr_5_4- inner node disablement + // 32 vcr_3_1- inner node disablement + // 33 glim_2_0- inner node disablement + // 34 ifd_segmap_acm_1_4- inner node disablement + // 35 smurf_acm_1_0- inner node disablement + // 36 acm_1_2- inner node disablement + // 37 gammatm_v4- inner node disablement + // 38 csc_1_1- inner node disablement + // 39 b2i_ds_1_1- inner node disablement + // 40 lbff_crop_espa_1_4- inner node disablement + // 41 tnr7_spatial_1_1- inner node disablement + // 42 tnr_scaler_lb_1_1- inner node disablement + // 43 tnr7_ims_1_2- inner node disablement + // 44 gmv_statistics_1_1- inner node disablement + // 45 odr_gmv_feature_1_4- inner node disablement + // 46 odr_gmv_match_1_4- inner node disablement + // 47 ifd_segmap_tnr_bc_1_4- inner node disablement + // 48 smurf_tnr_bc_1_0- inner node disablement + // 49 tnr7_bc_1_2- inner node disablement + // 50 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 51 ifd_segmap_tnr_blend_1_4- inner node disablement + // 52 smurf_tnr_blend_1_0- inner node disablement + // 53 tnr7_blend_1_1- inner node disablement + // 54 odr_tnr_fp_yuvn_1_4- inner node disablement + // 55 tnr_scaler_fp_1_1- inner node disablement + // 56 image_upscaler_1_1- inner node disablement + // 57 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 58 ifd_segmap_cas_1_4- inner node disablement + // 59 smurf_cas_1_0- inner node disablement + // 60 cas_1_1- inner node disablement + // 61 odr_ofs_mp_1_4- inner node disablement + // 62 b2i_ds_output_1_1- inner node disablement + // 63 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000067FCFD503B6871 + bitmaps.rbm[0] = 0x503B6871; + bitmaps.rbm[1] = 0x67FCFD; + // DEB - 0x000000000000E1FFFFFFFFFEEF9FF1F1 + bitmaps.deb[0] = 0xEF9FF1F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFF65E9F + bitmaps.teb[0] = 0xFFF65E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF3F67FEF + bitmaps.reb[0] = 0xF3F67FEF; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffIrNoGmvNoTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 41; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[7].run_kernel.enable = 0; // wb_1_1 + nodeKernels.kernelList[19].run_kernel.enable = 0; // bxt_demosaic + nodeKernels.kernelList[29].run_kernel.enable = 0; // acm_1_2 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000064001D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x64001D; + // DEB - 0x000000000000E1E00000FFFEEC0001F1 + bitmaps.deb[0] = 0xEC0001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F000009F + bitmaps.teb[0] = 0xF000009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F10F607E7 + bitmaps.reb[0] = 0x10F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 8 rgbs_grid_1_1- inner node disablement + // 9 ccm_3a_2_0- inner node disablement + // 10 fr_grid_1_0- inner node disablement + // 11 odr_awb_std_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFF00; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000044001D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x44001D; + // DEB - 0x000000000000C1E00000FFFEEC1BF1F1 + bitmaps.deb[0] = 0xEC1BF1F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E0001E9F + bitmaps.teb[0] = 0xE0001E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F10F67FE7 + bitmaps.reb[0] = 0x10F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 38 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x4000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000044001D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x44001D; + // DEB - 0x000000000000C1E00000FFFEEC0001F1 + bitmaps.deb[0] = 0xEC0001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E000009F + bitmaps.teb[0] = 0xE000009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F10F607E7 + bitmaps.reb[0] = 0x10F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 8 rgbs_grid_1_1- inner node disablement + // 9 ccm_3a_2_0- inner node disablement + // 10 fr_grid_1_0- inner node disablement + // 11 odr_awb_std_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 odr_af_std_1_4- inner node disablement + // 38 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x400000FF00; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000024001D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x24001D; + // DEB - 0x00000000000021E00000FFFEEC1BF1F1 + bitmaps.deb[0] = 0xEC1BF1F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D0001E9F + bitmaps.teb[0] = 0xD0001E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F10F67FE7 + bitmaps.reb[0] = 0x10F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 39 b2i_ds_output_1_1- inner node disablement + // 40 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x18000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000024001D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x24001D; + // DEB - 0x00000000000021E00000FFFEEC0001F1 + bitmaps.deb[0] = 0xEC0001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D000009F + bitmaps.teb[0] = 0xD000009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F10F607E7 + bitmaps.reb[0] = 0x10F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 8 rgbs_grid_1_1- inner node disablement + // 9 ccm_3a_2_0- inner node disablement + // 10 fr_grid_1_0- inner node disablement + // 11 odr_awb_std_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 odr_af_std_1_4- inner node disablement + // 39 b2i_ds_output_1_1- inner node disablement + // 40 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1800000FF00; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000000001E9009 + bitmaps.rbm[0] = 0x1E9009; + // DEB - 0x000000000000000000000000001BF1F1 + bitmaps.deb[0] = 0x1BF1F1; + // TEB - 0x0000000000001E97 + bitmaps.teb[0] = 0x1E97; + // REB - 0x00000000000000000000000000007FE7 + bitmaps.reb[0] = 0x7FE7; + + // Kernels disablement + // 6 gd_2_2- inner node disablement + // 7 wb_1_1- inner node disablement + // 16 ifd_segmap_bnlm_1_4- inner node disablement + // 17 smurf_bnlm_1_0- inner node disablement + // 18 bnlm_3_4- inner node disablement + // 19 bxt_demosaic- inner node disablement + // 20 vcsc_2_0_b- inner node disablement + // 21 gltm_2_0- inner node disablement + // 22 ifd_segmap_xnr_1_4- inner node disablement + // 23 smurf_xnr_1_0- inner node disablement + // 24 xnr_5_4- inner node disablement + // 25 vcr_3_1- inner node disablement + // 26 glim_2_0- inner node disablement + // 27 ifd_segmap_acm_1_4- inner node disablement + // 28 smurf_acm_1_0- inner node disablement + // 29 acm_1_2- inner node disablement + // 30 gammatm_v4- inner node disablement + // 31 csc_1_1- inner node disablement + // 32 b2i_ds_1_1- inner node disablement + // 33 lbff_crop_espa_1_4- inner node disablement + // 34 image_upscaler_1_1- inner node disablement + // 35 ifd_segmap_cas_1_4- inner node disablement + // 36 smurf_cas_1_0- inner node disablement + // 37 cas_1_1- inner node disablement + // 38 odr_ofs_mp_1_4- inner node disablement + // 39 b2i_ds_output_1_1- inner node disablement + // 40 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFF00C0; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 ifd_lsc_1_4- inner node disablement + // 4 lsc_1_2- inner node disablement + // 5 dpc_2_2- inner node disablement + // 6 gd_2_2- inner node disablement + // 7 wb_1_1- inner node disablement + // 8 rgbs_grid_1_1- inner node disablement + // 9 ccm_3a_2_0- inner node disablement + // 10 fr_grid_1_0- inner node disablement + // 11 odr_awb_std_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 odr_af_std_1_4- inner node disablement + // 16 ifd_segmap_bnlm_1_4- inner node disablement + // 17 smurf_bnlm_1_0- inner node disablement + // 18 bnlm_3_4- inner node disablement + // 19 bxt_demosaic- inner node disablement + // 20 vcsc_2_0_b- inner node disablement + // 21 gltm_2_0- inner node disablement + // 22 ifd_segmap_xnr_1_4- inner node disablement + // 23 smurf_xnr_1_0- inner node disablement + // 24 xnr_5_4- inner node disablement + // 25 vcr_3_1- inner node disablement + // 26 glim_2_0- inner node disablement + // 27 ifd_segmap_acm_1_4- inner node disablement + // 28 smurf_acm_1_0- inner node disablement + // 29 acm_1_2- inner node disablement + // 30 gammatm_v4- inner node disablement + // 31 csc_1_1- inner node disablement + // 32 b2i_ds_1_1- inner node disablement + // 33 lbff_crop_espa_1_4- inner node disablement + // 34 image_upscaler_1_1- inner node disablement + // 35 ifd_segmap_cas_1_4- inner node disablement + // 36 smurf_cas_1_0- inner node disablement + // 37 cas_1_1- inner node disablement + // 38 odr_ofs_mp_1_4- inner node disablement + // 39 b2i_ds_output_1_1- inner node disablement + // 40 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000064001D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x64001D; + // DEB - 0x000000000000E1E00000FFFEEC1BF1F1 + bitmaps.deb[0] = 0xEC1BF1F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F0001E9F + bitmaps.teb[0] = 0xF0001E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F10F67FE7 + bitmaps.reb[0] = 0x10F67FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffIrWithGmvNoTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 45; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[7].run_kernel.enable = 0; // wb_1_1 + nodeKernels.kernelList[20].run_kernel.enable = 0; // bxt_demosaic + nodeKernels.kernelList[30].run_kernel.enable = 0; // acm_1_2 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000064003D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x64003D; + // DEB - 0x000000000000E1E0000FFFFEEC0001F1 + bitmaps.deb[0] = 0xEC0001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F032009F + bitmaps.teb[0] = 0xF032009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F10F607E7 + bitmaps.reb[0] = 0x10F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 8 rgbs_grid_1_1- inner node disablement + // 9 ccm_3a_2_0- inner node disablement + // 10 fr_grid_1_0- inner node disablement + // 11 odr_awb_std_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFF00; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000044003D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x44003D; + // DEB - 0x000000000000C1E0000FFFFEEC1BF1F1 + bitmaps.deb[0] = 0xEC1BF1F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E0321E9F + bitmaps.teb[0] = 0xE0321E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F10F67FE7 + bitmaps.reb[0] = 0x10F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 42 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x40000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000044003D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x44003D; + // DEB - 0x000000000000C1E0000FFFFEEC0001F1 + bitmaps.deb[0] = 0xEC0001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E032009F + bitmaps.teb[0] = 0xE032009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F10F607E7 + bitmaps.reb[0] = 0x10F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 8 rgbs_grid_1_1- inner node disablement + // 9 ccm_3a_2_0- inner node disablement + // 10 fr_grid_1_0- inner node disablement + // 11 odr_awb_std_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 odr_af_std_1_4- inner node disablement + // 42 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x4000000FF00; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000024003D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x24003D; + // DEB - 0x00000000000021E0000FFFFEEC1BF1F1 + bitmaps.deb[0] = 0xEC1BF1F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D0321E9F + bitmaps.teb[0] = 0xD0321E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F10F67FE7 + bitmaps.reb[0] = 0x10F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 43 b2i_ds_output_1_1- inner node disablement + // 44 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x180000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000024003D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x24003D; + // DEB - 0x00000000000021E0000FFFFEEC0001F1 + bitmaps.deb[0] = 0xEC0001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D032009F + bitmaps.teb[0] = 0xD032009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F10F607E7 + bitmaps.reb[0] = 0x10F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 8 rgbs_grid_1_1- inner node disablement + // 9 ccm_3a_2_0- inner node disablement + // 10 fr_grid_1_0- inner node disablement + // 11 odr_awb_std_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 odr_af_std_1_4- inner node disablement + // 43 b2i_ds_output_1_1- inner node disablement + // 44 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x18000000FF00; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000000001E9009 + bitmaps.rbm[0] = 0x1E9009; + // DEB - 0x000000000000000000000000001BF1F1 + bitmaps.deb[0] = 0x1BF1F1; + // TEB - 0x0000000000001E97 + bitmaps.teb[0] = 0x1E97; + // REB - 0x00000000000000000000000000007FE7 + bitmaps.reb[0] = 0x7FE7; + + // Kernels disablement + // 6 gd_2_2- inner node disablement + // 7 wb_1_1- inner node disablement + // 16 ifd_gmv_1_4- inner node disablement + // 17 ifd_segmap_bnlm_1_4- inner node disablement + // 18 smurf_bnlm_1_0- inner node disablement + // 19 bnlm_3_4- inner node disablement + // 20 bxt_demosaic- inner node disablement + // 21 vcsc_2_0_b- inner node disablement + // 22 gltm_2_0- inner node disablement + // 23 ifd_segmap_xnr_1_4- inner node disablement + // 24 smurf_xnr_1_0- inner node disablement + // 25 xnr_5_4- inner node disablement + // 26 vcr_3_1- inner node disablement + // 27 glim_2_0- inner node disablement + // 28 ifd_segmap_acm_1_4- inner node disablement + // 29 smurf_acm_1_0- inner node disablement + // 30 acm_1_2- inner node disablement + // 31 gammatm_v4- inner node disablement + // 32 csc_1_1- inner node disablement + // 33 b2i_ds_1_1- inner node disablement + // 34 lbff_crop_espa_1_4- inner node disablement + // 35 image_upscaler_1_1- inner node disablement + // 36 gmv_statistics_1_1- inner node disablement + // 37 odr_gmv_feature_1_4- inner node disablement + // 38 odr_gmv_match_1_4- inner node disablement + // 39 ifd_segmap_cas_1_4- inner node disablement + // 40 smurf_cas_1_0- inner node disablement + // 41 cas_1_1- inner node disablement + // 42 odr_ofs_mp_1_4- inner node disablement + // 43 b2i_ds_output_1_1- inner node disablement + // 44 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFF00C0; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 ifd_lsc_1_4- inner node disablement + // 4 lsc_1_2- inner node disablement + // 5 dpc_2_2- inner node disablement + // 6 gd_2_2- inner node disablement + // 7 wb_1_1- inner node disablement + // 8 rgbs_grid_1_1- inner node disablement + // 9 ccm_3a_2_0- inner node disablement + // 10 fr_grid_1_0- inner node disablement + // 11 odr_awb_std_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 odr_af_std_1_4- inner node disablement + // 16 ifd_gmv_1_4- inner node disablement + // 17 ifd_segmap_bnlm_1_4- inner node disablement + // 18 smurf_bnlm_1_0- inner node disablement + // 19 bnlm_3_4- inner node disablement + // 20 bxt_demosaic- inner node disablement + // 21 vcsc_2_0_b- inner node disablement + // 22 gltm_2_0- inner node disablement + // 23 ifd_segmap_xnr_1_4- inner node disablement + // 24 smurf_xnr_1_0- inner node disablement + // 25 xnr_5_4- inner node disablement + // 26 vcr_3_1- inner node disablement + // 27 glim_2_0- inner node disablement + // 28 ifd_segmap_acm_1_4- inner node disablement + // 29 smurf_acm_1_0- inner node disablement + // 30 acm_1_2- inner node disablement + // 31 gammatm_v4- inner node disablement + // 32 csc_1_1- inner node disablement + // 33 b2i_ds_1_1- inner node disablement + // 34 lbff_crop_espa_1_4- inner node disablement + // 35 image_upscaler_1_1- inner node disablement + // 36 gmv_statistics_1_1- inner node disablement + // 37 odr_gmv_feature_1_4- inner node disablement + // 38 odr_gmv_match_1_4- inner node disablement + // 39 ifd_segmap_cas_1_4- inner node disablement + // 40 smurf_cas_1_0- inner node disablement + // 41 cas_1_1- inner node disablement + // 42 odr_ofs_mp_1_4- inner node disablement + // 43 b2i_ds_output_1_1- inner node disablement + // 44 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000064003D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x64003D; + // DEB - 0x000000000000E1E0000FFFFEEC1BF1F1 + bitmaps.deb[0] = 0xEC1BF1F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F0321E9F + bitmaps.teb[0] = 0xF0321E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F10F67FE7 + bitmaps.reb[0] = 0x10F67FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffIrNoGmvWithTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 57; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[7].run_kernel.enable = 0; // wb_1_1 + nodeKernels.kernelList[22].run_kernel.enable = 0; // bxt_demosaic + nodeKernels.kernelList[32].run_kernel.enable = 0; // acm_1_2 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000067FC1D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x67FC1D; + // DEB - 0x000000000000E1FFFFF0FFFEEC0001F1 + bitmaps.deb[0] = 0xEC0001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFC0009F + bitmaps.teb[0] = 0xFFC0009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF0F607E7 + bitmaps.reb[0] = 0xF0F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 8 rgbs_grid_1_1- inner node disablement + // 9 ccm_3a_2_0- inner node disablement + // 10 fr_grid_1_0- inner node disablement + // 11 odr_awb_std_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFF00; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FC1D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x47FC1D; + // DEB - 0x000000000000C1FFFFF0FFFEEC1BF1F1 + bitmaps.deb[0] = 0xEC1BF1F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFC01E9F + bitmaps.teb[0] = 0xEFC01E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF0F67FE7 + bitmaps.reb[0] = 0xF0F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 54 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x40000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FC1D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x47FC1D; + // DEB - 0x000000000000C1FFFFF0FFFEEC0001F1 + bitmaps.deb[0] = 0xEC0001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFC0009F + bitmaps.teb[0] = 0xEFC0009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF0F607E7 + bitmaps.reb[0] = 0xF0F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 8 rgbs_grid_1_1- inner node disablement + // 9 ccm_3a_2_0- inner node disablement + // 10 fr_grid_1_0- inner node disablement + // 11 odr_awb_std_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 odr_af_std_1_4- inner node disablement + // 54 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x4000000000FF00; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FC1D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x27FC1D; + // DEB - 0x00000000000021FFFFF0FFFEEC1BF1F1 + bitmaps.deb[0] = 0xEC1BF1F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFC01E9F + bitmaps.teb[0] = 0xDFC01E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF0F67FE7 + bitmaps.reb[0] = 0xF0F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 55 b2i_ds_output_1_1- inner node disablement + // 56 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x180000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FC1D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x27FC1D; + // DEB - 0x00000000000021FFFFF0FFFEEC0001F1 + bitmaps.deb[0] = 0xEC0001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFC0009F + bitmaps.teb[0] = 0xDFC0009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF0F607E7 + bitmaps.reb[0] = 0xF0F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 8 rgbs_grid_1_1- inner node disablement + // 9 ccm_3a_2_0- inner node disablement + // 10 fr_grid_1_0- inner node disablement + // 11 odr_awb_std_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 odr_af_std_1_4- inner node disablement + // 55 b2i_ds_output_1_1- inner node disablement + // 56 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x18000000000FF00; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000000001E9009 + bitmaps.rbm[0] = 0x1E9009; + // DEB - 0x000000000000000000000000001BF1F1 + bitmaps.deb[0] = 0x1BF1F1; + // TEB - 0x0000000000001E97 + bitmaps.teb[0] = 0x1E97; + // REB - 0x00000000000000000000000000007FE7 + bitmaps.reb[0] = 0x7FE7; + + // Kernels disablement + // 6 gd_2_2- inner node disablement + // 7 wb_1_1- inner node disablement + // 16 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 17 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 18 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 19 ifd_segmap_bnlm_1_4- inner node disablement + // 20 smurf_bnlm_1_0- inner node disablement + // 21 bnlm_3_4- inner node disablement + // 22 bxt_demosaic- inner node disablement + // 23 vcsc_2_0_b- inner node disablement + // 24 gltm_2_0- inner node disablement + // 25 ifd_segmap_xnr_1_4- inner node disablement + // 26 smurf_xnr_1_0- inner node disablement + // 27 xnr_5_4- inner node disablement + // 28 vcr_3_1- inner node disablement + // 29 glim_2_0- inner node disablement + // 30 ifd_segmap_acm_1_4- inner node disablement + // 31 smurf_acm_1_0- inner node disablement + // 32 acm_1_2- inner node disablement + // 33 gammatm_v4- inner node disablement + // 34 csc_1_1- inner node disablement + // 35 b2i_ds_1_1- inner node disablement + // 36 lbff_crop_espa_1_4- inner node disablement + // 37 tnr7_spatial_1_1- inner node disablement + // 38 tnr_scaler_lb_1_1- inner node disablement + // 39 tnr7_ims_1_2- inner node disablement + // 40 ifd_segmap_tnr_bc_1_4- inner node disablement + // 41 smurf_tnr_bc_1_0- inner node disablement + // 42 tnr7_bc_1_2- inner node disablement + // 43 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 44 ifd_segmap_tnr_blend_1_4- inner node disablement + // 45 smurf_tnr_blend_1_0- inner node disablement + // 46 tnr7_blend_1_1- inner node disablement + // 47 odr_tnr_fp_yuvn_1_4- inner node disablement + // 48 tnr_scaler_fp_1_1- inner node disablement + // 49 image_upscaler_1_1- inner node disablement + // 50 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 51 ifd_segmap_cas_1_4- inner node disablement + // 52 smurf_cas_1_0- inner node disablement + // 53 cas_1_1- inner node disablement + // 54 odr_ofs_mp_1_4- inner node disablement + // 55 b2i_ds_output_1_1- inner node disablement + // 56 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFFF00C0; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 ifd_lsc_1_4- inner node disablement + // 4 lsc_1_2- inner node disablement + // 5 dpc_2_2- inner node disablement + // 6 gd_2_2- inner node disablement + // 7 wb_1_1- inner node disablement + // 8 rgbs_grid_1_1- inner node disablement + // 9 ccm_3a_2_0- inner node disablement + // 10 fr_grid_1_0- inner node disablement + // 11 odr_awb_std_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 odr_af_std_1_4- inner node disablement + // 16 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 17 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 18 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 19 ifd_segmap_bnlm_1_4- inner node disablement + // 20 smurf_bnlm_1_0- inner node disablement + // 21 bnlm_3_4- inner node disablement + // 22 bxt_demosaic- inner node disablement + // 23 vcsc_2_0_b- inner node disablement + // 24 gltm_2_0- inner node disablement + // 25 ifd_segmap_xnr_1_4- inner node disablement + // 26 smurf_xnr_1_0- inner node disablement + // 27 xnr_5_4- inner node disablement + // 28 vcr_3_1- inner node disablement + // 29 glim_2_0- inner node disablement + // 30 ifd_segmap_acm_1_4- inner node disablement + // 31 smurf_acm_1_0- inner node disablement + // 32 acm_1_2- inner node disablement + // 33 gammatm_v4- inner node disablement + // 34 csc_1_1- inner node disablement + // 35 b2i_ds_1_1- inner node disablement + // 36 lbff_crop_espa_1_4- inner node disablement + // 37 tnr7_spatial_1_1- inner node disablement + // 38 tnr_scaler_lb_1_1- inner node disablement + // 39 tnr7_ims_1_2- inner node disablement + // 40 ifd_segmap_tnr_bc_1_4- inner node disablement + // 41 smurf_tnr_bc_1_0- inner node disablement + // 42 tnr7_bc_1_2- inner node disablement + // 43 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 44 ifd_segmap_tnr_blend_1_4- inner node disablement + // 45 smurf_tnr_blend_1_0- inner node disablement + // 46 tnr7_blend_1_1- inner node disablement + // 47 odr_tnr_fp_yuvn_1_4- inner node disablement + // 48 tnr_scaler_fp_1_1- inner node disablement + // 49 image_upscaler_1_1- inner node disablement + // 50 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 51 ifd_segmap_cas_1_4- inner node disablement + // 52 smurf_cas_1_0- inner node disablement + // 53 cas_1_1- inner node disablement + // 54 odr_ofs_mp_1_4- inner node disablement + // 55 b2i_ds_output_1_1- inner node disablement + // 56 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000067FC1D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x67FC1D; + // DEB - 0x000000000000E1FFFFF0FFFEEC1BF1F1 + bitmaps.deb[0] = 0xEC1BF1F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFC01E9F + bitmaps.teb[0] = 0xFFC01E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF0F67FE7 + bitmaps.reb[0] = 0xF0F67FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffIrWithGmvWithTnrWithSapOuterNode::setInnerNode(InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 61; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[7].run_kernel.enable = 0; // wb_1_1 + nodeKernels.kernelList[23].run_kernel.enable = 0; // bxt_demosaic + nodeKernels.kernelList[33].run_kernel.enable = 0; // acm_1_2 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = nodeInnerOptions & (no3A | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000067FC3D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x67FC3D; + // DEB - 0x000000000000E1FFFFFFFFFEEC0001F1 + bitmaps.deb[0] = 0xEC0001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFF2009F + bitmaps.teb[0] = 0xFFF2009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF0F607E7 + bitmaps.reb[0] = 0xF0F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 8 rgbs_grid_1_1- inner node disablement + // 9 ccm_3a_2_0- inner node disablement + // 10 fr_grid_1_0- inner node disablement + // 11 odr_awb_std_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 odr_af_std_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFF00; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FC3D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x47FC3D; + // DEB - 0x000000000000C1FFFFFFFFFEEC1BF1F1 + bitmaps.deb[0] = 0xEC1BF1F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFF21E9F + bitmaps.teb[0] = 0xEFF21E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF0F67FE7 + bitmaps.reb[0] = 0xF0F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 58 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x400000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FC3D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x47FC3D; + // DEB - 0x000000000000C1FFFFFFFFFEEC0001F1 + bitmaps.deb[0] = 0xEC0001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFF2009F + bitmaps.teb[0] = 0xEFF2009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF0F607E7 + bitmaps.reb[0] = 0xF0F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 8 rgbs_grid_1_1- inner node disablement + // 9 ccm_3a_2_0- inner node disablement + // 10 fr_grid_1_0- inner node disablement + // 11 odr_awb_std_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 odr_af_std_1_4- inner node disablement + // 58 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x40000000000FF00; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FC3D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x27FC3D; + // DEB - 0x00000000000021FFFFFFFFFEEC1BF1F1 + bitmaps.deb[0] = 0xEC1BF1F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFF21E9F + bitmaps.teb[0] = 0xDFF21E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF0F67FE7 + bitmaps.reb[0] = 0xF0F67FE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 59 b2i_ds_output_1_1- inner node disablement + // 60 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1800000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FC3D50019009 + bitmaps.rbm[0] = 0x50019009; + bitmaps.rbm[1] = 0x27FC3D; + // DEB - 0x00000000000021FFFFFFFFFEEC0001F1 + bitmaps.deb[0] = 0xEC0001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFF2009F + bitmaps.teb[0] = 0xDFF2009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF0F607E7 + bitmaps.reb[0] = 0xF0F607E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 8 rgbs_grid_1_1- inner node disablement + // 9 ccm_3a_2_0- inner node disablement + // 10 fr_grid_1_0- inner node disablement + // 11 odr_awb_std_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 odr_af_std_1_4- inner node disablement + // 59 b2i_ds_output_1_1- inner node disablement + // 60 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x180000000000FF00; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000000001E9009 + bitmaps.rbm[0] = 0x1E9009; + // DEB - 0x000000000000000000000000001BF1F1 + bitmaps.deb[0] = 0x1BF1F1; + // TEB - 0x0000000000001E97 + bitmaps.teb[0] = 0x1E97; + // REB - 0x00000000000000000000000000007FE7 + bitmaps.reb[0] = 0x7FE7; + + // Kernels disablement + // 6 gd_2_2- inner node disablement + // 7 wb_1_1- inner node disablement + // 16 ifd_gmv_1_4- inner node disablement + // 17 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 18 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 19 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 20 ifd_segmap_bnlm_1_4- inner node disablement + // 21 smurf_bnlm_1_0- inner node disablement + // 22 bnlm_3_4- inner node disablement + // 23 bxt_demosaic- inner node disablement + // 24 vcsc_2_0_b- inner node disablement + // 25 gltm_2_0- inner node disablement + // 26 ifd_segmap_xnr_1_4- inner node disablement + // 27 smurf_xnr_1_0- inner node disablement + // 28 xnr_5_4- inner node disablement + // 29 vcr_3_1- inner node disablement + // 30 glim_2_0- inner node disablement + // 31 ifd_segmap_acm_1_4- inner node disablement + // 32 smurf_acm_1_0- inner node disablement + // 33 acm_1_2- inner node disablement + // 34 gammatm_v4- inner node disablement + // 35 csc_1_1- inner node disablement + // 36 b2i_ds_1_1- inner node disablement + // 37 lbff_crop_espa_1_4- inner node disablement + // 38 tnr7_spatial_1_1- inner node disablement + // 39 tnr_scaler_lb_1_1- inner node disablement + // 40 tnr7_ims_1_2- inner node disablement + // 41 gmv_statistics_1_1- inner node disablement + // 42 odr_gmv_feature_1_4- inner node disablement + // 43 odr_gmv_match_1_4- inner node disablement + // 44 ifd_segmap_tnr_bc_1_4- inner node disablement + // 45 smurf_tnr_bc_1_0- inner node disablement + // 46 tnr7_bc_1_2- inner node disablement + // 47 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 48 ifd_segmap_tnr_blend_1_4- inner node disablement + // 49 smurf_tnr_blend_1_0- inner node disablement + // 50 tnr7_blend_1_1- inner node disablement + // 51 odr_tnr_fp_yuvn_1_4- inner node disablement + // 52 tnr_scaler_fp_1_1- inner node disablement + // 53 image_upscaler_1_1- inner node disablement + // 54 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 55 ifd_segmap_cas_1_4- inner node disablement + // 56 smurf_cas_1_0- inner node disablement + // 57 cas_1_1- inner node disablement + // 58 odr_ofs_mp_1_4- inner node disablement + // 59 b2i_ds_output_1_1- inner node disablement + // 60 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFFFF00C0; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 ifd_lsc_1_4- inner node disablement + // 4 lsc_1_2- inner node disablement + // 5 dpc_2_2- inner node disablement + // 6 gd_2_2- inner node disablement + // 7 wb_1_1- inner node disablement + // 8 rgbs_grid_1_1- inner node disablement + // 9 ccm_3a_2_0- inner node disablement + // 10 fr_grid_1_0- inner node disablement + // 11 odr_awb_std_1_4- inner node disablement + // 12 odr_awb_sat_1_4- inner node disablement + // 13 aestatistics_2_1- inner node disablement + // 14 odr_ae_1_4- inner node disablement + // 15 odr_af_std_1_4- inner node disablement + // 16 ifd_gmv_1_4- inner node disablement + // 17 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 18 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 19 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 20 ifd_segmap_bnlm_1_4- inner node disablement + // 21 smurf_bnlm_1_0- inner node disablement + // 22 bnlm_3_4- inner node disablement + // 23 bxt_demosaic- inner node disablement + // 24 vcsc_2_0_b- inner node disablement + // 25 gltm_2_0- inner node disablement + // 26 ifd_segmap_xnr_1_4- inner node disablement + // 27 smurf_xnr_1_0- inner node disablement + // 28 xnr_5_4- inner node disablement + // 29 vcr_3_1- inner node disablement + // 30 glim_2_0- inner node disablement + // 31 ifd_segmap_acm_1_4- inner node disablement + // 32 smurf_acm_1_0- inner node disablement + // 33 acm_1_2- inner node disablement + // 34 gammatm_v4- inner node disablement + // 35 csc_1_1- inner node disablement + // 36 b2i_ds_1_1- inner node disablement + // 37 lbff_crop_espa_1_4- inner node disablement + // 38 tnr7_spatial_1_1- inner node disablement + // 39 tnr_scaler_lb_1_1- inner node disablement + // 40 tnr7_ims_1_2- inner node disablement + // 41 gmv_statistics_1_1- inner node disablement + // 42 odr_gmv_feature_1_4- inner node disablement + // 43 odr_gmv_match_1_4- inner node disablement + // 44 ifd_segmap_tnr_bc_1_4- inner node disablement + // 45 smurf_tnr_bc_1_0- inner node disablement + // 46 tnr7_bc_1_2- inner node disablement + // 47 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 48 ifd_segmap_tnr_blend_1_4- inner node disablement + // 49 smurf_tnr_blend_1_0- inner node disablement + // 50 tnr7_blend_1_1- inner node disablement + // 51 odr_tnr_fp_yuvn_1_4- inner node disablement + // 52 tnr_scaler_fp_1_1- inner node disablement + // 53 image_upscaler_1_1- inner node disablement + // 54 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 55 ifd_segmap_cas_1_4- inner node disablement + // 56 smurf_cas_1_0- inner node disablement + // 57 cas_1_1- inner node disablement + // 58 odr_ofs_mp_1_4- inner node disablement + // 59 b2i_ds_output_1_1- inner node disablement + // 60 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1FFFFFFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000067FC3D501F9009 + bitmaps.rbm[0] = 0x501F9009; + bitmaps.rbm[1] = 0x67FC3D; + // DEB - 0x000000000000E1FFFFFFFFFEEC1BF1F1 + bitmaps.deb[0] = 0xEC1BF1F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFF21E9F + bitmaps.teb[0] = 0xFFF21E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF0F67FE7 + bitmaps.reb[0] = 0xF0F67FE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode::setInnerNode( + InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 47; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = + nodeInnerOptions & (no3A | noPdaf | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000064009D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1E00000FFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F008009F + bitmaps.teb[0] = 0xF008009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFC00; + } else if (nodeRelevantInnerOptions == (noPdaf)) { + // HW bitmaps + // RBM - 0x00000000000000000064009D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1E00000FFFEEDBBF1F1 + bitmaps.deb[0] = 0xEDBBF1F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F0081E9F + bitmaps.teb[0] = 0xF0081E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F6FFE7 + bitmaps.reb[0] = 0x12F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3C0000; + } else if (nodeRelevantInnerOptions == (no3A | noPdaf)) { + // HW bitmaps + // RBM - 0x00000000000000000064009D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x64009D; + // DEB - 0x000000000000E1E00000FFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F008009F + bitmaps.teb[0] = 0xF008009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFC00; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000044019D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x44019D; + // DEB - 0x000000000000C1E00000FFFEEDFBFFF1 + bitmaps.deb[0] = 0xEDFBFFF1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E0083F9F + bitmaps.teb[0] = 0xE0083F9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 44 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x100000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000044009D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1E00000FFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E008009F + bitmaps.teb[0] = 0xE008009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 44 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1000003FFC00; + } else if (nodeRelevantInnerOptions == (noPdaf | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000044009D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1E00000FFFEEDBBF1F1 + bitmaps.deb[0] = 0xEDBBF1F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E0081E9F + bitmaps.teb[0] = 0xE0081E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F6FFE7 + bitmaps.reb[0] = 0x12F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 44 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1000003C0000; + } else if (nodeRelevantInnerOptions == (no3A | noPdaf | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000044009D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x44009D; + // DEB - 0x000000000000C1E00000FFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E008009F + bitmaps.teb[0] = 0xE008009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 44 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1000003FFC00; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000024019D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x24019D; + // DEB - 0x00000000000021E00000FFFEEDFBFFF1 + bitmaps.deb[0] = 0xEDFBFFF1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D0083F9F + bitmaps.teb[0] = 0xD0083F9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 45 b2i_ds_output_1_1- inner node disablement + // 46 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x600000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000024009D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021E00000FFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D008009F + bitmaps.teb[0] = 0xD008009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 45 b2i_ds_output_1_1- inner node disablement + // 46 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x6000003FFC00; + } else if (nodeRelevantInnerOptions == (noPdaf | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000024009D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021E00000FFFEEDBBF1F1 + bitmaps.deb[0] = 0xEDBBF1F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D0081E9F + bitmaps.teb[0] = 0xD0081E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F6FFE7 + bitmaps.reb[0] = 0x12F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 45 b2i_ds_output_1_1- inner node disablement + // 46 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x6000003C0000; + } else if (nodeRelevantInnerOptions == (no3A | noPdaf | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000024009D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x24009D; + // DEB - 0x00000000000021E00000FFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D008009F + bitmaps.teb[0] = 0xD008009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 45 b2i_ds_output_1_1- inner node disablement + // 46 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x6000003FFC00; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000180041E6811 + bitmaps.rbm[0] = 0x41E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001FBFFF1 + bitmaps.deb[0] = 0x1FBFFF1; + // TEB - 0x0000000000083F97 + bitmaps.teb[0] = 0x83F97; + // REB - 0x0000000000000000000000000601FFE7 + bitmaps.reb[0] = 0x601FFE7; + + // Kernels disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 22 ifd_segmap_bnlm_1_4- inner node disablement + // 23 smurf_bnlm_1_0- inner node disablement + // 24 bnlm_3_4- inner node disablement + // 25 bxt_demosaic- inner node disablement + // 26 vcsc_2_0_b- inner node disablement + // 27 gltm_2_0- inner node disablement + // 28 ifd_segmap_xnr_1_4- inner node disablement + // 29 smurf_xnr_1_0- inner node disablement + // 30 xnr_5_4- inner node disablement + // 31 vcr_3_1- inner node disablement + // 32 glim_2_0- inner node disablement + // 33 ifd_segmap_acm_1_4- inner node disablement + // 34 smurf_acm_1_0- inner node disablement + // 35 acm_1_2- inner node disablement + // 36 gammatm_v4- inner node disablement + // 37 csc_1_1- inner node disablement + // 38 b2i_ds_1_1- inner node disablement + // 39 lbff_crop_espa_1_4- inner node disablement + // 40 image_upscaler_1_1- inner node disablement + // 41 ifd_segmap_cas_1_4- inner node disablement + // 42 smurf_cas_1_0- inner node disablement + // 43 cas_1_1- inner node disablement + // 44 odr_ofs_mp_1_4- inner node disablement + // 45 b2i_ds_output_1_1- inner node disablement + // 46 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFC00300; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 odr_dpc_pdaf_1_4- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 ifd_lsc_1_4- inner node disablement + // 7 lsc_1_2- inner node disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 22 ifd_segmap_bnlm_1_4- inner node disablement + // 23 smurf_bnlm_1_0- inner node disablement + // 24 bnlm_3_4- inner node disablement + // 25 bxt_demosaic- inner node disablement + // 26 vcsc_2_0_b- inner node disablement + // 27 gltm_2_0- inner node disablement + // 28 ifd_segmap_xnr_1_4- inner node disablement + // 29 smurf_xnr_1_0- inner node disablement + // 30 xnr_5_4- inner node disablement + // 31 vcr_3_1- inner node disablement + // 32 glim_2_0- inner node disablement + // 33 ifd_segmap_acm_1_4- inner node disablement + // 34 smurf_acm_1_0- inner node disablement + // 35 acm_1_2- inner node disablement + // 36 gammatm_v4- inner node disablement + // 37 csc_1_1- inner node disablement + // 38 b2i_ds_1_1- inner node disablement + // 39 lbff_crop_espa_1_4- inner node disablement + // 40 image_upscaler_1_1- inner node disablement + // 41 ifd_segmap_cas_1_4- inner node disablement + // 42 smurf_cas_1_0- inner node disablement + // 43 cas_1_1- inner node disablement + // 44 odr_ofs_mp_1_4- inner node disablement + // 45 b2i_ds_output_1_1- inner node disablement + // 46 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFFFFFF; + } else if (nodeRelevantInnerOptions == (noPdaf | noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000080041E6811 + bitmaps.rbm[0] = 0x41E6811; + bitmaps.rbm[1] = 0x80; + // DEB - 0x00000000000000000000000001BBF1F1 + bitmaps.deb[0] = 0x1BBF1F1; + // TEB - 0x0000000000081E97 + bitmaps.teb[0] = 0x81E97; + // REB - 0x0000000000000000000000000200FFE7 + bitmaps.reb[0] = 0x200FFE7; + + // Kernels disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 22 ifd_segmap_bnlm_1_4- inner node disablement + // 23 smurf_bnlm_1_0- inner node disablement + // 24 bnlm_3_4- inner node disablement + // 25 bxt_demosaic- inner node disablement + // 26 vcsc_2_0_b- inner node disablement + // 27 gltm_2_0- inner node disablement + // 28 ifd_segmap_xnr_1_4- inner node disablement + // 29 smurf_xnr_1_0- inner node disablement + // 30 xnr_5_4- inner node disablement + // 31 vcr_3_1- inner node disablement + // 32 glim_2_0- inner node disablement + // 33 ifd_segmap_acm_1_4- inner node disablement + // 34 smurf_acm_1_0- inner node disablement + // 35 acm_1_2- inner node disablement + // 36 gammatm_v4- inner node disablement + // 37 csc_1_1- inner node disablement + // 38 b2i_ds_1_1- inner node disablement + // 39 lbff_crop_espa_1_4- inner node disablement + // 40 image_upscaler_1_1- inner node disablement + // 41 ifd_segmap_cas_1_4- inner node disablement + // 42 smurf_cas_1_0- inner node disablement + // 43 cas_1_1- inner node disablement + // 44 odr_ofs_mp_1_4- inner node disablement + // 45 b2i_ds_output_1_1- inner node disablement + // 46 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFC0300; + } else if (nodeRelevantInnerOptions == (no3A | noPdaf | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 odr_dpc_pdaf_1_4- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 ifd_lsc_1_4- inner node disablement + // 7 lsc_1_2- inner node disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 22 ifd_segmap_bnlm_1_4- inner node disablement + // 23 smurf_bnlm_1_0- inner node disablement + // 24 bnlm_3_4- inner node disablement + // 25 bxt_demosaic- inner node disablement + // 26 vcsc_2_0_b- inner node disablement + // 27 gltm_2_0- inner node disablement + // 28 ifd_segmap_xnr_1_4- inner node disablement + // 29 smurf_xnr_1_0- inner node disablement + // 30 xnr_5_4- inner node disablement + // 31 vcr_3_1- inner node disablement + // 32 glim_2_0- inner node disablement + // 33 ifd_segmap_acm_1_4- inner node disablement + // 34 smurf_acm_1_0- inner node disablement + // 35 acm_1_2- inner node disablement + // 36 gammatm_v4- inner node disablement + // 37 csc_1_1- inner node disablement + // 38 b2i_ds_1_1- inner node disablement + // 39 lbff_crop_espa_1_4- inner node disablement + // 40 image_upscaler_1_1- inner node disablement + // 41 ifd_segmap_cas_1_4- inner node disablement + // 42 smurf_cas_1_0- inner node disablement + // 43 cas_1_1- inner node disablement + // 44 odr_ofs_mp_1_4- inner node disablement + // 45 b2i_ds_output_1_1- inner node disablement + // 46 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000064019D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x64019D; + // DEB - 0x000000000000E1E00000FFFEEDFBFFF1 + bitmaps.deb[0] = 0xEDFBFFF1; + bitmaps.deb[1] = 0xFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F0083F9F + bitmaps.teb[0] = 0xF0083F9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode::setInnerNode( + InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 51; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = + nodeInnerOptions & (no3A | noPdaf | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x0000000000000000006400BD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E1E0000FFFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F03A009F + bitmaps.teb[0] = 0xF03A009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFC00; + } else if (nodeRelevantInnerOptions == (noPdaf)) { + // HW bitmaps + // RBM - 0x0000000000000000006400BD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E1E0000FFFFEEDBBF1F1 + bitmaps.deb[0] = 0xEDBBF1F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F03A1E9F + bitmaps.teb[0] = 0xF03A1E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F6FFE7 + bitmaps.reb[0] = 0x12F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3C0000; + } else if (nodeRelevantInnerOptions == (no3A | noPdaf)) { + // HW bitmaps + // RBM - 0x0000000000000000006400BD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x6400BD; + // DEB - 0x000000000000E1E0000FFFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F03A009F + bitmaps.teb[0] = 0xF03A009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFC00; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x0000000000000000004401BD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x4401BD; + // DEB - 0x000000000000C1E0000FFFFEEDFBFFF1 + bitmaps.deb[0] = 0xEDFBFFF1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E03A3F9F + bitmaps.teb[0] = 0xE03A3F9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 48 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x0000000000000000004400BD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C1E0000FFFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E03A009F + bitmaps.teb[0] = 0xE03A009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 48 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x10000003FFC00; + } else if (nodeRelevantInnerOptions == (noPdaf | noMp)) { + // HW bitmaps + // RBM - 0x0000000000000000004400BD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C1E0000FFFFEEDBBF1F1 + bitmaps.deb[0] = 0xEDBBF1F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E03A1E9F + bitmaps.teb[0] = 0xE03A1E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F6FFE7 + bitmaps.reb[0] = 0x12F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 48 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x10000003C0000; + } else if (nodeRelevantInnerOptions == (no3A | noPdaf | noMp)) { + // HW bitmaps + // RBM - 0x0000000000000000004400BD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x4400BD; + // DEB - 0x000000000000C1E0000FFFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xC1E0; + // TEB - 0x00000009E03A009F + bitmaps.teb[0] = 0xE03A009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 48 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x10000003FFC00; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x0000000000000000002401BD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x2401BD; + // DEB - 0x00000000000021E0000FFFFEEDFBFFF1 + bitmaps.deb[0] = 0xEDFBFFF1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D03A3F9F + bitmaps.teb[0] = 0xD03A3F9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 49 b2i_ds_output_1_1- inner node disablement + // 50 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x6000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x0000000000000000002400BD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x00000000000021E0000FFFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D03A009F + bitmaps.teb[0] = 0xD03A009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 49 b2i_ds_output_1_1- inner node disablement + // 50 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x60000003FFC00; + } else if (nodeRelevantInnerOptions == (noPdaf | noDp)) { + // HW bitmaps + // RBM - 0x0000000000000000002400BD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x00000000000021E0000FFFFEEDBBF1F1 + bitmaps.deb[0] = 0xEDBBF1F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D03A1E9F + bitmaps.teb[0] = 0xD03A1E9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F6FFE7 + bitmaps.reb[0] = 0x12F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 49 b2i_ds_output_1_1- inner node disablement + // 50 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x60000003C0000; + } else if (nodeRelevantInnerOptions == (no3A | noPdaf | noDp)) { + // HW bitmaps + // RBM - 0x0000000000000000002400BD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x2400BD; + // DEB - 0x00000000000021E0000FFFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0x21E0; + // TEB - 0x00000009D03A009F + bitmaps.teb[0] = 0xD03A009F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F12F687E7 + bitmaps.reb[0] = 0x12F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 49 b2i_ds_output_1_1- inner node disablement + // 50 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x60000003FFC00; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000180041E6811 + bitmaps.rbm[0] = 0x41E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001FBFFF1 + bitmaps.deb[0] = 0x1FBFFF1; + // TEB - 0x0000000000083F97 + bitmaps.teb[0] = 0x83F97; + // REB - 0x0000000000000000000000000601FFE7 + bitmaps.reb[0] = 0x601FFE7; + + // Kernels disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 22 ifd_gmv_1_4- inner node disablement + // 23 ifd_segmap_bnlm_1_4- inner node disablement + // 24 smurf_bnlm_1_0- inner node disablement + // 25 bnlm_3_4- inner node disablement + // 26 bxt_demosaic- inner node disablement + // 27 vcsc_2_0_b- inner node disablement + // 28 gltm_2_0- inner node disablement + // 29 ifd_segmap_xnr_1_4- inner node disablement + // 30 smurf_xnr_1_0- inner node disablement + // 31 xnr_5_4- inner node disablement + // 32 vcr_3_1- inner node disablement + // 33 glim_2_0- inner node disablement + // 34 ifd_segmap_acm_1_4- inner node disablement + // 35 smurf_acm_1_0- inner node disablement + // 36 acm_1_2- inner node disablement + // 37 gammatm_v4- inner node disablement + // 38 csc_1_1- inner node disablement + // 39 b2i_ds_1_1- inner node disablement + // 40 lbff_crop_espa_1_4- inner node disablement + // 41 image_upscaler_1_1- inner node disablement + // 42 gmv_statistics_1_1- inner node disablement + // 43 odr_gmv_feature_1_4- inner node disablement + // 44 odr_gmv_match_1_4- inner node disablement + // 45 ifd_segmap_cas_1_4- inner node disablement + // 46 smurf_cas_1_0- inner node disablement + // 47 cas_1_1- inner node disablement + // 48 odr_ofs_mp_1_4- inner node disablement + // 49 b2i_ds_output_1_1- inner node disablement + // 50 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFC00300; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 odr_dpc_pdaf_1_4- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 ifd_lsc_1_4- inner node disablement + // 7 lsc_1_2- inner node disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 22 ifd_gmv_1_4- inner node disablement + // 23 ifd_segmap_bnlm_1_4- inner node disablement + // 24 smurf_bnlm_1_0- inner node disablement + // 25 bnlm_3_4- inner node disablement + // 26 bxt_demosaic- inner node disablement + // 27 vcsc_2_0_b- inner node disablement + // 28 gltm_2_0- inner node disablement + // 29 ifd_segmap_xnr_1_4- inner node disablement + // 30 smurf_xnr_1_0- inner node disablement + // 31 xnr_5_4- inner node disablement + // 32 vcr_3_1- inner node disablement + // 33 glim_2_0- inner node disablement + // 34 ifd_segmap_acm_1_4- inner node disablement + // 35 smurf_acm_1_0- inner node disablement + // 36 acm_1_2- inner node disablement + // 37 gammatm_v4- inner node disablement + // 38 csc_1_1- inner node disablement + // 39 b2i_ds_1_1- inner node disablement + // 40 lbff_crop_espa_1_4- inner node disablement + // 41 image_upscaler_1_1- inner node disablement + // 42 gmv_statistics_1_1- inner node disablement + // 43 odr_gmv_feature_1_4- inner node disablement + // 44 odr_gmv_match_1_4- inner node disablement + // 45 ifd_segmap_cas_1_4- inner node disablement + // 46 smurf_cas_1_0- inner node disablement + // 47 cas_1_1- inner node disablement + // 48 odr_ofs_mp_1_4- inner node disablement + // 49 b2i_ds_output_1_1- inner node disablement + // 50 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFFFFFFF; + } else if (nodeRelevantInnerOptions == (noPdaf | noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000080041E6811 + bitmaps.rbm[0] = 0x41E6811; + bitmaps.rbm[1] = 0x80; + // DEB - 0x00000000000000000000000001BBF1F1 + bitmaps.deb[0] = 0x1BBF1F1; + // TEB - 0x0000000000081E97 + bitmaps.teb[0] = 0x81E97; + // REB - 0x0000000000000000000000000200FFE7 + bitmaps.reb[0] = 0x200FFE7; + + // Kernels disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 22 ifd_gmv_1_4- inner node disablement + // 23 ifd_segmap_bnlm_1_4- inner node disablement + // 24 smurf_bnlm_1_0- inner node disablement + // 25 bnlm_3_4- inner node disablement + // 26 bxt_demosaic- inner node disablement + // 27 vcsc_2_0_b- inner node disablement + // 28 gltm_2_0- inner node disablement + // 29 ifd_segmap_xnr_1_4- inner node disablement + // 30 smurf_xnr_1_0- inner node disablement + // 31 xnr_5_4- inner node disablement + // 32 vcr_3_1- inner node disablement + // 33 glim_2_0- inner node disablement + // 34 ifd_segmap_acm_1_4- inner node disablement + // 35 smurf_acm_1_0- inner node disablement + // 36 acm_1_2- inner node disablement + // 37 gammatm_v4- inner node disablement + // 38 csc_1_1- inner node disablement + // 39 b2i_ds_1_1- inner node disablement + // 40 lbff_crop_espa_1_4- inner node disablement + // 41 image_upscaler_1_1- inner node disablement + // 42 gmv_statistics_1_1- inner node disablement + // 43 odr_gmv_feature_1_4- inner node disablement + // 44 odr_gmv_match_1_4- inner node disablement + // 45 ifd_segmap_cas_1_4- inner node disablement + // 46 smurf_cas_1_0- inner node disablement + // 47 cas_1_1- inner node disablement + // 48 odr_ofs_mp_1_4- inner node disablement + // 49 b2i_ds_output_1_1- inner node disablement + // 50 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFFC0300; + } else if (nodeRelevantInnerOptions == (no3A | noPdaf | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 odr_dpc_pdaf_1_4- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 ifd_lsc_1_4- inner node disablement + // 7 lsc_1_2- inner node disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 22 ifd_gmv_1_4- inner node disablement + // 23 ifd_segmap_bnlm_1_4- inner node disablement + // 24 smurf_bnlm_1_0- inner node disablement + // 25 bnlm_3_4- inner node disablement + // 26 bxt_demosaic- inner node disablement + // 27 vcsc_2_0_b- inner node disablement + // 28 gltm_2_0- inner node disablement + // 29 ifd_segmap_xnr_1_4- inner node disablement + // 30 smurf_xnr_1_0- inner node disablement + // 31 xnr_5_4- inner node disablement + // 32 vcr_3_1- inner node disablement + // 33 glim_2_0- inner node disablement + // 34 ifd_segmap_acm_1_4- inner node disablement + // 35 smurf_acm_1_0- inner node disablement + // 36 acm_1_2- inner node disablement + // 37 gammatm_v4- inner node disablement + // 38 csc_1_1- inner node disablement + // 39 b2i_ds_1_1- inner node disablement + // 40 lbff_crop_espa_1_4- inner node disablement + // 41 image_upscaler_1_1- inner node disablement + // 42 gmv_statistics_1_1- inner node disablement + // 43 odr_gmv_feature_1_4- inner node disablement + // 44 odr_gmv_match_1_4- inner node disablement + // 45 ifd_segmap_cas_1_4- inner node disablement + // 46 smurf_cas_1_0- inner node disablement + // 47 cas_1_1- inner node disablement + // 48 odr_ofs_mp_1_4- inner node disablement + // 49 b2i_ds_output_1_1- inner node disablement + // 50 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x0000000000000000006401BD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x6401BD; + // DEB - 0x000000000000E1E0000FFFFEEDFBFFF1 + bitmaps.deb[0] = 0xEDFBFFF1; + bitmaps.deb[1] = 0xFFFFE; + bitmaps.deb[2] = 0xE1E0; + // TEB - 0x00000009F03A3F9F + bitmaps.teb[0] = 0xF03A3F9F; + bitmaps.teb[1] = 0x9; + // REB - 0x00000000000000000000001F16F7FFE7 + bitmaps.reb[0] = 0x16F7FFE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode::setInnerNode( + InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 63; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = + nodeInnerOptions & (no3A | noPdaf | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000067FC9D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E1FFFFF0FFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFC8009F + bitmaps.teb[0] = 0xFFC8009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFC00; + } else if (nodeRelevantInnerOptions == (noPdaf)) { + // HW bitmaps + // RBM - 0x00000000000000000067FC9D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E1FFFFF0FFFEEDBBF1F1 + bitmaps.deb[0] = 0xEDBBF1F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFC81E9F + bitmaps.teb[0] = 0xFFC81E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F6FFE7 + bitmaps.reb[0] = 0xF2F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3C0000; + } else if (nodeRelevantInnerOptions == (no3A | noPdaf)) { + // HW bitmaps + // RBM - 0x00000000000000000067FC9D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x67FC9D; + // DEB - 0x000000000000E1FFFFF0FFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFC8009F + bitmaps.teb[0] = 0xFFC8009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFC00; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FD9D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x47FD9D; + // DEB - 0x000000000000C1FFFFF0FFFEEDFBFFF1 + bitmaps.deb[0] = 0xEDFBFFF1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFC83F9F + bitmaps.teb[0] = 0xEFC83F9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 60 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x1000000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C1FFFFF0FFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFC8009F + bitmaps.teb[0] = 0xEFC8009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 60 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x10000000003FFC00; + } else if (nodeRelevantInnerOptions == (noPdaf | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C1FFFFF0FFFEEDBBF1F1 + bitmaps.deb[0] = 0xEDBBF1F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFC81E9F + bitmaps.teb[0] = 0xEFC81E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F6FFE7 + bitmaps.reb[0] = 0xF2F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 60 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x10000000003C0000; + } else if (nodeRelevantInnerOptions == (no3A | noPdaf | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FC9D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x47FC9D; + // DEB - 0x000000000000C1FFFFF0FFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFC8009F + bitmaps.teb[0] = 0xEFC8009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 60 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x10000000003FFC00; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FD9D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x27FD9D; + // DEB - 0x00000000000021FFFFF0FFFEEDFBFFF1 + bitmaps.deb[0] = 0xEDFBFFF1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFC83F9F + bitmaps.teb[0] = 0xDFC83F9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 61 b2i_ds_output_1_1- inner node disablement + // 62 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x6000000000000000; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x00000000000021FFFFF0FFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFC8009F + bitmaps.teb[0] = 0xDFC8009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 61 b2i_ds_output_1_1- inner node disablement + // 62 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x60000000003FFC00; + } else if (nodeRelevantInnerOptions == (noPdaf | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x00000000000021FFFFF0FFFEEDBBF1F1 + bitmaps.deb[0] = 0xEDBBF1F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFC81E9F + bitmaps.teb[0] = 0xDFC81E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F6FFE7 + bitmaps.reb[0] = 0xF2F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 61 b2i_ds_output_1_1- inner node disablement + // 62 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x60000000003C0000; + } else if (nodeRelevantInnerOptions == (no3A | noPdaf | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FC9D54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x27FC9D; + // DEB - 0x00000000000021FFFFF0FFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFC8009F + bitmaps.teb[0] = 0xDFC8009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 61 b2i_ds_output_1_1- inner node disablement + // 62 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x60000000003FFC00; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000180041E6811 + bitmaps.rbm[0] = 0x41E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001FBFFF1 + bitmaps.deb[0] = 0x1FBFFF1; + // TEB - 0x0000000000083F97 + bitmaps.teb[0] = 0x83F97; + // REB - 0x0000000000000000000000000601FFE7 + bitmaps.reb[0] = 0x601FFE7; + + // Kernels disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 22 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 23 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 24 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 25 ifd_segmap_bnlm_1_4- inner node disablement + // 26 smurf_bnlm_1_0- inner node disablement + // 27 bnlm_3_4- inner node disablement + // 28 bxt_demosaic- inner node disablement + // 29 vcsc_2_0_b- inner node disablement + // 30 gltm_2_0- inner node disablement + // 31 ifd_segmap_xnr_1_4- inner node disablement + // 32 smurf_xnr_1_0- inner node disablement + // 33 xnr_5_4- inner node disablement + // 34 vcr_3_1- inner node disablement + // 35 glim_2_0- inner node disablement + // 36 ifd_segmap_acm_1_4- inner node disablement + // 37 smurf_acm_1_0- inner node disablement + // 38 acm_1_2- inner node disablement + // 39 gammatm_v4- inner node disablement + // 40 csc_1_1- inner node disablement + // 41 b2i_ds_1_1- inner node disablement + // 42 lbff_crop_espa_1_4- inner node disablement + // 43 tnr7_spatial_1_1- inner node disablement + // 44 tnr_scaler_lb_1_1- inner node disablement + // 45 tnr7_ims_1_2- inner node disablement + // 46 ifd_segmap_tnr_bc_1_4- inner node disablement + // 47 smurf_tnr_bc_1_0- inner node disablement + // 48 tnr7_bc_1_2- inner node disablement + // 49 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 50 ifd_segmap_tnr_blend_1_4- inner node disablement + // 51 smurf_tnr_blend_1_0- inner node disablement + // 52 tnr7_blend_1_1- inner node disablement + // 53 odr_tnr_fp_yuvn_1_4- inner node disablement + // 54 tnr_scaler_fp_1_1- inner node disablement + // 55 image_upscaler_1_1- inner node disablement + // 56 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 57 ifd_segmap_cas_1_4- inner node disablement + // 58 smurf_cas_1_0- inner node disablement + // 59 cas_1_1- inner node disablement + // 60 odr_ofs_mp_1_4- inner node disablement + // 61 b2i_ds_output_1_1- inner node disablement + // 62 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFFFFC00300; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 odr_dpc_pdaf_1_4- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 ifd_lsc_1_4- inner node disablement + // 7 lsc_1_2- inner node disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 22 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 23 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 24 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 25 ifd_segmap_bnlm_1_4- inner node disablement + // 26 smurf_bnlm_1_0- inner node disablement + // 27 bnlm_3_4- inner node disablement + // 28 bxt_demosaic- inner node disablement + // 29 vcsc_2_0_b- inner node disablement + // 30 gltm_2_0- inner node disablement + // 31 ifd_segmap_xnr_1_4- inner node disablement + // 32 smurf_xnr_1_0- inner node disablement + // 33 xnr_5_4- inner node disablement + // 34 vcr_3_1- inner node disablement + // 35 glim_2_0- inner node disablement + // 36 ifd_segmap_acm_1_4- inner node disablement + // 37 smurf_acm_1_0- inner node disablement + // 38 acm_1_2- inner node disablement + // 39 gammatm_v4- inner node disablement + // 40 csc_1_1- inner node disablement + // 41 b2i_ds_1_1- inner node disablement + // 42 lbff_crop_espa_1_4- inner node disablement + // 43 tnr7_spatial_1_1- inner node disablement + // 44 tnr_scaler_lb_1_1- inner node disablement + // 45 tnr7_ims_1_2- inner node disablement + // 46 ifd_segmap_tnr_bc_1_4- inner node disablement + // 47 smurf_tnr_bc_1_0- inner node disablement + // 48 tnr7_bc_1_2- inner node disablement + // 49 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 50 ifd_segmap_tnr_blend_1_4- inner node disablement + // 51 smurf_tnr_blend_1_0- inner node disablement + // 52 tnr7_blend_1_1- inner node disablement + // 53 odr_tnr_fp_yuvn_1_4- inner node disablement + // 54 tnr_scaler_fp_1_1- inner node disablement + // 55 image_upscaler_1_1- inner node disablement + // 56 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 57 ifd_segmap_cas_1_4- inner node disablement + // 58 smurf_cas_1_0- inner node disablement + // 59 cas_1_1- inner node disablement + // 60 odr_ofs_mp_1_4- inner node disablement + // 61 b2i_ds_output_1_1- inner node disablement + // 62 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFFFFFFFFFF; + } else if (nodeRelevantInnerOptions == (noPdaf | noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000080041E6811 + bitmaps.rbm[0] = 0x41E6811; + bitmaps.rbm[1] = 0x80; + // DEB - 0x00000000000000000000000001BBF1F1 + bitmaps.deb[0] = 0x1BBF1F1; + // TEB - 0x0000000000081E97 + bitmaps.teb[0] = 0x81E97; + // REB - 0x0000000000000000000000000200FFE7 + bitmaps.reb[0] = 0x200FFE7; + + // Kernels disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 22 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 23 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 24 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 25 ifd_segmap_bnlm_1_4- inner node disablement + // 26 smurf_bnlm_1_0- inner node disablement + // 27 bnlm_3_4- inner node disablement + // 28 bxt_demosaic- inner node disablement + // 29 vcsc_2_0_b- inner node disablement + // 30 gltm_2_0- inner node disablement + // 31 ifd_segmap_xnr_1_4- inner node disablement + // 32 smurf_xnr_1_0- inner node disablement + // 33 xnr_5_4- inner node disablement + // 34 vcr_3_1- inner node disablement + // 35 glim_2_0- inner node disablement + // 36 ifd_segmap_acm_1_4- inner node disablement + // 37 smurf_acm_1_0- inner node disablement + // 38 acm_1_2- inner node disablement + // 39 gammatm_v4- inner node disablement + // 40 csc_1_1- inner node disablement + // 41 b2i_ds_1_1- inner node disablement + // 42 lbff_crop_espa_1_4- inner node disablement + // 43 tnr7_spatial_1_1- inner node disablement + // 44 tnr_scaler_lb_1_1- inner node disablement + // 45 tnr7_ims_1_2- inner node disablement + // 46 ifd_segmap_tnr_bc_1_4- inner node disablement + // 47 smurf_tnr_bc_1_0- inner node disablement + // 48 tnr7_bc_1_2- inner node disablement + // 49 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 50 ifd_segmap_tnr_blend_1_4- inner node disablement + // 51 smurf_tnr_blend_1_0- inner node disablement + // 52 tnr7_blend_1_1- inner node disablement + // 53 odr_tnr_fp_yuvn_1_4- inner node disablement + // 54 tnr_scaler_fp_1_1- inner node disablement + // 55 image_upscaler_1_1- inner node disablement + // 56 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 57 ifd_segmap_cas_1_4- inner node disablement + // 58 smurf_cas_1_0- inner node disablement + // 59 cas_1_1- inner node disablement + // 60 odr_ofs_mp_1_4- inner node disablement + // 61 b2i_ds_output_1_1- inner node disablement + // 62 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFFFFFC0300; + } else if (nodeRelevantInnerOptions == (no3A | noPdaf | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 odr_dpc_pdaf_1_4- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 ifd_lsc_1_4- inner node disablement + // 7 lsc_1_2- inner node disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 22 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 23 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 24 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 25 ifd_segmap_bnlm_1_4- inner node disablement + // 26 smurf_bnlm_1_0- inner node disablement + // 27 bnlm_3_4- inner node disablement + // 28 bxt_demosaic- inner node disablement + // 29 vcsc_2_0_b- inner node disablement + // 30 gltm_2_0- inner node disablement + // 31 ifd_segmap_xnr_1_4- inner node disablement + // 32 smurf_xnr_1_0- inner node disablement + // 33 xnr_5_4- inner node disablement + // 34 vcr_3_1- inner node disablement + // 35 glim_2_0- inner node disablement + // 36 ifd_segmap_acm_1_4- inner node disablement + // 37 smurf_acm_1_0- inner node disablement + // 38 acm_1_2- inner node disablement + // 39 gammatm_v4- inner node disablement + // 40 csc_1_1- inner node disablement + // 41 b2i_ds_1_1- inner node disablement + // 42 lbff_crop_espa_1_4- inner node disablement + // 43 tnr7_spatial_1_1- inner node disablement + // 44 tnr_scaler_lb_1_1- inner node disablement + // 45 tnr7_ims_1_2- inner node disablement + // 46 ifd_segmap_tnr_bc_1_4- inner node disablement + // 47 smurf_tnr_bc_1_0- inner node disablement + // 48 tnr7_bc_1_2- inner node disablement + // 49 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 50 ifd_segmap_tnr_blend_1_4- inner node disablement + // 51 smurf_tnr_blend_1_0- inner node disablement + // 52 tnr7_blend_1_1- inner node disablement + // 53 odr_tnr_fp_yuvn_1_4- inner node disablement + // 54 tnr_scaler_fp_1_1- inner node disablement + // 55 image_upscaler_1_1- inner node disablement + // 56 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 57 ifd_segmap_cas_1_4- inner node disablement + // 58 smurf_cas_1_0- inner node disablement + // 59 cas_1_1- inner node disablement + // 60 odr_ofs_mp_1_4- inner node disablement + // 61 b2i_ds_output_1_1- inner node disablement + // 62 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x7FFFFFFFFFFFFFFF; + } else // default inner node + { + // RBM - 0x00000000000000000067FD9D541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x67FD9D; + // DEB - 0x000000000000E1FFFFF0FFFEEDFBFFF1 + bitmaps.deb[0] = 0xEDFBFFF1; + bitmaps.deb[1] = 0xFFF0FFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFC83F9F + bitmaps.teb[0] = 0xFFC83F9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +void LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode::setInnerNode( + InnerNodeOptionsFlags nodeInnerOptions) { + // Kernel default enablement + for (uint8_t i = 0; i < 67; ++i) { + nodeKernels.kernelList[i].run_kernel.enable = 1; + } + + // Pass-through kernels + nodeKernels.kernelList[5].run_kernel.enable = 0; // rgb_ir_2_0 + + const InnerNodeOptionsFlags nodeRelevantInnerOptions = + nodeInnerOptions & (no3A | noPdaf | noMp | noDp); + bitmaps = HwBitmaps(); // reset HW bitmaps + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + if (nodeRelevantInnerOptions == (no3A)) { + // HW bitmaps + // RBM - 0x00000000000000000067FCBD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E1FFFFFFFFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFFA009F + bitmaps.teb[0] = 0xFFFA009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFC00; + } else if (nodeRelevantInnerOptions == (noPdaf)) { + // HW bitmaps + // RBM - 0x00000000000000000067FCBD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E1FFFFFFFFFEEDBBF1F1 + bitmaps.deb[0] = 0xEDBBF1F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFFA1E9F + bitmaps.teb[0] = 0xFFFA1E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F6FFE7 + bitmaps.reb[0] = 0xF2F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3C0000; + } else if (nodeRelevantInnerOptions == (no3A | noPdaf)) { + // HW bitmaps + // RBM - 0x00000000000000000067FCBD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x67FCBD; + // DEB - 0x000000000000E1FFFFFFFFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFFA009F + bitmaps.teb[0] = 0xFFFA009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFC00; + } else if (nodeRelevantInnerOptions == (noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FDBD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x47FDBD; + // DEB - 0x000000000000C1FFFFFFFFFEEDFBFFF1 + bitmaps.deb[0] = 0xEDFBFFF1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFFA3F9F + bitmaps.teb[0] = 0xEFFA3F9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 64 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[1] = 0x1; + } else if (nodeRelevantInnerOptions == (no3A | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C1FFFFFFFFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFFA009F + bitmaps.teb[0] = 0xEFFA009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 64 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFC00; + disabledRunKernelsBitmap[1] = 0x1; + } else if (nodeRelevantInnerOptions == (noPdaf | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C1FFFFFFFFFEEDBBF1F1 + bitmaps.deb[0] = 0xEDBBF1F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFFA1E9F + bitmaps.teb[0] = 0xEFFA1E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F6FFE7 + bitmaps.reb[0] = 0xF2F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 64 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3C0000; + disabledRunKernelsBitmap[1] = 0x1; + } else if (nodeRelevantInnerOptions == (no3A | noPdaf | noMp)) { + // HW bitmaps + // RBM - 0x00000000000000000047FCBD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x47FCBD; + // DEB - 0x000000000000C1FFFFFFFFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xC1FF; + // TEB - 0x0000000FEFFA009F + bitmaps.teb[0] = 0xEFFA009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 64 odr_ofs_mp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFC00; + disabledRunKernelsBitmap[1] = 0x1; + } else if (nodeRelevantInnerOptions == (noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FDBD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x27FDBD; + // DEB - 0x00000000000021FFFFFFFFFEEDFBFFF1 + bitmaps.deb[0] = 0xEDFBFFF1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFFA3F9F + bitmaps.teb[0] = 0xDFFA3F9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 65 b2i_ds_output_1_1- inner node disablement + // 66 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[1] = 0x6; + } else if (nodeRelevantInnerOptions == (no3A | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x00000000000021FFFFFFFFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFFA009F + bitmaps.teb[0] = 0xDFFA009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 65 b2i_ds_output_1_1- inner node disablement + // 66 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFC00; + disabledRunKernelsBitmap[1] = 0x6; + } else if (nodeRelevantInnerOptions == (noPdaf | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x00000000000021FFFFFFFFFEEDBBF1F1 + bitmaps.deb[0] = 0xEDBBF1F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFFA1E9F + bitmaps.teb[0] = 0xDFFA1E9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F6FFE7 + bitmaps.reb[0] = 0xF2F6FFE7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 65 b2i_ds_output_1_1- inner node disablement + // 66 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3C0000; + disabledRunKernelsBitmap[1] = 0x6; + } else if (nodeRelevantInnerOptions == (no3A | noPdaf | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000027FCBD54016811 + bitmaps.rbm[0] = 0x54016811; + bitmaps.rbm[1] = 0x27FCBD; + // DEB - 0x00000000000021FFFFFFFFFEEDA001F1 + bitmaps.deb[0] = 0xEDA001F1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0x21FF; + // TEB - 0x0000000FDFFA009F + bitmaps.teb[0] = 0xDFFA009F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF2F687E7 + bitmaps.reb[0] = 0xF2F687E7; + bitmaps.reb[1] = 0x1F; + + // Kernels disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 65 b2i_ds_output_1_1- inner node disablement + // 66 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0x3FFC00; + disabledRunKernelsBitmap[1] = 0x6; + } else if (nodeRelevantInnerOptions == (noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000180041E6811 + bitmaps.rbm[0] = 0x41E6811; + bitmaps.rbm[1] = 0x180; + // DEB - 0x00000000000000000000000001FBFFF1 + bitmaps.deb[0] = 0x1FBFFF1; + // TEB - 0x0000000000083F97 + bitmaps.teb[0] = 0x83F97; + // REB - 0x0000000000000000000000000601FFE7 + bitmaps.reb[0] = 0x601FFE7; + + // Kernels disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 22 ifd_gmv_1_4- inner node disablement + // 23 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 24 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 25 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 26 ifd_segmap_bnlm_1_4- inner node disablement + // 27 smurf_bnlm_1_0- inner node disablement + // 28 bnlm_3_4- inner node disablement + // 29 bxt_demosaic- inner node disablement + // 30 vcsc_2_0_b- inner node disablement + // 31 gltm_2_0- inner node disablement + // 32 ifd_segmap_xnr_1_4- inner node disablement + // 33 smurf_xnr_1_0- inner node disablement + // 34 xnr_5_4- inner node disablement + // 35 vcr_3_1- inner node disablement + // 36 glim_2_0- inner node disablement + // 37 ifd_segmap_acm_1_4- inner node disablement + // 38 smurf_acm_1_0- inner node disablement + // 39 acm_1_2- inner node disablement + // 40 gammatm_v4- inner node disablement + // 41 csc_1_1- inner node disablement + // 42 b2i_ds_1_1- inner node disablement + // 43 lbff_crop_espa_1_4- inner node disablement + // 44 tnr7_spatial_1_1- inner node disablement + // 45 tnr_scaler_lb_1_1- inner node disablement + // 46 tnr7_ims_1_2- inner node disablement + // 47 gmv_statistics_1_1- inner node disablement + // 48 odr_gmv_feature_1_4- inner node disablement + // 49 odr_gmv_match_1_4- inner node disablement + // 50 ifd_segmap_tnr_bc_1_4- inner node disablement + // 51 smurf_tnr_bc_1_0- inner node disablement + // 52 tnr7_bc_1_2- inner node disablement + // 53 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 54 ifd_segmap_tnr_blend_1_4- inner node disablement + // 55 smurf_tnr_blend_1_0- inner node disablement + // 56 tnr7_blend_1_1- inner node disablement + // 57 odr_tnr_fp_yuvn_1_4- inner node disablement + // 58 tnr_scaler_fp_1_1- inner node disablement + // 59 image_upscaler_1_1- inner node disablement + // 60 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 61 ifd_segmap_cas_1_4- inner node disablement + // 62 smurf_cas_1_0- inner node disablement + // 63 cas_1_1- inner node disablement + // 64 odr_ofs_mp_1_4- inner node disablement + // 65 b2i_ds_output_1_1- inner node disablement + // 66 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFC00300; + disabledRunKernelsBitmap[1] = 0x7; + } else if (nodeRelevantInnerOptions == (no3A | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 odr_dpc_pdaf_1_4- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 ifd_lsc_1_4- inner node disablement + // 7 lsc_1_2- inner node disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 22 ifd_gmv_1_4- inner node disablement + // 23 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 24 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 25 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 26 ifd_segmap_bnlm_1_4- inner node disablement + // 27 smurf_bnlm_1_0- inner node disablement + // 28 bnlm_3_4- inner node disablement + // 29 bxt_demosaic- inner node disablement + // 30 vcsc_2_0_b- inner node disablement + // 31 gltm_2_0- inner node disablement + // 32 ifd_segmap_xnr_1_4- inner node disablement + // 33 smurf_xnr_1_0- inner node disablement + // 34 xnr_5_4- inner node disablement + // 35 vcr_3_1- inner node disablement + // 36 glim_2_0- inner node disablement + // 37 ifd_segmap_acm_1_4- inner node disablement + // 38 smurf_acm_1_0- inner node disablement + // 39 acm_1_2- inner node disablement + // 40 gammatm_v4- inner node disablement + // 41 csc_1_1- inner node disablement + // 42 b2i_ds_1_1- inner node disablement + // 43 lbff_crop_espa_1_4- inner node disablement + // 44 tnr7_spatial_1_1- inner node disablement + // 45 tnr_scaler_lb_1_1- inner node disablement + // 46 tnr7_ims_1_2- inner node disablement + // 47 gmv_statistics_1_1- inner node disablement + // 48 odr_gmv_feature_1_4- inner node disablement + // 49 odr_gmv_match_1_4- inner node disablement + // 50 ifd_segmap_tnr_bc_1_4- inner node disablement + // 51 smurf_tnr_bc_1_0- inner node disablement + // 52 tnr7_bc_1_2- inner node disablement + // 53 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 54 ifd_segmap_tnr_blend_1_4- inner node disablement + // 55 smurf_tnr_blend_1_0- inner node disablement + // 56 tnr7_blend_1_1- inner node disablement + // 57 odr_tnr_fp_yuvn_1_4- inner node disablement + // 58 tnr_scaler_fp_1_1- inner node disablement + // 59 image_upscaler_1_1- inner node disablement + // 60 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 61 ifd_segmap_cas_1_4- inner node disablement + // 62 smurf_cas_1_0- inner node disablement + // 63 cas_1_1- inner node disablement + // 64 odr_ofs_mp_1_4- inner node disablement + // 65 b2i_ds_output_1_1- inner node disablement + // 66 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFFFFFFF; + disabledRunKernelsBitmap[1] = 0x7; + } else if (nodeRelevantInnerOptions == (noPdaf | noMp | noDp)) { + // HW bitmaps + // RBM - 0x000000000000000000000080041E6811 + bitmaps.rbm[0] = 0x41E6811; + bitmaps.rbm[1] = 0x80; + // DEB - 0x00000000000000000000000001BBF1F1 + bitmaps.deb[0] = 0x1BBF1F1; + // TEB - 0x0000000000081E97 + bitmaps.teb[0] = 0x81E97; + // REB - 0x0000000000000000000000000200FFE7 + bitmaps.reb[0] = 0x200FFE7; + + // Kernels disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 22 ifd_gmv_1_4- inner node disablement + // 23 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 24 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 25 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 26 ifd_segmap_bnlm_1_4- inner node disablement + // 27 smurf_bnlm_1_0- inner node disablement + // 28 bnlm_3_4- inner node disablement + // 29 bxt_demosaic- inner node disablement + // 30 vcsc_2_0_b- inner node disablement + // 31 gltm_2_0- inner node disablement + // 32 ifd_segmap_xnr_1_4- inner node disablement + // 33 smurf_xnr_1_0- inner node disablement + // 34 xnr_5_4- inner node disablement + // 35 vcr_3_1- inner node disablement + // 36 glim_2_0- inner node disablement + // 37 ifd_segmap_acm_1_4- inner node disablement + // 38 smurf_acm_1_0- inner node disablement + // 39 acm_1_2- inner node disablement + // 40 gammatm_v4- inner node disablement + // 41 csc_1_1- inner node disablement + // 42 b2i_ds_1_1- inner node disablement + // 43 lbff_crop_espa_1_4- inner node disablement + // 44 tnr7_spatial_1_1- inner node disablement + // 45 tnr_scaler_lb_1_1- inner node disablement + // 46 tnr7_ims_1_2- inner node disablement + // 47 gmv_statistics_1_1- inner node disablement + // 48 odr_gmv_feature_1_4- inner node disablement + // 49 odr_gmv_match_1_4- inner node disablement + // 50 ifd_segmap_tnr_bc_1_4- inner node disablement + // 51 smurf_tnr_bc_1_0- inner node disablement + // 52 tnr7_bc_1_2- inner node disablement + // 53 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 54 ifd_segmap_tnr_blend_1_4- inner node disablement + // 55 smurf_tnr_blend_1_0- inner node disablement + // 56 tnr7_blend_1_1- inner node disablement + // 57 odr_tnr_fp_yuvn_1_4- inner node disablement + // 58 tnr_scaler_fp_1_1- inner node disablement + // 59 image_upscaler_1_1- inner node disablement + // 60 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 61 ifd_segmap_cas_1_4- inner node disablement + // 62 smurf_cas_1_0- inner node disablement + // 63 cas_1_1- inner node disablement + // 64 odr_ofs_mp_1_4- inner node disablement + // 65 b2i_ds_output_1_1- inner node disablement + // 66 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFFC0300; + disabledRunKernelsBitmap[1] = 0x7; + } else if (nodeRelevantInnerOptions == (no3A | noPdaf | noMp | noDp)) { + // HW bitmaps + // RBM - 0x00000000000000000000000000000000 + // DEB - 0x00000000000000000000000000000000 + // TEB - 0x0000000000000000 + // REB - 0x00000000000000000000000000000000 + + // Kernels disablement + // 0 ifd_pipe_1_4- inner node disablement + // 1 bxt_blc- inner node disablement + // 2 linearization2_0- inner node disablement + // 3 dpc_2_2- inner node disablement + // 4 odr_dpc_pdaf_1_4- inner node disablement + // 5 rgb_ir_2_0- inner node disablement + // 6 ifd_lsc_1_4- inner node disablement + // 7 lsc_1_2- inner node disablement + // 8 gd_2_2- inner node disablement + // 9 wb_1_1- inner node disablement + // 10 rgbs_grid_1_1- inner node disablement + // 11 ccm_3a_2_0- inner node disablement + // 12 fr_grid_1_0- inner node disablement + // 13 odr_awb_std_1_4- inner node disablement + // 14 odr_awb_sat_1_4- inner node disablement + // 15 aestatistics_2_1- inner node disablement + // 16 odr_ae_1_4- inner node disablement + // 17 odr_af_std_1_4- inner node disablement + // 18 ifd_pdaf_1_4- inner node disablement + // 19 pext_1_0- inner node disablement + // 20 pafstatistics_1_2- inner node disablement + // 21 odr_pdaf_1_4- inner node disablement + // 22 ifd_gmv_1_4- inner node disablement + // 23 ifd_tnr_sp_bc_yuv4nm1_1_4- inner node disablement + // 24 ifd_tnr_sp_bc_rs4nm1_1_4- inner node disablement + // 25 ifd_tnr_fp_blend_yuvnm1_1_4- inner node disablement + // 26 ifd_segmap_bnlm_1_4- inner node disablement + // 27 smurf_bnlm_1_0- inner node disablement + // 28 bnlm_3_4- inner node disablement + // 29 bxt_demosaic- inner node disablement + // 30 vcsc_2_0_b- inner node disablement + // 31 gltm_2_0- inner node disablement + // 32 ifd_segmap_xnr_1_4- inner node disablement + // 33 smurf_xnr_1_0- inner node disablement + // 34 xnr_5_4- inner node disablement + // 35 vcr_3_1- inner node disablement + // 36 glim_2_0- inner node disablement + // 37 ifd_segmap_acm_1_4- inner node disablement + // 38 smurf_acm_1_0- inner node disablement + // 39 acm_1_2- inner node disablement + // 40 gammatm_v4- inner node disablement + // 41 csc_1_1- inner node disablement + // 42 b2i_ds_1_1- inner node disablement + // 43 lbff_crop_espa_1_4- inner node disablement + // 44 tnr7_spatial_1_1- inner node disablement + // 45 tnr_scaler_lb_1_1- inner node disablement + // 46 tnr7_ims_1_2- inner node disablement + // 47 gmv_statistics_1_1- inner node disablement + // 48 odr_gmv_feature_1_4- inner node disablement + // 49 odr_gmv_match_1_4- inner node disablement + // 50 ifd_segmap_tnr_bc_1_4- inner node disablement + // 51 smurf_tnr_bc_1_0- inner node disablement + // 52 tnr7_bc_1_2- inner node disablement + // 53 odr_tnr_sp_bc_rs4n_1_4- inner node disablement + // 54 ifd_segmap_tnr_blend_1_4- inner node disablement + // 55 smurf_tnr_blend_1_0- inner node disablement + // 56 tnr7_blend_1_1- inner node disablement + // 57 odr_tnr_fp_yuvn_1_4- inner node disablement + // 58 tnr_scaler_fp_1_1- inner node disablement + // 59 image_upscaler_1_1- inner node disablement + // 60 odr_tnr_scale_fp_yuv4n_1_4- inner node disablement + // 61 ifd_segmap_cas_1_4- inner node disablement + // 62 smurf_cas_1_0- inner node disablement + // 63 cas_1_1- inner node disablement + // 64 odr_ofs_mp_1_4- inner node disablement + // 65 b2i_ds_output_1_1- inner node disablement + // 66 odr_ofs_dp_1_4- inner node disablement + disabledRunKernelsBitmap[0] = 0xFFFFFFFFFFFFFFFF; + disabledRunKernelsBitmap[1] = 0x7; + } else // default inner node + { + // RBM - 0x00000000000000000067FDBD541F6811 + bitmaps.rbm[0] = 0x541F6811; + bitmaps.rbm[1] = 0x67FDBD; + // DEB - 0x000000000000E1FFFFFFFFFEEDFBFFF1 + bitmaps.deb[0] = 0xEDFBFFF1; + bitmaps.deb[1] = 0xFFFFFFFE; + bitmaps.deb[2] = 0xE1FF; + // TEB - 0x0000000FFFFA3F9F + bitmaps.teb[0] = 0xFFFA3F9F; + bitmaps.teb[1] = 0xF; + // REB - 0x00000000000000000000001FF6F7FFE7 + bitmaps.reb[0] = 0xF6F7FFE7; + bitmaps.reb[1] = 0x1F; + } + + SetDisabledKernels(disabledRunKernelsBitmap); +} + +/* + * Graph 100000 + */ +StaticGraph100000::StaticGraph100000(GraphConfiguration100000* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100000, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffBayerNoGmvNoTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffBayerNoGmvNoTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->destNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->destNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 9; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffBayerNoGmvNoTnrNoSapOuterNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffBayerNoGmvNoTnrNoSapOuterNode->contextId = 1; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100000::~StaticGraph100000() {} + +StaticGraphStatus imageSubGraphTopology100000::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerNoGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerNoGmvNoTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[7]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerNoGmvNoTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[8]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerNoGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffBayerNoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = + !(lbffBayerNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Bayer_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[4]->isActive = + !(lbffBayerNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Bayer_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[5]->isActive = + !(lbffBayerNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Bayer_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[6]->isActive = + !(lbffBayerNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Bayer_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[7]->isActive = + !(lbffBayerNoGmvNoTnrNoSapInnerOptions & + noMp); // lbff_Bayer_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[8]->isActive = + !(lbffBayerNoGmvNoTnrNoSapInnerOptions & + noDp); // lbff_Bayer_NoGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 9; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100001 + */ +StaticGraph100001::StaticGraph100001(GraphConfiguration100001* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100001, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffBayerWithGmvNoTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffBayerWithGmvNoTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->destNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->destNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->destNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 14; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffBayerWithGmvNoTnrNoSapOuterNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffBayerWithGmvNoTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100001::~StaticGraph100001() {} + +StaticGraphStatus imageSubGraphTopology100001::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerWithGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerWithGmvNoTnrNoSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerWithGmvNoTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[9]->linkConfiguration->bufferSize == 0 && + subGraphLinks[11]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerWithGmvNoTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[10]->linkConfiguration->bufferSize == 0 && + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerWithGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerWithGmvNoTnrNoSapOuterNode->setInnerNode(lbffBayerWithGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = + !(lbffBayerWithGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[4]->isActive = + !(lbffBayerWithGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[5]->isActive = + !(lbffBayerWithGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[6]->isActive = + !(lbffBayerWithGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[9]->isActive = + !(lbffBayerWithGmvNoTnrNoSapInnerOptions & + noMp); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[11]->isActive = + !(lbffBayerWithGmvNoTnrNoSapInnerOptions & noMp); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[10]->isActive = + !(lbffBayerWithGmvNoTnrNoSapInnerOptions & + noDp); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[12]->isActive = + !(lbffBayerWithGmvNoTnrNoSapInnerOptions & noDp); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output + // -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 14; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[7]->isActive = + (lbffBayerWithGmvNoTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_gmv_feature_output + // -> lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_gmv_input + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100002 + */ +StaticGraph100002::StaticGraph100002(GraphConfiguration100002* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100002, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffBayerNoGmvWithTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffBayerNoGmvWithTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 12; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffBayerNoGmvWithTnrNoSapOuterNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffBayerNoGmvWithTnrNoSapOuterNode->contextId = 1; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100002::~StaticGraph100002() {} + +StaticGraphStatus imageSubGraphTopology100002::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerNoGmvWithTnrNoSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[10]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerNoGmvWithTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[11]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerNoGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffBayerNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = + !(lbffBayerNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[4]->isActive = + !(lbffBayerNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[5]->isActive = + !(lbffBayerNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[6]->isActive = + !(lbffBayerNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[10]->isActive = + !(lbffBayerNoGmvWithTnrNoSapInnerOptions & + noMp); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[11]->isActive = + !(lbffBayerNoGmvWithTnrNoSapInnerOptions & + noDp); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 12; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[7]->isActive = + (lbffBayerNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> + // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[8]->isActive = + (lbffBayerNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> + // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[9]->isActive = + (lbffBayerNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output + // -> lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100003 + */ +StaticGraph100003::StaticGraph100003(GraphConfiguration100003* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100003, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffBayerWithGmvWithTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffBayerWithGmvWithTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[16]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 17; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffBayerWithGmvWithTnrNoSapOuterNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffBayerWithGmvWithTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100003::~StaticGraph100003() {} + +StaticGraphStatus imageSubGraphTopology100003::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerWithGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerWithGmvWithTnrNoSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerWithGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerWithGmvWithTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerWithGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerWithGmvWithTnrNoSapOuterNode->setInnerNode(lbffBayerWithGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = + !(lbffBayerWithGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[4]->isActive = + !(lbffBayerWithGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[5]->isActive = + !(lbffBayerWithGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[6]->isActive = + !(lbffBayerWithGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[12]->isActive = + !(lbffBayerWithGmvWithTnrNoSapInnerOptions & + noMp); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[14]->isActive = + !(lbffBayerWithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[13]->isActive = + !(lbffBayerWithGmvWithTnrNoSapInnerOptions & + noDp); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[15]->isActive = + !(lbffBayerWithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output + // -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 17; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[7]->isActive = + (lbffBayerWithGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_gmv_feature_output + // -> lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_gmv_input + subGraphLinks[9]->isActive = + (lbffBayerWithGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_blend_output -> + // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[10]->isActive = + (lbffBayerWithGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_bc_output -> + // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[11]->isActive = + (lbffBayerWithGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output + // -> lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100079 + */ +StaticGraph100079::StaticGraph100079(GraphConfiguration100079* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100079, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffBayerNoGmvWithTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffBayerNoGmvWithTnrNoSapOuterNodeConfiguration); + _swNntmOuterNode.Init(&_graphConfiguration.swNntmOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[16]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 17; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffBayerNoGmvWithTnrNoSapOuterNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + _imageSubGraph.swNntmOuterNode = &_swNntmOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffBayerNoGmvWithTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swNntmOuterNode->contextId = 2; + _imageSubGraph.swScalerOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100079::~StaticGraph100079() {} + +StaticGraphStatus imageSubGraphTopology100079::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerNoGmvWithTnrNoSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[10]->linkConfiguration->bufferSize == 0 && + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerNoGmvWithTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[11]->linkConfiguration->bufferSize == 0 && + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerNoGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffBayerNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = + !(lbffBayerNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[4]->isActive = + !(lbffBayerNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[5]->isActive = + !(lbffBayerNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[6]->isActive = + !(lbffBayerNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[10]->isActive = + !(lbffBayerNoGmvWithTnrNoSapInnerOptions & + noMp); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[12]->isActive = + !(lbffBayerNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output + // -> sw_nntm:terminal_connect_input + subGraphLinks[11]->isActive = + !(lbffBayerNoGmvWithTnrNoSapInnerOptions & + noDp); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[13]->isActive = + !(lbffBayerNoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output + // -> sw_nntm:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 17; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[7]->isActive = + (lbffBayerNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> + // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[8]->isActive = + (lbffBayerNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> + // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[9]->isActive = + (lbffBayerNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output + // -> lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100080 + */ +StaticGraph100080::StaticGraph100080(GraphConfiguration100080* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100080, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffBayerNoGmvWithTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffBayerNoGmvWithTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[16]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 17; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffBayerNoGmvWithTnrNoSapOuterNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffBayerNoGmvWithTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + _imageSubGraph.swScalerOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100080::~StaticGraph100080() {} + +StaticGraphStatus imageSubGraphTopology100080::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerNoGmvWithTnrNoSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[10]->linkConfiguration->bufferSize == 0 && + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerNoGmvWithTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[11]->linkConfiguration->bufferSize == 0 && + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerNoGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffBayerNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = + !(lbffBayerNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[4]->isActive = + !(lbffBayerNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[5]->isActive = + !(lbffBayerNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[6]->isActive = + !(lbffBayerNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[10]->isActive = + !(lbffBayerNoGmvWithTnrNoSapInnerOptions & + noMp); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[12]->isActive = + !(lbffBayerNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[11]->isActive = + !(lbffBayerNoGmvWithTnrNoSapInnerOptions & + noDp); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[13]->isActive = + !(lbffBayerNoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output + // -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 17; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[7]->isActive = + (lbffBayerNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> + // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[8]->isActive = + (lbffBayerNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> + // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[9]->isActive = + (lbffBayerNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output + // -> lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100081 + */ +StaticGraph100081::StaticGraph100081(GraphConfiguration100081* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100081, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffBayerWithGmvWithTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffBayerWithGmvWithTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[16]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[18]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 19; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffBayerWithGmvWithTnrNoSapOuterNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffBayerWithGmvWithTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + _imageSubGraph.swScalerOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100081::~StaticGraph100081() {} + +StaticGraphStatus imageSubGraphTopology100081::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerWithGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerWithGmvWithTnrNoSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerWithGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerWithGmvWithTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerWithGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerWithGmvWithTnrNoSapOuterNode->setInnerNode(lbffBayerWithGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = + !(lbffBayerWithGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[4]->isActive = + !(lbffBayerWithGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[5]->isActive = + !(lbffBayerWithGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[6]->isActive = + !(lbffBayerWithGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[12]->isActive = + !(lbffBayerWithGmvWithTnrNoSapInnerOptions & + noMp); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[14]->isActive = + !(lbffBayerWithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[13]->isActive = + !(lbffBayerWithGmvWithTnrNoSapInnerOptions & + noDp); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[15]->isActive = + !(lbffBayerWithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output + // -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 19; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[7]->isActive = + (lbffBayerWithGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_gmv_feature_output + // -> lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_gmv_input + subGraphLinks[9]->isActive = + (lbffBayerWithGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_blend_output -> + // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[10]->isActive = + (lbffBayerWithGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_bc_output -> + // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[11]->isActive = + (lbffBayerWithGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output + // -> lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100004 + */ +StaticGraph100004::StaticGraph100004(GraphConfiguration100004* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100004, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysPdaf2OuterNode.Init(&_graphConfiguration.isysPdaf2OuterNodeConfiguration); + _lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffBayerPdaf2NoGmvNoTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2; + link->destNode = &_isysPdaf2OuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::PdafBuffer; + link->dest = GraphElementType::IsysPdaf2; + link->destNode = &_isysPdaf2OuterNode; + link->destTerminalId = 6; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysPdaf2; + link->srcNode = &_isysPdaf2OuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysPdaf2; + link->srcNode = &_isysPdaf2OuterNode; + link->srcTerminalId = 7; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 12; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysPdaf2OuterNode = &_isysPdaf2OuterNode; + _imageSubGraph.lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode = + &_lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysPdaf2OuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode->contextId = 1; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100004::~StaticGraph100004() {} + +StaticGraphStatus imageSubGraphTopology100004::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf2NoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf2NoGmvNoTnrNoSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf2NoGmvNoTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if (subGraphLinks[10]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf2NoGmvNoTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[11]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf2NoGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode->setInnerNode(lbffBayerPdaf2NoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[6]->isActive = + !(lbffBayerPdaf2NoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Bayer_Pdaf2_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[7]->isActive = + !(lbffBayerPdaf2NoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Bayer_Pdaf2_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[8]->isActive = !( + lbffBayerPdaf2NoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Bayer_Pdaf2_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[9]->isActive = !( + lbffBayerPdaf2NoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Bayer_Pdaf2_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[10]->isActive = + !(lbffBayerPdaf2NoGmvNoTnrNoSapInnerOptions & + noMp); // lbff_Bayer_Pdaf2_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[11]->isActive = + !(lbffBayerPdaf2NoGmvNoTnrNoSapInnerOptions & + noDp); // lbff_Bayer_Pdaf2_NoGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 12; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100005 + */ +StaticGraph100005::StaticGraph100005(GraphConfiguration100005* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100005, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysPdaf2OuterNode.Init(&_graphConfiguration.isysPdaf2OuterNodeConfiguration); + _lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffBayerPdaf2WithGmvNoTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2; + link->destNode = &_isysPdaf2OuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::PdafBuffer; + link->dest = GraphElementType::IsysPdaf2; + link->destNode = &_isysPdaf2OuterNode; + link->destTerminalId = 6; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysPdaf2; + link->srcNode = &_isysPdaf2OuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysPdaf2; + link->srcNode = &_isysPdaf2OuterNode; + link->srcTerminalId = 7; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[16]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 17; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysPdaf2OuterNode = &_isysPdaf2OuterNode; + _imageSubGraph.lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode = + &_lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysPdaf2OuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100005::~StaticGraph100005() {} + +StaticGraphStatus imageSubGraphTopology100005::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf2WithGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf2WithGmvNoTnrNoSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf2WithGmvNoTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if (subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf2WithGmvNoTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf2WithGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode->setInnerNode( + lbffBayerPdaf2WithGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[6]->isActive = + !(lbffBayerPdaf2WithGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[7]->isActive = !( + lbffBayerPdaf2WithGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[8]->isActive = + !(lbffBayerPdaf2WithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_NoSap:terminal_connect_awb_std_output + // -> awb_std_out + subGraphLinks[9]->isActive = + !(lbffBayerPdaf2WithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_NoSap:terminal_connect_awb_sat_output + // -> awb_sat_out + subGraphLinks[12]->isActive = + !(lbffBayerPdaf2WithGmvNoTnrNoSapInnerOptions & + noMp); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[14]->isActive = + !(lbffBayerPdaf2WithGmvNoTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[13]->isActive = + !(lbffBayerPdaf2WithGmvNoTnrNoSapInnerOptions & + noDp); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[15]->isActive = + !(lbffBayerPdaf2WithGmvNoTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output + // -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 17; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[10]->isActive = + (lbffBayerPdaf2WithGmvNoTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_NoSap:terminal_connect_gmv_feature_output + // -> lbff_Bayer_Pdaf2_WithGmv_NoTnr_NoSap:terminal_connect_gmv_input + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100006 + */ +StaticGraph100006::StaticGraph100006(GraphConfiguration100006* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100006, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysPdaf2OuterNode.Init(&_graphConfiguration.isysPdaf2OuterNodeConfiguration); + _lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffBayerPdaf2NoGmvWithTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2; + link->destNode = &_isysPdaf2OuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::PdafBuffer; + link->dest = GraphElementType::IsysPdaf2; + link->destNode = &_isysPdaf2OuterNode; + link->destTerminalId = 6; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysPdaf2; + link->srcNode = &_isysPdaf2OuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysPdaf2; + link->srcNode = &_isysPdaf2OuterNode; + link->srcTerminalId = 7; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 15; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysPdaf2OuterNode = &_isysPdaf2OuterNode; + _imageSubGraph.lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode = + &_lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysPdaf2OuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode->contextId = 1; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100006::~StaticGraph100006() {} + +StaticGraphStatus imageSubGraphTopology100006::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf2NoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if (subGraphLinks[13]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[14]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode->setInnerNode( + lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[6]->isActive = + !(lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[7]->isActive = !( + lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[8]->isActive = + !(lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output + // -> awb_std_out + subGraphLinks[9]->isActive = + !(lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output + // -> awb_sat_out + subGraphLinks[13]->isActive = + !(lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & + noMp); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[14]->isActive = + !(lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & + noDp); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 15; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[10]->isActive = + (lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> + // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[11]->isActive = + (lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> + // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[12]->isActive = + (lbffBayerPdaf2NoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> + // lbff_Bayer_Pdaf2_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100007 + */ +StaticGraph100007::StaticGraph100007(GraphConfiguration100007* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100007, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysPdaf2OuterNode.Init(&_graphConfiguration.isysPdaf2OuterNodeConfiguration); + _lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffBayerPdaf2WithGmvWithTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2; + link->destNode = &_isysPdaf2OuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::PdafBuffer; + link->dest = GraphElementType::IsysPdaf2; + link->destNode = &_isysPdaf2OuterNode; + link->destTerminalId = 6; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysPdaf2; + link->srcNode = &_isysPdaf2OuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysPdaf2; + link->srcNode = &_isysPdaf2OuterNode; + link->srcTerminalId = 7; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[19]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 20; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysPdaf2OuterNode = &_isysPdaf2OuterNode; + _imageSubGraph.lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode = + &_lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysPdaf2OuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100007::~StaticGraph100007() {} + +StaticGraphStatus imageSubGraphTopology100007::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf2WithGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if (subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + subGraphLinks[18]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode->setInnerNode( + lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[6]->isActive = + !(lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[7]->isActive = + !(lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_af_std_output + // -> af_std_out + subGraphLinks[8]->isActive = + !(lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_awb_std_output + // -> awb_std_out + subGraphLinks[9]->isActive = + !(lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_awb_sat_output + // -> awb_sat_out + subGraphLinks[15]->isActive = !( + lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & + noMp); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[17]->isActive = !(lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & + noMp); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[16]->isActive = !( + lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & + noDp); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[18]->isActive = !(lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & + noDp); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output + // -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 20; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[10]->isActive = + (lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_gmv_feature_output -> + // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_gmv_input + subGraphLinks[12]->isActive = + (lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_blend_output -> + // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[13]->isActive = + (lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_bc_output -> + // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[14]->isActive = + (lbffBayerPdaf2WithGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> + // lbff_Bayer_Pdaf2_WithGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100008 + */ +StaticGraph100008::StaticGraph100008(GraphConfiguration100008* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100008, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffBayerPdaf3NoGmvNoTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 10; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode = + &_lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode->contextId = 1; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100008::~StaticGraph100008() {} + +StaticGraphStatus imageSubGraphTopology100008::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3NoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3NoGmvNoTnrNoSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3NoGmvNoTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if (subGraphLinks[8]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf3NoGmvNoTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[9]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf3NoGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode->setInnerNode(lbffBayerPdaf3NoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[4]->isActive = + !(lbffBayerPdaf3NoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Bayer_Pdaf3_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[5]->isActive = + !(lbffBayerPdaf3NoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Bayer_Pdaf3_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[6]->isActive = !( + lbffBayerPdaf3NoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Bayer_Pdaf3_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[7]->isActive = !( + lbffBayerPdaf3NoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Bayer_Pdaf3_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[8]->isActive = + !(lbffBayerPdaf3NoGmvNoTnrNoSapInnerOptions & + noMp); // lbff_Bayer_Pdaf3_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[9]->isActive = + !(lbffBayerPdaf3NoGmvNoTnrNoSapInnerOptions & + noDp); // lbff_Bayer_Pdaf3_NoGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 10; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100009 + */ +StaticGraph100009::StaticGraph100009(GraphConfiguration100009* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100009, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffBayerPdaf3WithGmvNoTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 15; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode = + &_lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100009::~StaticGraph100009() {} + +StaticGraphStatus imageSubGraphTopology100009::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3WithGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3WithGmvNoTnrNoSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3WithGmvNoTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if (subGraphLinks[10]->linkConfiguration->bufferSize == 0 && + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf3WithGmvNoTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[11]->linkConfiguration->bufferSize == 0 && + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf3WithGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode->setInnerNode( + lbffBayerPdaf3WithGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[4]->isActive = + !(lbffBayerPdaf3WithGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[5]->isActive = !( + lbffBayerPdaf3WithGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[6]->isActive = + !(lbffBayerPdaf3WithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_NoSap:terminal_connect_awb_std_output + // -> awb_std_out + subGraphLinks[7]->isActive = + !(lbffBayerPdaf3WithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_NoSap:terminal_connect_awb_sat_output + // -> awb_sat_out + subGraphLinks[10]->isActive = + !(lbffBayerPdaf3WithGmvNoTnrNoSapInnerOptions & + noMp); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[12]->isActive = + !(lbffBayerPdaf3WithGmvNoTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[11]->isActive = + !(lbffBayerPdaf3WithGmvNoTnrNoSapInnerOptions & + noDp); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[13]->isActive = + !(lbffBayerPdaf3WithGmvNoTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output + // -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 15; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[8]->isActive = + (lbffBayerPdaf3WithGmvNoTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_NoSap:terminal_connect_gmv_feature_output + // -> lbff_Bayer_Pdaf3_WithGmv_NoTnr_NoSap:terminal_connect_gmv_input + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100010 + */ +StaticGraph100010::StaticGraph100010(GraphConfiguration100010* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100010, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffBayerPdaf3NoGmvWithTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 13; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode = + &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode->contextId = 1; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100010::~StaticGraph100010() {} + +StaticGraphStatus imageSubGraphTopology100010::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3NoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if (subGraphLinks[11]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[12]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode->setInnerNode( + lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[4]->isActive = + !(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[5]->isActive = !( + lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[6]->isActive = + !(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output + // -> awb_std_out + subGraphLinks[7]->isActive = + !(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output + // -> awb_sat_out + subGraphLinks[11]->isActive = + !(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & + noMp); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[12]->isActive = + !(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & + noDp); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 13; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[8]->isActive = + (lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> + // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[9]->isActive = + (lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> + // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[10]->isActive = + (lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> + // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100011 + */ +StaticGraph100011::StaticGraph100011(GraphConfiguration100011* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100011, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffBayerPdaf3WithGmvWithTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[17]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 18; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode = + &_lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100011::~StaticGraph100011() {} + +StaticGraphStatus imageSubGraphTopology100011::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3WithGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if (subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode->setInnerNode( + lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[4]->isActive = + !(lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[5]->isActive = + !(lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_af_std_output + // -> af_std_out + subGraphLinks[6]->isActive = + !(lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_awb_std_output + // -> awb_std_out + subGraphLinks[7]->isActive = + !(lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_awb_sat_output + // -> awb_sat_out + subGraphLinks[13]->isActive = !( + lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions & + noMp); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[15]->isActive = !(lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions & + noMp); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[14]->isActive = !( + lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions & + noDp); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[16]->isActive = !(lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions & + noDp); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output + // -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 18; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[8]->isActive = + (lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_gmv_feature_output -> + // lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_gmv_input + subGraphLinks[10]->isActive = + (lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_blend_output -> + // lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[11]->isActive = + (lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_bc_output -> + // lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[12]->isActive = + (lbffBayerPdaf3WithGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> + // lbff_Bayer_Pdaf3_WithGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100045 + */ +StaticGraph100045::StaticGraph100045(GraphConfiguration100045* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100045, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffBayerPdaf3NoGmvWithTnrNoSapOuterNodeConfiguration); + _swNntmOuterNode.Init(&_graphConfiguration.swNntmOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[15]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[17]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 18; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode = + &_lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + _imageSubGraph.swNntmOuterNode = &_swNntmOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swNntmOuterNode->contextId = 2; + _imageSubGraph.swScalerOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100045::~StaticGraph100045() {} + +StaticGraphStatus imageSubGraphTopology100045::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3NoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if (subGraphLinks[11]->linkConfiguration->bufferSize == 0 && + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode->setInnerNode( + lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[4]->isActive = + !(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[5]->isActive = !( + lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[6]->isActive = + !(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output + // -> awb_std_out + subGraphLinks[7]->isActive = + !(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output + // -> awb_sat_out + subGraphLinks[11]->isActive = + !(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & + noMp); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[13]->isActive = + !(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output + // -> sw_nntm:terminal_connect_input + subGraphLinks[12]->isActive = + !(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & + noDp); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[14]->isActive = + !(lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output + // -> sw_nntm:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 18; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[8]->isActive = + (lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> + // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[9]->isActive = + (lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> + // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[10]->isActive = + (lbffBayerPdaf3NoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> + // lbff_Bayer_Pdaf3_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100012 + */ +StaticGraph100012::StaticGraph100012(GraphConfiguration100012* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100012, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysDolOuterNode.Init(&_graphConfiguration.isysDolOuterNodeConfiguration); + _lbffDol2InputsNoGmvNoTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffDol2InputsNoGmvNoTnrNoSapOuterNodeConfiguration); + _swNntmOuterNode.Init(&_graphConfiguration.swNntmOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDol; + link->destNode = &_isysDolOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDol; + link->destNode = &_isysDolOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDol2InputsNoGmvNoTnrNoSap; + link->destNode = &_lbffDol2InputsNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::LbffDol2InputsNoGmvNoTnrNoSap; + link->destNode = &_lbffDol2InputsNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffDol2InputsNoGmvNoTnrNoSap; + link->destNode = &_lbffDol2InputsNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffDol2InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffDol2InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffDol2InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffDol2InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffDol2InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffDol2InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffDol2InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffDol2InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffDol2InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[16]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 17; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysDolOuterNode = &_isysDolOuterNode; + _imageSubGraph.lbffDol2InputsNoGmvNoTnrNoSapOuterNode = + &_lbffDol2InputsNoGmvNoTnrNoSapOuterNode; + _imageSubGraph.swNntmOuterNode = &_swNntmOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysDolOuterNode->contextId = 0; + _imageSubGraph.lbffDol2InputsNoGmvNoTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swNntmOuterNode->contextId = 2; + _imageSubGraph.swScalerOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100012::~StaticGraph100012() {} + +StaticGraphStatus imageSubGraphTopology100012::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffDol2InputsNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffDol2InputsNoGmvNoTnrNoSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffDol2InputsNoGmvNoTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[10]->linkConfiguration->bufferSize == 0 && + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && true) { + lbffDol2InputsNoGmvNoTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[11]->linkConfiguration->bufferSize == 0 && + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && true) { + lbffDol2InputsNoGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffDol2InputsNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffDol2InputsNoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[5]->isActive = !( + lbffDol2InputsNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Dol2Inputs_NoGmv_NoTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[6]->isActive = + !(lbffDol2InputsNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Dol2Inputs_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[7]->isActive = + !(lbffDol2InputsNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Dol2Inputs_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[8]->isActive = !( + lbffDol2InputsNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Dol2Inputs_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[9]->isActive = !( + lbffDol2InputsNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Dol2Inputs_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[10]->isActive = + !(lbffDol2InputsNoGmvNoTnrNoSapInnerOptions & + noMp); // lbff_Dol2Inputs_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[12]->isActive = + !(lbffDol2InputsNoGmvNoTnrNoSapInnerOptions & noMp); // lbff_Dol2Inputs_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output + // -> sw_nntm:terminal_connect_input + subGraphLinks[11]->isActive = + !(lbffDol2InputsNoGmvNoTnrNoSapInnerOptions & + noDp); // lbff_Dol2Inputs_NoGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[13]->isActive = + !(lbffDol2InputsNoGmvNoTnrNoSapInnerOptions & noDp); // lbff_Dol2Inputs_NoGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output + // -> sw_nntm:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 17; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100013 + */ +StaticGraph100013::StaticGraph100013(GraphConfiguration100013* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100013, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysDolOuterNode.Init(&_graphConfiguration.isysDolOuterNodeConfiguration); + _lbffDol2InputsWithGmvNoTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffDol2InputsWithGmvNoTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDol; + link->destNode = &_isysDolOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDol; + link->destNode = &_isysDolOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->destNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->destNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->destNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->destNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[16]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 17; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysDolOuterNode = &_isysDolOuterNode; + _imageSubGraph.lbffDol2InputsWithGmvNoTnrNoSapOuterNode = + &_lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysDolOuterNode->contextId = 0; + _imageSubGraph.lbffDol2InputsWithGmvNoTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100013::~StaticGraph100013() {} + +StaticGraphStatus imageSubGraphTopology100013::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffDol2InputsWithGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffDol2InputsWithGmvNoTnrNoSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffDol2InputsWithGmvNoTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && true) { + lbffDol2InputsWithGmvNoTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && true) { + lbffDol2InputsWithGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffDol2InputsWithGmvNoTnrNoSapOuterNode->setInnerNode( + lbffDol2InputsWithGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[5]->isActive = + !(lbffDol2InputsWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_NoTnr_NoSap:terminal_connect_awb_sve_output + // -> awb_sve_out + subGraphLinks[6]->isActive = + !(lbffDol2InputsWithGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Dol2Inputs_WithGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[7]->isActive = !( + lbffDol2InputsWithGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Dol2Inputs_WithGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[8]->isActive = + !(lbffDol2InputsWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_NoTnr_NoSap:terminal_connect_awb_std_output + // -> awb_std_out + subGraphLinks[9]->isActive = + !(lbffDol2InputsWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_NoTnr_NoSap:terminal_connect_awb_sat_output + // -> awb_sat_out + subGraphLinks[12]->isActive = + !(lbffDol2InputsWithGmvNoTnrNoSapInnerOptions & + noMp); // lbff_Dol2Inputs_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[14]->isActive = + !(lbffDol2InputsWithGmvNoTnrNoSapInnerOptions & noMp); // lbff_Dol2Inputs_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[13]->isActive = + !(lbffDol2InputsWithGmvNoTnrNoSapInnerOptions & + noDp); // lbff_Dol2Inputs_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[15]->isActive = + !(lbffDol2InputsWithGmvNoTnrNoSapInnerOptions & noDp); // lbff_Dol2Inputs_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output + // -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 17; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[10]->isActive = + (lbffDol2InputsWithGmvNoTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Dol2Inputs_WithGmv_NoTnr_NoSap:terminal_connect_gmv_feature_output + // -> lbff_Dol2Inputs_WithGmv_NoTnr_NoSap:terminal_connect_gmv_input + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100014 + */ +StaticGraph100014::StaticGraph100014(GraphConfiguration100014* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100014, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysDolOuterNode.Init(&_graphConfiguration.isysDolOuterNodeConfiguration); + _lbffDol2InputsNoGmvWithTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffDol2InputsNoGmvWithTnrNoSapOuterNodeConfiguration); + _swNntmOuterNode.Init(&_graphConfiguration.swNntmOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDol; + link->destNode = &_isysDolOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDol; + link->destNode = &_isysDolOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[17]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[19]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 20; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysDolOuterNode = &_isysDolOuterNode; + _imageSubGraph.lbffDol2InputsNoGmvWithTnrNoSapOuterNode = + &_lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + _imageSubGraph.swNntmOuterNode = &_swNntmOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysDolOuterNode->contextId = 0; + _imageSubGraph.lbffDol2InputsNoGmvWithTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swNntmOuterNode->contextId = 2; + _imageSubGraph.swScalerOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100014::~StaticGraph100014() {} + +StaticGraphStatus imageSubGraphTopology100014::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffDol2InputsNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffDol2InputsNoGmvWithTnrNoSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffDol2InputsNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && true) { + lbffDol2InputsNoGmvWithTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && true) { + lbffDol2InputsNoGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffDol2InputsNoGmvWithTnrNoSapOuterNode->setInnerNode( + lbffDol2InputsNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[5]->isActive = + !(lbffDol2InputsNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_awb_sve_output + // -> awb_sve_out + subGraphLinks[6]->isActive = + !(lbffDol2InputsNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[7]->isActive = !( + lbffDol2InputsNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[8]->isActive = + !(lbffDol2InputsNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output + // -> awb_std_out + subGraphLinks[9]->isActive = + !(lbffDol2InputsNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output + // -> awb_sat_out + subGraphLinks[13]->isActive = + !(lbffDol2InputsNoGmvWithTnrNoSapInnerOptions & + noMp); // lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[15]->isActive = + !(lbffDol2InputsNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output + // -> sw_nntm:terminal_connect_input + subGraphLinks[14]->isActive = + !(lbffDol2InputsNoGmvWithTnrNoSapInnerOptions & + noDp); // lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[16]->isActive = + !(lbffDol2InputsNoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output + // -> sw_nntm:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 20; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[10]->isActive = + (lbffDol2InputsNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> + // lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[11]->isActive = + (lbffDol2InputsNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> + // lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[12]->isActive = + (lbffDol2InputsNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> + // lbff_Dol2Inputs_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100015 + */ +StaticGraph100015::StaticGraph100015(GraphConfiguration100015* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100015, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysDolOuterNode.Init(&_graphConfiguration.isysDolOuterNodeConfiguration); + _lbffDol2InputsWithGmvWithTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffDol2InputsWithGmvWithTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDol; + link->destNode = &_isysDolOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDol; + link->destNode = &_isysDolOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[19]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 20; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysDolOuterNode = &_isysDolOuterNode; + _imageSubGraph.lbffDol2InputsWithGmvWithTnrNoSapOuterNode = + &_lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysDolOuterNode->contextId = 0; + _imageSubGraph.lbffDol2InputsWithGmvWithTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100015::~StaticGraph100015() {} + +StaticGraphStatus imageSubGraphTopology100015::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffDol2InputsWithGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffDol2InputsWithGmvWithTnrNoSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffDol2InputsWithGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && true) { + lbffDol2InputsWithGmvWithTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + subGraphLinks[18]->linkConfiguration->bufferSize == 0 && true) { + lbffDol2InputsWithGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffDol2InputsWithGmvWithTnrNoSapOuterNode->setInnerNode( + lbffDol2InputsWithGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[5]->isActive = + !(lbffDol2InputsWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_awb_sve_output + // -> awb_sve_out + subGraphLinks[6]->isActive = + !(lbffDol2InputsWithGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[7]->isActive = + !(lbffDol2InputsWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_af_std_output + // -> af_std_out + subGraphLinks[8]->isActive = + !(lbffDol2InputsWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_awb_std_output + // -> awb_std_out + subGraphLinks[9]->isActive = + !(lbffDol2InputsWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_awb_sat_output + // -> awb_sat_out + subGraphLinks[15]->isActive = !( + lbffDol2InputsWithGmvWithTnrNoSapInnerOptions & + noMp); // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[17]->isActive = !(lbffDol2InputsWithGmvWithTnrNoSapInnerOptions & + noMp); // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[16]->isActive = !( + lbffDol2InputsWithGmvWithTnrNoSapInnerOptions & + noDp); // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[18]->isActive = !(lbffDol2InputsWithGmvWithTnrNoSapInnerOptions & + noDp); // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output + // -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 20; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[10]->isActive = + (lbffDol2InputsWithGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_gmv_feature_output -> + // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_gmv_input + subGraphLinks[12]->isActive = + (lbffDol2InputsWithGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_blend_output -> + // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[13]->isActive = + (lbffDol2InputsWithGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_bc_output -> + // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[14]->isActive = + (lbffDol2InputsWithGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> + // lbff_Dol2Inputs_WithGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100016 + */ +StaticGraph100016::StaticGraph100016(GraphConfiguration100016* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100016, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysDolOuterNode.Init(&_graphConfiguration.isysDolOuterNodeConfiguration); + _lbffDolSmoothOuterNode.Init(&_graphConfiguration.lbffDolSmoothOuterNodeConfiguration); + _lbffDol3InputsNoGmvNoTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffDol3InputsNoGmvNoTnrNoSapOuterNodeConfiguration); + _swNntmOuterNode.Init(&_graphConfiguration.swNntmOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDol; + link->destNode = &_isysDolOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDol; + link->destNode = &_isysDolOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDolSmooth; + link->destNode = &_lbffDolSmoothOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffDolSmooth; + link->srcNode = &_lbffDolSmoothOuterNode; + link->srcTerminalId = 16; + link->dest = GraphElementType::LbffDol3InputsNoGmvNoTnrNoSap; + link->destNode = &_lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDol3InputsNoGmvNoTnrNoSap; + link->destNode = &_lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::LbffDol3InputsNoGmvNoTnrNoSap; + link->destNode = &_lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffDol3InputsNoGmvNoTnrNoSap; + link->destNode = &_lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffDol3InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffDol3InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffDol3InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffDol3InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffDol3InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffDol3InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffDol3InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffDol3InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffDol3InputsNoGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[16]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[18]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 19; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysDolOuterNode = &_isysDolOuterNode; + _imageSubGraph.lbffDolSmoothOuterNode = &_lbffDolSmoothOuterNode; + _imageSubGraph.lbffDol3InputsNoGmvNoTnrNoSapOuterNode = + &_lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + _imageSubGraph.swNntmOuterNode = &_swNntmOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysDolOuterNode->contextId = 0; + _imageSubGraph.lbffDolSmoothOuterNode->contextId = 1; + _imageSubGraph.lbffDol3InputsNoGmvNoTnrNoSapOuterNode->contextId = 2; + _imageSubGraph.swNntmOuterNode->contextId = 3; + _imageSubGraph.swScalerOuterNode->contextId = 4; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100016::~StaticGraph100016() {} + +StaticGraphStatus imageSubGraphTopology100016::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffDol3InputsNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffDol3InputsNoGmvNoTnrNoSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffDol3InputsNoGmvNoTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && true) { + lbffDol3InputsNoGmvNoTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && true) { + lbffDol3InputsNoGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffDol3InputsNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffDol3InputsNoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[7]->isActive = !( + lbffDol3InputsNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Dol3Inputs_NoGmv_NoTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[8]->isActive = + !(lbffDol3InputsNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Dol3Inputs_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[9]->isActive = + !(lbffDol3InputsNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Dol3Inputs_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[10]->isActive = !( + lbffDol3InputsNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Dol3Inputs_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[11]->isActive = !( + lbffDol3InputsNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Dol3Inputs_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[12]->isActive = + !(lbffDol3InputsNoGmvNoTnrNoSapInnerOptions & + noMp); // lbff_Dol3Inputs_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[14]->isActive = + !(lbffDol3InputsNoGmvNoTnrNoSapInnerOptions & noMp); // lbff_Dol3Inputs_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output + // -> sw_nntm:terminal_connect_input + subGraphLinks[13]->isActive = + !(lbffDol3InputsNoGmvNoTnrNoSapInnerOptions & + noDp); // lbff_Dol3Inputs_NoGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[15]->isActive = + !(lbffDol3InputsNoGmvNoTnrNoSapInnerOptions & noDp); // lbff_Dol3Inputs_NoGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output + // -> sw_nntm:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 19; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100017 + */ +StaticGraph100017::StaticGraph100017(GraphConfiguration100017* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100017, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysDolOuterNode.Init(&_graphConfiguration.isysDolOuterNodeConfiguration); + _lbffDolSmoothOuterNode.Init(&_graphConfiguration.lbffDolSmoothOuterNodeConfiguration); + _lbffDol3InputsWithGmvNoTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffDol3InputsWithGmvNoTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDol; + link->destNode = &_isysDolOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDol; + link->destNode = &_isysDolOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDolSmooth; + link->destNode = &_lbffDolSmoothOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffDolSmooth; + link->srcNode = &_lbffDolSmoothOuterNode; + link->srcTerminalId = 16; + link->dest = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->destNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->destNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->destNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->destNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->destNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[18]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 19; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysDolOuterNode = &_isysDolOuterNode; + _imageSubGraph.lbffDolSmoothOuterNode = &_lbffDolSmoothOuterNode; + _imageSubGraph.lbffDol3InputsWithGmvNoTnrNoSapOuterNode = + &_lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysDolOuterNode->contextId = 0; + _imageSubGraph.lbffDolSmoothOuterNode->contextId = 1; + _imageSubGraph.lbffDol3InputsWithGmvNoTnrNoSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100017::~StaticGraph100017() {} + +StaticGraphStatus imageSubGraphTopology100017::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffDol3InputsWithGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffDol3InputsWithGmvNoTnrNoSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffDol3InputsWithGmvNoTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && true) { + lbffDol3InputsWithGmvNoTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && true) { + lbffDol3InputsWithGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffDol3InputsWithGmvNoTnrNoSapOuterNode->setInnerNode( + lbffDol3InputsWithGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[7]->isActive = + !(lbffDol3InputsWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_NoTnr_NoSap:terminal_connect_awb_sve_output + // -> awb_sve_out + subGraphLinks[8]->isActive = + !(lbffDol3InputsWithGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Dol3Inputs_WithGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[9]->isActive = !( + lbffDol3InputsWithGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Dol3Inputs_WithGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[10]->isActive = + !(lbffDol3InputsWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_NoTnr_NoSap:terminal_connect_awb_std_output + // -> awb_std_out + subGraphLinks[11]->isActive = + !(lbffDol3InputsWithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_NoTnr_NoSap:terminal_connect_awb_sat_output + // -> awb_sat_out + subGraphLinks[14]->isActive = + !(lbffDol3InputsWithGmvNoTnrNoSapInnerOptions & + noMp); // lbff_Dol3Inputs_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[16]->isActive = + !(lbffDol3InputsWithGmvNoTnrNoSapInnerOptions & noMp); // lbff_Dol3Inputs_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[15]->isActive = + !(lbffDol3InputsWithGmvNoTnrNoSapInnerOptions & + noDp); // lbff_Dol3Inputs_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[17]->isActive = + !(lbffDol3InputsWithGmvNoTnrNoSapInnerOptions & noDp); // lbff_Dol3Inputs_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output + // -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 19; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[12]->isActive = + (lbffDol3InputsWithGmvNoTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Dol3Inputs_WithGmv_NoTnr_NoSap:terminal_connect_gmv_feature_output + // -> lbff_Dol3Inputs_WithGmv_NoTnr_NoSap:terminal_connect_gmv_input + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100018 + */ +StaticGraph100018::StaticGraph100018(GraphConfiguration100018* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100018, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysDolOuterNode.Init(&_graphConfiguration.isysDolOuterNodeConfiguration); + _lbffDolSmoothOuterNode.Init(&_graphConfiguration.lbffDolSmoothOuterNodeConfiguration); + _lbffDol3InputsNoGmvWithTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffDol3InputsNoGmvWithTnrNoSapOuterNodeConfiguration); + _swNntmOuterNode.Init(&_graphConfiguration.swNntmOuterNodeConfiguration); + _swScalerOuterNode.Init(&_graphConfiguration.swScalerOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDol; + link->destNode = &_isysDolOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDol; + link->destNode = &_isysDolOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDolSmooth; + link->destNode = &_lbffDolSmoothOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffDolSmooth; + link->srcNode = &_lbffDolSmoothOuterNode; + link->srcTerminalId = 16; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwNntm; + link->destNode = &_swNntmOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[19]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[20]; + link->src = GraphElementType::SwNntm; + link->srcNode = &_swNntmOuterNode; + link->srcTerminalId = 2; + link->dest = GraphElementType::SwScaler; + link->destNode = &_swScalerOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[21]; + link->src = GraphElementType::SwScaler; + link->srcNode = &_swScalerOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedSecondary; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 22; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysDolOuterNode = &_isysDolOuterNode; + _imageSubGraph.lbffDolSmoothOuterNode = &_lbffDolSmoothOuterNode; + _imageSubGraph.lbffDol3InputsNoGmvWithTnrNoSapOuterNode = + &_lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + _imageSubGraph.swNntmOuterNode = &_swNntmOuterNode; + _imageSubGraph.swScalerOuterNode = &_swScalerOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysDolOuterNode->contextId = 0; + _imageSubGraph.lbffDolSmoothOuterNode->contextId = 1; + _imageSubGraph.lbffDol3InputsNoGmvWithTnrNoSapOuterNode->contextId = 2; + _imageSubGraph.swNntmOuterNode->contextId = 3; + _imageSubGraph.swScalerOuterNode->contextId = 4; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100018::~StaticGraph100018() {} + +StaticGraphStatus imageSubGraphTopology100018::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffDol3InputsNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffDol3InputsNoGmvWithTnrNoSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffDol3InputsNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && true) { + lbffDol3InputsNoGmvWithTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + subGraphLinks[18]->linkConfiguration->bufferSize == 0 && true) { + lbffDol3InputsNoGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffDol3InputsNoGmvWithTnrNoSapOuterNode->setInnerNode( + lbffDol3InputsNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[7]->isActive = + !(lbffDol3InputsNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_awb_sve_output + // -> awb_sve_out + subGraphLinks[8]->isActive = + !(lbffDol3InputsNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[9]->isActive = !( + lbffDol3InputsNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[10]->isActive = + !(lbffDol3InputsNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output + // -> awb_std_out + subGraphLinks[11]->isActive = + !(lbffDol3InputsNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output + // -> awb_sat_out + subGraphLinks[15]->isActive = + !(lbffDol3InputsNoGmvWithTnrNoSapInnerOptions & + noMp); // lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[17]->isActive = + !(lbffDol3InputsNoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output + // -> sw_nntm:terminal_connect_input + subGraphLinks[16]->isActive = + !(lbffDol3InputsNoGmvWithTnrNoSapInnerOptions & + noDp); // lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[18]->isActive = + !(lbffDol3InputsNoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output + // -> sw_nntm:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 22; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[12]->isActive = + (lbffDol3InputsNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> + // lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[13]->isActive = + (lbffDol3InputsNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> + // lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[14]->isActive = + (lbffDol3InputsNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> + // lbff_Dol3Inputs_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100019 + */ +StaticGraph100019::StaticGraph100019(GraphConfiguration100019* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100019, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysDolOuterNode.Init(&_graphConfiguration.isysDolOuterNodeConfiguration); + _lbffDolSmoothOuterNode.Init(&_graphConfiguration.lbffDolSmoothOuterNodeConfiguration); + _lbffDol3InputsWithGmvWithTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffDol3InputsWithGmvWithTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDol; + link->destNode = &_isysDolOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDol; + link->destNode = &_isysDolOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDolSmooth; + link->destNode = &_lbffDolSmoothOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffDolSmooth; + link->srcNode = &_lbffDolSmoothOuterNode; + link->srcTerminalId = 16; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrNoSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[21]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 22; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysDolOuterNode = &_isysDolOuterNode; + _imageSubGraph.lbffDolSmoothOuterNode = &_lbffDolSmoothOuterNode; + _imageSubGraph.lbffDol3InputsWithGmvWithTnrNoSapOuterNode = + &_lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysDolOuterNode->contextId = 0; + _imageSubGraph.lbffDolSmoothOuterNode->contextId = 1; + _imageSubGraph.lbffDol3InputsWithGmvWithTnrNoSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100019::~StaticGraph100019() {} + +StaticGraphStatus imageSubGraphTopology100019::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffDol3InputsWithGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffDol3InputsWithGmvWithTnrNoSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffDol3InputsWithGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[17]->linkConfiguration->bufferSize == 0 && + subGraphLinks[19]->linkConfiguration->bufferSize == 0 && true) { + lbffDol3InputsWithGmvWithTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[18]->linkConfiguration->bufferSize == 0 && + subGraphLinks[20]->linkConfiguration->bufferSize == 0 && true) { + lbffDol3InputsWithGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffDol3InputsWithGmvWithTnrNoSapOuterNode->setInnerNode( + lbffDol3InputsWithGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[7]->isActive = + !(lbffDol3InputsWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_awb_sve_output + // -> awb_sve_out + subGraphLinks[8]->isActive = + !(lbffDol3InputsWithGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[9]->isActive = + !(lbffDol3InputsWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_af_std_output + // -> af_std_out + subGraphLinks[10]->isActive = + !(lbffDol3InputsWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_awb_std_output + // -> awb_std_out + subGraphLinks[11]->isActive = + !(lbffDol3InputsWithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_awb_sat_output + // -> awb_sat_out + subGraphLinks[17]->isActive = !( + lbffDol3InputsWithGmvWithTnrNoSapInnerOptions & + noMp); // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[19]->isActive = !(lbffDol3InputsWithGmvWithTnrNoSapInnerOptions & + noMp); // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[18]->isActive = !( + lbffDol3InputsWithGmvWithTnrNoSapInnerOptions & + noDp); // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[20]->isActive = !(lbffDol3InputsWithGmvWithTnrNoSapInnerOptions & + noDp); // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output + // -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 22; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[12]->isActive = + (lbffDol3InputsWithGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_gmv_feature_output -> + // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_gmv_input + subGraphLinks[14]->isActive = + (lbffDol3InputsWithGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_blend_output -> + // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[15]->isActive = + (lbffDol3InputsWithGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_bc_output -> + // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[16]->isActive = + (lbffDol3InputsWithGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> + // lbff_Dol3Inputs_WithGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100020 + */ +StaticGraph100020::StaticGraph100020(GraphConfiguration100020* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100020, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration), + _irSubGraph(_sinkMappingConfiguration), + _image_irSubGraph(_sinkMappingConfiguration) { + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffRgbIrNoGmvNoTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffRgbIrNoGmvNoTnrNoSapOuterNodeConfiguration); + _lbffRgbIrIrNoGmvNoTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffRgbIrIrNoGmvNoTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + _imageSubGraph.links[0] = link; + _irSubGraph.links[0] = link; + _image_irSubGraph.links[0] = link; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffRgbIrNoGmvNoTnrNoSap; + link->destNode = &_lbffRgbIrNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + _imageSubGraph.links[1] = link; + _irSubGraph.links[1] = link; + _image_irSubGraph.links[1] = link; + + link = &_graphLinks[2]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffRgbIrNoGmvNoTnrNoSap; + link->destNode = &_lbffRgbIrNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + _imageSubGraph.links[2] = link; + _irSubGraph.links[2] = link; + _image_irSubGraph.links[2] = link; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffRgbIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[3] = link; + _irSubGraph.links[3] = link; + _image_irSubGraph.links[3] = link; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffRgbIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[4] = link; + _irSubGraph.links[4] = link; + _image_irSubGraph.links[4] = link; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffRgbIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[5] = link; + _irSubGraph.links[5] = link; + _image_irSubGraph.links[5] = link; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffRgbIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[6] = link; + _irSubGraph.links[6] = link; + _image_irSubGraph.links[6] = link; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffRgbIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[7] = link; + _irSubGraph.links[7] = link; + _image_irSubGraph.links[7] = link; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffRgbIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[8] = link; + _irSubGraph.links[8] = link; + _image_irSubGraph.links[8] = link; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffRgbIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[9] = link; + _irSubGraph.links[9] = link; + _image_irSubGraph.links[9] = link; + + link = &_graphLinks[10]; + link->src = GraphElementType::LscBufferIr; + link->dest = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + _irSubGraph.links[10] = link; + _image_irSubGraph.links[10] = link; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffRgbIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 14; + link->dest = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + _irSubGraph.links[11] = link; + _image_irSubGraph.links[11] = link; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::IrAeOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[12] = link; + _image_irSubGraph.links[12] = link; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::IrAfStdOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[13] = link; + _image_irSubGraph.links[13] = link; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::IrAwbStdOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[14] = link; + _image_irSubGraph.links[14] = link; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::IrAwbSatOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[15] = link; + _image_irSubGraph.links[15] = link; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::IrMp; + link->type = LinkType::Node2Sink; + _irSubGraph.links[16] = link; + _image_irSubGraph.links[16] = link; + + for (uint8_t i = 0; i < 17; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffRgbIrNoGmvNoTnrNoSapOuterNode = &_lbffRgbIrNoGmvNoTnrNoSapOuterNode; + _irSubGraph.isysOuterNode = &_isysOuterNode; + _irSubGraph.lbffRgbIrNoGmvNoTnrNoSapOuterNode = &_lbffRgbIrNoGmvNoTnrNoSapOuterNode; + _irSubGraph.lbffRgbIrIrNoGmvNoTnrNoSapOuterNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + _image_irSubGraph.isysOuterNode = &_isysOuterNode; + _image_irSubGraph.lbffRgbIrNoGmvNoTnrNoSapOuterNode = &_lbffRgbIrNoGmvNoTnrNoSapOuterNode; + _image_irSubGraph.lbffRgbIrIrNoGmvNoTnrNoSapOuterNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + + // choose the selected sub graph + if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.video != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.stills != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.thumbnail != + static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == + static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.previewIr == + static_cast(HwSink::Disconnected))) { + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffRgbIrNoGmvNoTnrNoSapOuterNode->contextId = 1; + } else if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.video == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.stills == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.thumbnail == + static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == + static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.previewIr != + static_cast(HwSink::Disconnected))) { + _selectedGraphTopology = &_irSubGraph; + + // logical node IDs + _irSubGraph.isysOuterNode->contextId = 0; + _irSubGraph.lbffRgbIrNoGmvNoTnrNoSapOuterNode->contextId = 1; + _irSubGraph.lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->contextId = 2; + } else if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.video != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.stills != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.thumbnail != + static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == + static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.previewIr != + static_cast(HwSink::Disconnected))) { + _selectedGraphTopology = &_image_irSubGraph; + + // logical node IDs + _image_irSubGraph.isysOuterNode->contextId = 0; + _image_irSubGraph.lbffRgbIrNoGmvNoTnrNoSapOuterNode->contextId = 1; + _image_irSubGraph.lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->contextId = 2; + } else { + STATIC_GRAPH_LOG("Didn't found a matching sub graph for the selected virtual sinks."); + } + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100020::~StaticGraph100020() {} + +StaticGraphStatus imageSubGraphTopology100020::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffRgbIrNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrNoGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrNoGmvNoTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[8]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrNoGmvNoTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[9]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrNoGmvNoTnrNoSapInnerOptions |= noDp; + } + // always active private inner options + lbffRgbIrNoGmvNoTnrNoSapInnerOptions |= (noIr); + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffRgbIrNoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = + !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[4]->isActive = + !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[5]->isActive = + !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[6]->isActive = + !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[7]->isActive = + !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[8]->isActive = + !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & + noMp); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[9]->isActive = + !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & + noDp); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 10; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus irSubGraphTopology100020::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags irPublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.irInnerOptions); + + /* + * Setting Node lbffRgbIrNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrNoGmvNoTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrNoGmvNoTnrNoSapInnerOptions |= (noPdaf); + // active public options according to sink mapping + if (subGraphLinks[8]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrNoGmvNoTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[9]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrNoGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Setting Node lbffRgbIrIrNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions |= (noPdaf | noDp | noIr); + // active public options according to sink mapping + if (subGraphLinks[16]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions |= noMp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffRgbIrNoGmvNoTnrNoSapInnerOptions); + lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = + !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[4]->isActive = + !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[5]->isActive = + !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[6]->isActive = + !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[7]->isActive = + !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[8]->isActive = + !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & + noMp); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[9]->isActive = + !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & + noDp); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[12]->isActive = + !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ir_ae_out + subGraphLinks[13]->isActive = + !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> ir_af_std_out + subGraphLinks[14]->isActive = !( + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> ir_awb_std_out + subGraphLinks[15]->isActive = !( + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> ir_awb_sat_out + subGraphLinks[16]->isActive = + !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & + noMp); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> ir_mp + + /* + * Link enablement by private inner options + */ + subGraphLinks[11]->isActive = + !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & + noIr); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_ir_output -> + // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_main_data_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 17; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus image_irSubGraphTopology100020::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + InnerNodeOptionsFlags irPublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.irInnerOptions); + + /* + * Setting Node lbffRgbIrNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrNoGmvNoTnrNoSapInnerOptions = None; + // active public inner options according to sink mapping + if (subGraphLinks[8]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrNoGmvNoTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[9]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrNoGmvNoTnrNoSapInnerOptions |= noDp; + } + // combine inner options for the node common sub graphs + lbffRgbIrNoGmvNoTnrNoSapInnerOptions |= imagePublicInnerNodeConfiguration; + lbffRgbIrNoGmvNoTnrNoSapInnerOptions |= irPublicInnerNodeConfiguration; + + /* + * Setting Node lbffRgbIrIrNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions |= (noPdaf | noDp | noIr); + // active public options according to sink mapping + if (subGraphLinks[16]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions |= noMp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffRgbIrNoGmvNoTnrNoSapInnerOptions); + lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = + !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[4]->isActive = + !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[5]->isActive = + !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[6]->isActive = + !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[7]->isActive = + !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[8]->isActive = + !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & + noMp); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[9]->isActive = + !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & + noDp); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[12]->isActive = + !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ir_ae_out + subGraphLinks[13]->isActive = + !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> ir_af_std_out + subGraphLinks[14]->isActive = !( + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> ir_awb_std_out + subGraphLinks[15]->isActive = !( + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> ir_awb_sat_out + subGraphLinks[16]->isActive = + !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & + noMp); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> ir_mp + + /* + * Link enablement by private inner options + */ + subGraphLinks[11]->isActive = + !(lbffRgbIrNoGmvNoTnrNoSapInnerOptions & + noIr); // lbff_RgbIr_NoGmv_NoTnr_NoSap:terminal_connect_ir_output -> + // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_main_data_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 17; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100021 + */ +StaticGraph100021::StaticGraph100021(GraphConfiguration100021* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100021, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration), + _irSubGraph(_sinkMappingConfiguration), + _image_irSubGraph(_sinkMappingConfiguration) { + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffRgbIrWithGmvNoTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffRgbIrWithGmvNoTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + _lbffRgbIrIrNoGmvNoTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffRgbIrIrNoGmvNoTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + _imageSubGraph.links[0] = link; + _irSubGraph.links[0] = link; + _image_irSubGraph.links[0] = link; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->destNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + _imageSubGraph.links[1] = link; + _irSubGraph.links[1] = link; + _image_irSubGraph.links[1] = link; + + link = &_graphLinks[2]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->destNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + _imageSubGraph.links[2] = link; + _irSubGraph.links[2] = link; + _image_irSubGraph.links[2] = link; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[3] = link; + _irSubGraph.links[3] = link; + _image_irSubGraph.links[3] = link; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[4] = link; + _irSubGraph.links[4] = link; + _image_irSubGraph.links[4] = link; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[5] = link; + _irSubGraph.links[5] = link; + _image_irSubGraph.links[5] = link; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[6] = link; + _irSubGraph.links[6] = link; + _image_irSubGraph.links[6] = link; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[7] = link; + _irSubGraph.links[7] = link; + _image_irSubGraph.links[7] = link; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->destNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _imageSubGraph.links[8] = link; + _irSubGraph.links[8] = link; + _image_irSubGraph.links[8] = link; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[9] = link; + _irSubGraph.links[9] = link; + _image_irSubGraph.links[9] = link; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[10] = link; + _irSubGraph.links[10] = link; + _image_irSubGraph.links[10] = link; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[11] = link; + _irSubGraph.links[11] = link; + _image_irSubGraph.links[11] = link; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + _imageSubGraph.links[12] = link; + _image_irSubGraph.links[12] = link; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + _imageSubGraph.links[13] = link; + _image_irSubGraph.links[13] = link; + + link = &_graphLinks[14]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[14] = link; + _image_irSubGraph.links[14] = link; + + link = &_graphLinks[15]; + link->src = GraphElementType::LscBufferIr; + link->dest = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + _irSubGraph.links[12] = link; + _image_irSubGraph.links[15] = link; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 14; + link->dest = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + _irSubGraph.links[13] = link; + _image_irSubGraph.links[16] = link; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::IrAeOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[14] = link; + _image_irSubGraph.links[17] = link; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::IrAfStdOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[15] = link; + _image_irSubGraph.links[18] = link; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::IrAwbStdOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[16] = link; + _image_irSubGraph.links[19] = link; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::IrAwbSatOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[17] = link; + _image_irSubGraph.links[20] = link; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::IrMp; + link->type = LinkType::Node2Sink; + _irSubGraph.links[18] = link; + _image_irSubGraph.links[21] = link; + + for (uint8_t i = 0; i < 22; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffRgbIrWithGmvNoTnrNoSapOuterNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + _irSubGraph.isysOuterNode = &_isysOuterNode; + _irSubGraph.lbffRgbIrWithGmvNoTnrNoSapOuterNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + _irSubGraph.lbffRgbIrIrNoGmvNoTnrNoSapOuterNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + _image_irSubGraph.isysOuterNode = &_isysOuterNode; + _image_irSubGraph.lbffRgbIrWithGmvNoTnrNoSapOuterNode = &_lbffRgbIrWithGmvNoTnrNoSapOuterNode; + _image_irSubGraph.swGdcOuterNode = &_swGdcOuterNode; + _image_irSubGraph.lbffRgbIrIrNoGmvNoTnrNoSapOuterNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + + // choose the selected sub graph + if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.video != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.stills != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.thumbnail != + static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == + static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.previewIr == + static_cast(HwSink::Disconnected))) { + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffRgbIrWithGmvNoTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + } else if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.video == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.stills == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.thumbnail == + static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == + static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.previewIr != + static_cast(HwSink::Disconnected))) { + _selectedGraphTopology = &_irSubGraph; + + // logical node IDs + _irSubGraph.isysOuterNode->contextId = 0; + _irSubGraph.lbffRgbIrWithGmvNoTnrNoSapOuterNode->contextId = 1; + _irSubGraph.lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->contextId = 2; + } else if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.video != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.stills != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.thumbnail != + static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == + static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.previewIr != + static_cast(HwSink::Disconnected))) { + _selectedGraphTopology = &_image_irSubGraph; + + // logical node IDs + _image_irSubGraph.isysOuterNode->contextId = 0; + _image_irSubGraph.lbffRgbIrWithGmvNoTnrNoSapOuterNode->contextId = 1; + _image_irSubGraph.swGdcOuterNode->contextId = 2; + _image_irSubGraph.lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->contextId = 3; + } else { + STATIC_GRAPH_LOG("Didn't found a matching sub graph for the selected virtual sinks."); + } + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100021::~StaticGraph100021() {} + +StaticGraphStatus imageSubGraphTopology100021::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffRgbIrWithGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrWithGmvNoTnrNoSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrWithGmvNoTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[10]->linkConfiguration->bufferSize == 0 && + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrWithGmvNoTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[11]->linkConfiguration->bufferSize == 0 && + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrWithGmvNoTnrNoSapInnerOptions |= noDp; + } + // always active private inner options + lbffRgbIrWithGmvNoTnrNoSapInnerOptions |= (noIr); + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrWithGmvNoTnrNoSapOuterNode->setInnerNode(lbffRgbIrWithGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = + !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[4]->isActive = + !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[5]->isActive = + !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[6]->isActive = + !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[7]->isActive = + !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[10]->isActive = + !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & + noMp); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[12]->isActive = + !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & noMp); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[11]->isActive = + !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & + noDp); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[13]->isActive = + !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & noDp); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output + // -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 15; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[8]->isActive = + (lbffRgbIrWithGmvNoTnrNoSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_gmv_feature_output -> + // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_gmv_input + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus irSubGraphTopology100021::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags irPublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.irInnerOptions); + + /* + * Setting Node lbffRgbIrWithGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrWithGmvNoTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrWithGmvNoTnrNoSapInnerOptions |= (noPdaf); + // active public options according to sink mapping + if (subGraphLinks[10]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrWithGmvNoTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[11]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrWithGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Setting Node lbffRgbIrIrNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions |= (noPdaf | noDp | noIr); + // active public options according to sink mapping + if (subGraphLinks[18]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions |= noMp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrWithGmvNoTnrNoSapOuterNode->setInnerNode(lbffRgbIrWithGmvNoTnrNoSapInnerOptions); + lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = + !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[4]->isActive = + !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[5]->isActive = + !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[6]->isActive = + !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[7]->isActive = + !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[10]->isActive = + !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & + noMp); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[11]->isActive = + !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & + noDp); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[14]->isActive = + !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ir_ae_out + subGraphLinks[15]->isActive = + !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> ir_af_std_out + subGraphLinks[16]->isActive = !( + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> ir_awb_std_out + subGraphLinks[17]->isActive = !( + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> ir_awb_sat_out + subGraphLinks[18]->isActive = + !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & + noMp); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> ir_mp + + /* + * Link enablement by private inner options + */ + subGraphLinks[13]->isActive = + !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & + noIr); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ir_output -> + // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_main_data_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 19; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[8]->isActive = + (lbffRgbIrWithGmvNoTnrNoSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_gmv_feature_output -> + // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_gmv_input + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus image_irSubGraphTopology100021::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + InnerNodeOptionsFlags irPublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.irInnerOptions); + + /* + * Setting Node lbffRgbIrWithGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrWithGmvNoTnrNoSapInnerOptions = None; + // active public inner options according to sink mapping + if (subGraphLinks[10]->linkConfiguration->bufferSize == 0 && + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrWithGmvNoTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[11]->linkConfiguration->bufferSize == 0 && + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrWithGmvNoTnrNoSapInnerOptions |= noDp; + } + // combine inner options for the node common sub graphs + lbffRgbIrWithGmvNoTnrNoSapInnerOptions |= imagePublicInnerNodeConfiguration; + lbffRgbIrWithGmvNoTnrNoSapInnerOptions |= irPublicInnerNodeConfiguration; + + /* + * Setting Node lbffRgbIrIrNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions |= (noPdaf | noDp | noIr); + // active public options according to sink mapping + if (subGraphLinks[21]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions |= noMp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrWithGmvNoTnrNoSapOuterNode->setInnerNode(lbffRgbIrWithGmvNoTnrNoSapInnerOptions); + lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = + !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[4]->isActive = + !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[5]->isActive = + !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[6]->isActive = + !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[7]->isActive = + !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[10]->isActive = + !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & + noMp); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[12]->isActive = + !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & noMp); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[11]->isActive = + !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & + noDp); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[13]->isActive = + !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & noDp); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[17]->isActive = + !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ir_ae_out + subGraphLinks[18]->isActive = + !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> ir_af_std_out + subGraphLinks[19]->isActive = !( + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> ir_awb_std_out + subGraphLinks[20]->isActive = !( + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> ir_awb_sat_out + subGraphLinks[21]->isActive = + !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & + noMp); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> ir_mp + + /* + * Link enablement by private inner options + */ + subGraphLinks[16]->isActive = + !(lbffRgbIrWithGmvNoTnrNoSapInnerOptions & + noIr); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_ir_output -> + // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_main_data_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 22; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[8]->isActive = + (lbffRgbIrWithGmvNoTnrNoSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_gmv_feature_output -> + // lbff_RgbIr_WithGmv_NoTnr_NoSap:terminal_connect_gmv_input + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100022 + */ +StaticGraph100022::StaticGraph100022(GraphConfiguration100022* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100022, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration), + _irSubGraph(_sinkMappingConfiguration), + _image_irSubGraph(_sinkMappingConfiguration) { + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffRgbIrNoGmvWithTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffRgbIrNoGmvWithTnrNoSapOuterNodeConfiguration); + _lbffRgbIrIrNoGmvWithTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffRgbIrIrNoGmvWithTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + _imageSubGraph.links[0] = link; + _irSubGraph.links[0] = link; + _image_irSubGraph.links[0] = link; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + _imageSubGraph.links[1] = link; + _irSubGraph.links[1] = link; + _image_irSubGraph.links[1] = link; + + link = &_graphLinks[2]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + _imageSubGraph.links[2] = link; + _irSubGraph.links[2] = link; + _image_irSubGraph.links[2] = link; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[3] = link; + _irSubGraph.links[3] = link; + _image_irSubGraph.links[3] = link; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[4] = link; + _irSubGraph.links[4] = link; + _image_irSubGraph.links[4] = link; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[5] = link; + _irSubGraph.links[5] = link; + _image_irSubGraph.links[5] = link; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[6] = link; + _irSubGraph.links[6] = link; + _image_irSubGraph.links[6] = link; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[7] = link; + _irSubGraph.links[7] = link; + _image_irSubGraph.links[7] = link; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _imageSubGraph.links[8] = link; + _irSubGraph.links[8] = link; + _image_irSubGraph.links[8] = link; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _imageSubGraph.links[9] = link; + _irSubGraph.links[9] = link; + _image_irSubGraph.links[9] = link; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _imageSubGraph.links[10] = link; + _irSubGraph.links[10] = link; + _image_irSubGraph.links[10] = link; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[11] = link; + _irSubGraph.links[11] = link; + _image_irSubGraph.links[11] = link; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[12] = link; + _irSubGraph.links[12] = link; + _image_irSubGraph.links[12] = link; + + link = &_graphLinks[13]; + link->src = GraphElementType::LscBufferIr; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + _irSubGraph.links[13] = link; + _image_irSubGraph.links[13] = link; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 14; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + _irSubGraph.links[14] = link; + _image_irSubGraph.links[14] = link; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::IrAeOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[15] = link; + _image_irSubGraph.links[15] = link; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::IrAfStdOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[16] = link; + _image_irSubGraph.links[16] = link; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::IrAwbStdOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[17] = link; + _image_irSubGraph.links[17] = link; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::IrAwbSatOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[18] = link; + _image_irSubGraph.links[18] = link; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _irSubGraph.links[19] = link; + _image_irSubGraph.links[19] = link; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _irSubGraph.links[20] = link; + _image_irSubGraph.links[20] = link; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _irSubGraph.links[21] = link; + _image_irSubGraph.links[21] = link; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::IrMp; + link->type = LinkType::Node2Sink; + _irSubGraph.links[22] = link; + _image_irSubGraph.links[22] = link; + + for (uint8_t i = 0; i < 23; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffRgbIrNoGmvWithTnrNoSapOuterNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + _irSubGraph.isysOuterNode = &_isysOuterNode; + _irSubGraph.lbffRgbIrNoGmvWithTnrNoSapOuterNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + _irSubGraph.lbffRgbIrIrNoGmvWithTnrNoSapOuterNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + _image_irSubGraph.isysOuterNode = &_isysOuterNode; + _image_irSubGraph.lbffRgbIrNoGmvWithTnrNoSapOuterNode = &_lbffRgbIrNoGmvWithTnrNoSapOuterNode; + _image_irSubGraph.lbffRgbIrIrNoGmvWithTnrNoSapOuterNode = + &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + + // choose the selected sub graph + if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.video != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.stills != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.thumbnail != + static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == + static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.previewIr == + static_cast(HwSink::Disconnected))) { + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffRgbIrNoGmvWithTnrNoSapOuterNode->contextId = 1; + } else if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.video == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.stills == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.thumbnail == + static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == + static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.previewIr != + static_cast(HwSink::Disconnected))) { + _selectedGraphTopology = &_irSubGraph; + + // logical node IDs + _irSubGraph.isysOuterNode->contextId = 0; + _irSubGraph.lbffRgbIrNoGmvWithTnrNoSapOuterNode->contextId = 1; + _irSubGraph.lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->contextId = 2; + } else if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.video != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.stills != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.thumbnail != + static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == + static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.previewIr != + static_cast(HwSink::Disconnected))) { + _selectedGraphTopology = &_image_irSubGraph; + + // logical node IDs + _image_irSubGraph.isysOuterNode->contextId = 0; + _image_irSubGraph.lbffRgbIrNoGmvWithTnrNoSapOuterNode->contextId = 1; + _image_irSubGraph.lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->contextId = 2; + } else { + STATIC_GRAPH_LOG("Didn't found a matching sub graph for the selected virtual sinks."); + } + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100022::~StaticGraph100022() {} + +StaticGraphStatus imageSubGraphTopology100022::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffRgbIrNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrNoGmvWithTnrNoSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[11]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrNoGmvWithTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[12]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrNoGmvWithTnrNoSapInnerOptions |= noDp; + } + // always active private inner options + lbffRgbIrNoGmvWithTnrNoSapInnerOptions |= (noIr); + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffRgbIrNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = + !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[4]->isActive = + !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[5]->isActive = + !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[6]->isActive = + !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[7]->isActive = + !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[11]->isActive = + !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & + noMp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[12]->isActive = + !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & + noDp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 13; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[8]->isActive = + (lbffRgbIrNoGmvWithTnrNoSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> + // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[9]->isActive = + (lbffRgbIrNoGmvWithTnrNoSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> + // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[10]->isActive = + (lbffRgbIrNoGmvWithTnrNoSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> + // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus irSubGraphTopology100022::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags irPublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.irInnerOptions); + + /* + * Setting Node lbffRgbIrNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrNoGmvWithTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrNoGmvWithTnrNoSapInnerOptions |= (noPdaf); + // active public options according to sink mapping + if (subGraphLinks[11]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrNoGmvWithTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[12]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrNoGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Setting Node lbffRgbIrIrNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noDp | noIr); + // active public options according to sink mapping + if (subGraphLinks[22]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions |= noMp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffRgbIrNoGmvWithTnrNoSapInnerOptions); + lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = + !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[4]->isActive = + !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[5]->isActive = + !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[6]->isActive = + !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[7]->isActive = + !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[11]->isActive = + !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & + noMp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[12]->isActive = + !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & + noDp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[15]->isActive = + !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ir_ae_out + subGraphLinks[16]->isActive = !( + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> ir_af_std_out + subGraphLinks[17]->isActive = + !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output + // -> ir_awb_std_out + subGraphLinks[18]->isActive = + !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output + // -> ir_awb_sat_out + subGraphLinks[22]->isActive = + !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & + noMp); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> ir_mp + + /* + * Link enablement by private inner options + */ + subGraphLinks[14]->isActive = + !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & + noIr); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_ir_output -> + // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_main_data_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 23; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[8]->isActive = + (lbffRgbIrNoGmvWithTnrNoSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> + // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[9]->isActive = + (lbffRgbIrNoGmvWithTnrNoSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> + // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[10]->isActive = + (lbffRgbIrNoGmvWithTnrNoSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> + // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + subGraphLinks[19]->isActive = + (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> + // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[20]->isActive = + (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> + // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[21]->isActive = + (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output + // -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus image_irSubGraphTopology100022::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + InnerNodeOptionsFlags irPublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.irInnerOptions); + + /* + * Setting Node lbffRgbIrNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrNoGmvWithTnrNoSapInnerOptions = None; + // active public inner options according to sink mapping + if (subGraphLinks[11]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrNoGmvWithTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[12]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrNoGmvWithTnrNoSapInnerOptions |= noDp; + } + // combine inner options for the node common sub graphs + lbffRgbIrNoGmvWithTnrNoSapInnerOptions |= imagePublicInnerNodeConfiguration; + lbffRgbIrNoGmvWithTnrNoSapInnerOptions |= irPublicInnerNodeConfiguration; + + /* + * Setting Node lbffRgbIrIrNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noDp | noIr); + // active public options according to sink mapping + if (subGraphLinks[22]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions |= noMp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffRgbIrNoGmvWithTnrNoSapInnerOptions); + lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = + !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[4]->isActive = + !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[5]->isActive = + !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[6]->isActive = + !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[7]->isActive = + !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[11]->isActive = + !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & + noMp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[12]->isActive = + !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & + noDp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[15]->isActive = + !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ir_ae_out + subGraphLinks[16]->isActive = !( + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> ir_af_std_out + subGraphLinks[17]->isActive = + !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output + // -> ir_awb_std_out + subGraphLinks[18]->isActive = + !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output + // -> ir_awb_sat_out + subGraphLinks[22]->isActive = + !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & + noMp); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> ir_mp + + /* + * Link enablement by private inner options + */ + subGraphLinks[14]->isActive = + !(lbffRgbIrNoGmvWithTnrNoSapInnerOptions & + noIr); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_ir_output -> + // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_main_data_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 23; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[8]->isActive = + (lbffRgbIrNoGmvWithTnrNoSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> + // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[9]->isActive = + (lbffRgbIrNoGmvWithTnrNoSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> + // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[10]->isActive = + (lbffRgbIrNoGmvWithTnrNoSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> + // lbff_RgbIr_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + subGraphLinks[19]->isActive = + (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> + // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[20]->isActive = + (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> + // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[21]->isActive = + (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output + // -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100023 + */ +StaticGraph100023::StaticGraph100023(GraphConfiguration100023* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100023, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration), + _irSubGraph(_sinkMappingConfiguration), + _image_irSubGraph(_sinkMappingConfiguration) { + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffRgbIrWithGmvWithTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffRgbIrWithGmvWithTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + _lbffRgbIrIrNoGmvWithTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffRgbIrIrNoGmvWithTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + _imageSubGraph.links[0] = link; + _irSubGraph.links[0] = link; + _image_irSubGraph.links[0] = link; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + _imageSubGraph.links[1] = link; + _irSubGraph.links[1] = link; + _image_irSubGraph.links[1] = link; + + link = &_graphLinks[2]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + _imageSubGraph.links[2] = link; + _irSubGraph.links[2] = link; + _image_irSubGraph.links[2] = link; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[3] = link; + _irSubGraph.links[3] = link; + _image_irSubGraph.links[3] = link; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[4] = link; + _irSubGraph.links[4] = link; + _image_irSubGraph.links[4] = link; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[5] = link; + _irSubGraph.links[5] = link; + _image_irSubGraph.links[5] = link; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[6] = link; + _irSubGraph.links[6] = link; + _image_irSubGraph.links[6] = link; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[7] = link; + _irSubGraph.links[7] = link; + _image_irSubGraph.links[7] = link; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _imageSubGraph.links[8] = link; + _irSubGraph.links[8] = link; + _image_irSubGraph.links[8] = link; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[9] = link; + _irSubGraph.links[9] = link; + _image_irSubGraph.links[9] = link; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _imageSubGraph.links[10] = link; + _irSubGraph.links[10] = link; + _image_irSubGraph.links[10] = link; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _imageSubGraph.links[11] = link; + _irSubGraph.links[11] = link; + _image_irSubGraph.links[11] = link; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _imageSubGraph.links[12] = link; + _irSubGraph.links[12] = link; + _image_irSubGraph.links[12] = link; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[13] = link; + _irSubGraph.links[13] = link; + _image_irSubGraph.links[13] = link; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[14] = link; + _irSubGraph.links[14] = link; + _image_irSubGraph.links[14] = link; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + _imageSubGraph.links[15] = link; + _image_irSubGraph.links[15] = link; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + _imageSubGraph.links[16] = link; + _image_irSubGraph.links[16] = link; + + link = &_graphLinks[17]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[17] = link; + _image_irSubGraph.links[17] = link; + + link = &_graphLinks[18]; + link->src = GraphElementType::LscBufferIr; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + _irSubGraph.links[15] = link; + _image_irSubGraph.links[18] = link; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 14; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + _irSubGraph.links[16] = link; + _image_irSubGraph.links[19] = link; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::IrAeOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[17] = link; + _image_irSubGraph.links[20] = link; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::IrAfStdOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[18] = link; + _image_irSubGraph.links[21] = link; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::IrAwbStdOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[19] = link; + _image_irSubGraph.links[22] = link; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::IrAwbSatOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[20] = link; + _image_irSubGraph.links[23] = link; + + link = &_graphLinks[24]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _irSubGraph.links[21] = link; + _image_irSubGraph.links[24] = link; + + link = &_graphLinks[25]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _irSubGraph.links[22] = link; + _image_irSubGraph.links[25] = link; + + link = &_graphLinks[26]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _irSubGraph.links[23] = link; + _image_irSubGraph.links[26] = link; + + link = &_graphLinks[27]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::IrMp; + link->type = LinkType::Node2Sink; + _irSubGraph.links[24] = link; + _image_irSubGraph.links[27] = link; + + for (uint8_t i = 0; i < 28; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffRgbIrWithGmvWithTnrNoSapOuterNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + _irSubGraph.isysOuterNode = &_isysOuterNode; + _irSubGraph.lbffRgbIrWithGmvWithTnrNoSapOuterNode = &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + _irSubGraph.lbffRgbIrIrNoGmvWithTnrNoSapOuterNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + _image_irSubGraph.isysOuterNode = &_isysOuterNode; + _image_irSubGraph.lbffRgbIrWithGmvWithTnrNoSapOuterNode = + &_lbffRgbIrWithGmvWithTnrNoSapOuterNode; + _image_irSubGraph.swGdcOuterNode = &_swGdcOuterNode; + _image_irSubGraph.lbffRgbIrIrNoGmvWithTnrNoSapOuterNode = + &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + + // choose the selected sub graph + if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.video != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.stills != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.thumbnail != + static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == + static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.previewIr == + static_cast(HwSink::Disconnected))) { + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffRgbIrWithGmvWithTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + } else if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.video == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.stills == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.thumbnail == + static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == + static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.previewIr != + static_cast(HwSink::Disconnected))) { + _selectedGraphTopology = &_irSubGraph; + + // logical node IDs + _irSubGraph.isysOuterNode->contextId = 0; + _irSubGraph.lbffRgbIrWithGmvWithTnrNoSapOuterNode->contextId = 1; + _irSubGraph.lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->contextId = 2; + } else if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.video != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.stills != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.thumbnail != + static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == + static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.previewIr != + static_cast(HwSink::Disconnected))) { + _selectedGraphTopology = &_image_irSubGraph; + + // logical node IDs + _image_irSubGraph.isysOuterNode->contextId = 0; + _image_irSubGraph.lbffRgbIrWithGmvWithTnrNoSapOuterNode->contextId = 1; + _image_irSubGraph.swGdcOuterNode->contextId = 2; + _image_irSubGraph.lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->contextId = 3; + } else { + STATIC_GRAPH_LOG("Didn't found a matching sub graph for the selected virtual sinks."); + } + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100023::~StaticGraph100023() {} + +StaticGraphStatus imageSubGraphTopology100023::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffRgbIrWithGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrWithGmvWithTnrNoSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrWithGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrWithGmvWithTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrWithGmvWithTnrNoSapInnerOptions |= noDp; + } + // always active private inner options + lbffRgbIrWithGmvWithTnrNoSapInnerOptions |= (noIr); + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrWithGmvWithTnrNoSapOuterNode->setInnerNode(lbffRgbIrWithGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = + !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[4]->isActive = + !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[5]->isActive = + !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[6]->isActive = + !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[7]->isActive = + !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[13]->isActive = + !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & + noMp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[15]->isActive = + !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & noMp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[14]->isActive = + !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & + noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[16]->isActive = + !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output + // -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 18; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[8]->isActive = + (lbffRgbIrWithGmvWithTnrNoSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_gmv_feature_output -> + // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_gmv_input + subGraphLinks[10]->isActive = + (lbffRgbIrWithGmvWithTnrNoSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_blend_output -> + // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[11]->isActive = + (lbffRgbIrWithGmvWithTnrNoSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_bc_output -> + // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[12]->isActive = + (lbffRgbIrWithGmvWithTnrNoSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> + // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus irSubGraphTopology100023::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags irPublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.irInnerOptions); + + /* + * Setting Node lbffRgbIrWithGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrWithGmvWithTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrWithGmvWithTnrNoSapInnerOptions |= (noPdaf); + // active public options according to sink mapping + if (subGraphLinks[13]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrWithGmvWithTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[14]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrWithGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Setting Node lbffRgbIrIrNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noDp | noIr); + // active public options according to sink mapping + if (subGraphLinks[24]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions |= noMp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrWithGmvWithTnrNoSapOuterNode->setInnerNode(lbffRgbIrWithGmvWithTnrNoSapInnerOptions); + lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = + !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[4]->isActive = + !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[5]->isActive = + !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[6]->isActive = + !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[7]->isActive = + !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[13]->isActive = + !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & + noMp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[14]->isActive = + !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & + noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[17]->isActive = + !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ir_ae_out + subGraphLinks[18]->isActive = !( + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> ir_af_std_out + subGraphLinks[19]->isActive = + !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output + // -> ir_awb_std_out + subGraphLinks[20]->isActive = + !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output + // -> ir_awb_sat_out + subGraphLinks[24]->isActive = + !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & + noMp); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> ir_mp + + /* + * Link enablement by private inner options + */ + subGraphLinks[16]->isActive = + !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & + noIr); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ir_output -> + // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_main_data_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 25; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[8]->isActive = + (lbffRgbIrWithGmvWithTnrNoSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_gmv_feature_output -> + // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_gmv_input + subGraphLinks[10]->isActive = + (lbffRgbIrWithGmvWithTnrNoSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_blend_output -> + // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[11]->isActive = + (lbffRgbIrWithGmvWithTnrNoSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_bc_output -> + // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[12]->isActive = + (lbffRgbIrWithGmvWithTnrNoSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> + // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + subGraphLinks[21]->isActive = + (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> + // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[22]->isActive = + (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> + // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[23]->isActive = + (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output + // -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus image_irSubGraphTopology100023::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + InnerNodeOptionsFlags irPublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.irInnerOptions); + + /* + * Setting Node lbffRgbIrWithGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrWithGmvWithTnrNoSapInnerOptions = None; + // active public inner options according to sink mapping + if (subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrWithGmvWithTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrWithGmvWithTnrNoSapInnerOptions |= noDp; + } + // combine inner options for the node common sub graphs + lbffRgbIrWithGmvWithTnrNoSapInnerOptions |= imagePublicInnerNodeConfiguration; + lbffRgbIrWithGmvWithTnrNoSapInnerOptions |= irPublicInnerNodeConfiguration; + + /* + * Setting Node lbffRgbIrIrNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noDp | noIr); + // active public options according to sink mapping + if (subGraphLinks[27]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions |= noMp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrWithGmvWithTnrNoSapOuterNode->setInnerNode(lbffRgbIrWithGmvWithTnrNoSapInnerOptions); + lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = + !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[4]->isActive = + !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[5]->isActive = + !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[6]->isActive = + !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[7]->isActive = + !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[13]->isActive = + !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & + noMp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[15]->isActive = + !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & noMp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[14]->isActive = + !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & + noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[16]->isActive = + !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[20]->isActive = + !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ir_ae_out + subGraphLinks[21]->isActive = !( + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> ir_af_std_out + subGraphLinks[22]->isActive = + !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output + // -> ir_awb_std_out + subGraphLinks[23]->isActive = + !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output + // -> ir_awb_sat_out + subGraphLinks[27]->isActive = + !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & + noMp); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> ir_mp + + /* + * Link enablement by private inner options + */ + subGraphLinks[19]->isActive = + !(lbffRgbIrWithGmvWithTnrNoSapInnerOptions & + noIr); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_ir_output -> + // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_main_data_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 28; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[8]->isActive = + (lbffRgbIrWithGmvWithTnrNoSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_gmv_feature_output -> + // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_gmv_input + subGraphLinks[10]->isActive = + (lbffRgbIrWithGmvWithTnrNoSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_blend_output -> + // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[11]->isActive = + (lbffRgbIrWithGmvWithTnrNoSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_bc_output -> + // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[12]->isActive = + (lbffRgbIrWithGmvWithTnrNoSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> + // lbff_RgbIr_WithGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + subGraphLinks[24]->isActive = + (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> + // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[25]->isActive = + (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> + // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[26]->isActive = + (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output + // -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100024 + */ +StaticGraph100024::StaticGraph100024(GraphConfiguration100024* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100024, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _lbffBayerNoGmvNoTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffBayerNoGmvNoTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->destNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->destNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 8; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.lbffBayerNoGmvNoTnrNoSapOuterNode = &_lbffBayerNoGmvNoTnrNoSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.lbffBayerNoGmvNoTnrNoSapOuterNode->contextId = 0; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100024::~StaticGraph100024() {} + +StaticGraphStatus imageSubGraphTopology100024::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerNoGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerNoGmvNoTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[6]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerNoGmvNoTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[7]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerNoGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffBayerNoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[2]->isActive = + !(lbffBayerNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Bayer_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[3]->isActive = + !(lbffBayerNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Bayer_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[4]->isActive = + !(lbffBayerNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Bayer_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[5]->isActive = + !(lbffBayerNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Bayer_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[6]->isActive = + !(lbffBayerNoGmvNoTnrNoSapInnerOptions & + noMp); // lbff_Bayer_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[7]->isActive = + !(lbffBayerNoGmvNoTnrNoSapInnerOptions & + noDp); // lbff_Bayer_NoGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 8; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100040 + */ +StaticGraph100040::StaticGraph100040(GraphConfiguration100040* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100040, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _lbffBayerWithGmvNoTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffBayerWithGmvNoTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->destNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->destNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->destNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 13; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.lbffBayerWithGmvNoTnrNoSapOuterNode = &_lbffBayerWithGmvNoTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.lbffBayerWithGmvNoTnrNoSapOuterNode->contextId = 0; + _imageSubGraph.swGdcOuterNode->contextId = 1; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100040::~StaticGraph100040() {} + +StaticGraphStatus imageSubGraphTopology100040::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerWithGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerWithGmvNoTnrNoSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerWithGmvNoTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[8]->linkConfiguration->bufferSize == 0 && + subGraphLinks[10]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerWithGmvNoTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[9]->linkConfiguration->bufferSize == 0 && + subGraphLinks[11]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerWithGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerWithGmvNoTnrNoSapOuterNode->setInnerNode(lbffBayerWithGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[2]->isActive = + !(lbffBayerWithGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[3]->isActive = + !(lbffBayerWithGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[4]->isActive = + !(lbffBayerWithGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[5]->isActive = + !(lbffBayerWithGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[8]->isActive = + !(lbffBayerWithGmvNoTnrNoSapInnerOptions & + noMp); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[10]->isActive = + !(lbffBayerWithGmvNoTnrNoSapInnerOptions & noMp); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[9]->isActive = + !(lbffBayerWithGmvNoTnrNoSapInnerOptions & + noDp); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[11]->isActive = + !(lbffBayerWithGmvNoTnrNoSapInnerOptions & noDp); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output + // -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 13; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[6]->isActive = + (lbffBayerWithGmvNoTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_gmv_feature_output + // -> lbff_Bayer_WithGmv_NoTnr_NoSap:terminal_connect_gmv_input + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100041 + */ +StaticGraph100041::StaticGraph100041(GraphConfiguration100041* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100041, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _lbffBayerWithGmvWithTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffBayerWithGmvWithTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->destNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[15]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 16; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.lbffBayerWithGmvWithTnrNoSapOuterNode = &_lbffBayerWithGmvWithTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.lbffBayerWithGmvWithTnrNoSapOuterNode->contextId = 0; + _imageSubGraph.swGdcOuterNode->contextId = 1; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100041::~StaticGraph100041() {} + +StaticGraphStatus imageSubGraphTopology100041::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerWithGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerWithGmvWithTnrNoSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerWithGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[11]->linkConfiguration->bufferSize == 0 && + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerWithGmvWithTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerWithGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerWithGmvWithTnrNoSapOuterNode->setInnerNode(lbffBayerWithGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[2]->isActive = + !(lbffBayerWithGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[3]->isActive = + !(lbffBayerWithGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[4]->isActive = + !(lbffBayerWithGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[5]->isActive = + !(lbffBayerWithGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[11]->isActive = + !(lbffBayerWithGmvWithTnrNoSapInnerOptions & + noMp); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[13]->isActive = + !(lbffBayerWithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[12]->isActive = + !(lbffBayerWithGmvWithTnrNoSapInnerOptions & + noDp); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[14]->isActive = + !(lbffBayerWithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output + // -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 16; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[6]->isActive = + (lbffBayerWithGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_gmv_feature_output + // -> lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_gmv_input + subGraphLinks[8]->isActive = + (lbffBayerWithGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_blend_output -> + // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[9]->isActive = + (lbffBayerWithGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_bc_output -> + // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[10]->isActive = + (lbffBayerWithGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output + // -> lbff_Bayer_WithGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100042 + */ +StaticGraph100042::StaticGraph100042(GraphConfiguration100042* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100042, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _lbffBayerNoGmvWithTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffBayerNoGmvWithTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->destNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 11; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.lbffBayerNoGmvWithTnrNoSapOuterNode = &_lbffBayerNoGmvWithTnrNoSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.lbffBayerNoGmvWithTnrNoSapOuterNode->contextId = 0; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100042::~StaticGraph100042() {} + +StaticGraphStatus imageSubGraphTopology100042::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerNoGmvWithTnrNoSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[9]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerNoGmvWithTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[10]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerNoGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffBayerNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[2]->isActive = + !(lbffBayerNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[3]->isActive = + !(lbffBayerNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[4]->isActive = + !(lbffBayerNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[5]->isActive = + !(lbffBayerNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[9]->isActive = + !(lbffBayerNoGmvWithTnrNoSapInnerOptions & + noMp); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[10]->isActive = + !(lbffBayerNoGmvWithTnrNoSapInnerOptions & + noDp); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 11; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[6]->isActive = + (lbffBayerNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> + // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[7]->isActive = + (lbffBayerNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> + // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[8]->isActive = + (lbffBayerNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output + // -> lbff_Bayer_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100027 + */ +StaticGraph100027::StaticGraph100027(GraphConfiguration100027* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100027, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffIrNoGmvNoTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffIrNoGmvNoTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffIrNoGmvNoTnrNoSap; + link->destNode = &_lbffIrNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffIrNoGmvNoTnrNoSap; + link->destNode = &_lbffIrNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 9; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffIrNoGmvNoTnrNoSapOuterNode = &_lbffIrNoGmvNoTnrNoSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffIrNoGmvNoTnrNoSapOuterNode->contextId = 1; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100027::~StaticGraph100027() {} + +StaticGraphStatus imageSubGraphTopology100027::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffIrNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffIrNoGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffIrNoGmvNoTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[7]->linkConfiguration->bufferSize == 0 && true) { + lbffIrNoGmvNoTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[8]->linkConfiguration->bufferSize == 0 && true) { + lbffIrNoGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffIrNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffIrNoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = + !(lbffIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[4]->isActive = + !(lbffIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Ir_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[5]->isActive = + !(lbffIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[6]->isActive = + !(lbffIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[7]->isActive = + !(lbffIrNoGmvNoTnrNoSapInnerOptions & + noMp); // lbff_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[8]->isActive = + !(lbffIrNoGmvNoTnrNoSapInnerOptions & + noDp); // lbff_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 9; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100028 + */ +StaticGraph100028::StaticGraph100028(GraphConfiguration100028* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100028, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffIrWithGmvNoTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffIrWithGmvNoTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffIrWithGmvNoTnrNoSap; + link->destNode = &_lbffIrWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffIrWithGmvNoTnrNoSap; + link->destNode = &_lbffIrWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffIrWithGmvNoTnrNoSap; + link->destNode = &_lbffIrWithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffIrWithGmvNoTnrNoSap; + link->srcNode = &_lbffIrWithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 14; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffIrWithGmvNoTnrNoSapOuterNode = &_lbffIrWithGmvNoTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffIrWithGmvNoTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100028::~StaticGraph100028() {} + +StaticGraphStatus imageSubGraphTopology100028::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffIrWithGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffIrWithGmvNoTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffIrWithGmvNoTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[9]->linkConfiguration->bufferSize == 0 && + subGraphLinks[11]->linkConfiguration->bufferSize == 0 && true) { + lbffIrWithGmvNoTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[10]->linkConfiguration->bufferSize == 0 && + subGraphLinks[12]->linkConfiguration->bufferSize == 0 && true) { + lbffIrWithGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffIrWithGmvNoTnrNoSapOuterNode->setInnerNode(lbffIrWithGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = + !(lbffIrWithGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Ir_WithGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[4]->isActive = + !(lbffIrWithGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Ir_WithGmv_NoTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[5]->isActive = + !(lbffIrWithGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Ir_WithGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[6]->isActive = + !(lbffIrWithGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Ir_WithGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[9]->isActive = + !(lbffIrWithGmvNoTnrNoSapInnerOptions & + noMp); // lbff_Ir_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[11]->isActive = + !(lbffIrWithGmvNoTnrNoSapInnerOptions & noMp); // lbff_Ir_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[10]->isActive = + !(lbffIrWithGmvNoTnrNoSapInnerOptions & + noDp); // lbff_Ir_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[12]->isActive = + !(lbffIrWithGmvNoTnrNoSapInnerOptions & noDp); // lbff_Ir_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output + // -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 14; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[7]->isActive = + (lbffIrWithGmvNoTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Ir_WithGmv_NoTnr_NoSap:terminal_connect_gmv_feature_output -> + // lbff_Ir_WithGmv_NoTnr_NoSap:terminal_connect_gmv_input + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100029 + */ +StaticGraph100029::StaticGraph100029(GraphConfiguration100029* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100029, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffIrNoGmvWithTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffIrNoGmvWithTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffIrNoGmvWithTnrNoSap; + link->destNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffIrNoGmvWithTnrNoSap; + link->destNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffIrNoGmvWithTnrNoSap; + link->destNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffIrNoGmvWithTnrNoSap; + link->destNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffIrNoGmvWithTnrNoSap; + link->destNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 12; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffIrNoGmvWithTnrNoSapOuterNode = &_lbffIrNoGmvWithTnrNoSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffIrNoGmvWithTnrNoSapOuterNode->contextId = 1; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100029::~StaticGraph100029() {} + +StaticGraphStatus imageSubGraphTopology100029::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffIrNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffIrNoGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffIrNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[10]->linkConfiguration->bufferSize == 0 && true) { + lbffIrNoGmvWithTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[11]->linkConfiguration->bufferSize == 0 && true) { + lbffIrNoGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffIrNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffIrNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = + !(lbffIrNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[4]->isActive = + !(lbffIrNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Ir_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[5]->isActive = + !(lbffIrNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[6]->isActive = + !(lbffIrNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[10]->isActive = + !(lbffIrNoGmvWithTnrNoSapInnerOptions & + noMp); // lbff_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[11]->isActive = + !(lbffIrNoGmvWithTnrNoSapInnerOptions & + noDp); // lbff_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 12; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[7]->isActive = + (lbffIrNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> + // lbff_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[8]->isActive = + (lbffIrNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> + // lbff_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[9]->isActive = + (lbffIrNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Ir_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output -> + // lbff_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100030 + */ +StaticGraph100030::StaticGraph100030(GraphConfiguration100030* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100030, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffIrWithGmvWithTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffIrWithGmvWithTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->destNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->destNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->destNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->destNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->destNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->destNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffIrWithGmvWithTnrNoSap; + link->srcNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[16]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 17; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffIrWithGmvWithTnrNoSapOuterNode = &_lbffIrWithGmvWithTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffIrWithGmvWithTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100030::~StaticGraph100030() {} + +StaticGraphStatus imageSubGraphTopology100030::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffIrWithGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffIrWithGmvWithTnrNoSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffIrWithGmvWithTnrNoSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && true) { + lbffIrWithGmvWithTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[13]->linkConfiguration->bufferSize == 0 && + subGraphLinks[15]->linkConfiguration->bufferSize == 0 && true) { + lbffIrWithGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffIrWithGmvWithTnrNoSapOuterNode->setInnerNode(lbffIrWithGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[3]->isActive = + !(lbffIrWithGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[4]->isActive = + !(lbffIrWithGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[5]->isActive = + !(lbffIrWithGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[6]->isActive = + !(lbffIrWithGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[12]->isActive = + !(lbffIrWithGmvWithTnrNoSapInnerOptions & + noMp); // lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[14]->isActive = + !(lbffIrWithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[13]->isActive = + !(lbffIrWithGmvWithTnrNoSapInnerOptions & + noDp); // lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[15]->isActive = + !(lbffIrWithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output + // -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 17; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[7]->isActive = + (lbffIrWithGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_gmv_feature_output + // -> lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_gmv_input + subGraphLinks[9]->isActive = + (lbffIrWithGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_blend_output -> + // lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[10]->isActive = + (lbffIrWithGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_bc_output -> + // lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[11]->isActive = + (lbffIrWithGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output + // -> lbff_Ir_WithGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100031 + */ +StaticGraph100031::StaticGraph100031(GraphConfiguration100031* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100031, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 19; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 11; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode = + &_lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode->contextId = 1; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100031::~StaticGraph100031() {} + +StaticGraphStatus imageSubGraphTopology100031::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if (subGraphLinks[9]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[10]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode->setInnerNode( + lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[5]->isActive = + !(lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[6]->isActive = + !(lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output + // -> af_std_out + subGraphLinks[7]->isActive = + !(lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output + // -> awb_std_out + subGraphLinks[8]->isActive = + !(lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output + // -> awb_sat_out + subGraphLinks[3]->isActive = + !(lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapInnerOptions & noPdaf); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_NoSap:terminal_connect_pdaf_output + // -> pdaf_out + subGraphLinks[9]->isActive = + !(lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output + // -> image_mp + subGraphLinks[10]->isActive = + !(lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output + // -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 11; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[2]->isActive = + (lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapInnerOptions & (no3A | noMp | noDp | noIr)) != + (no3A | noMp | noDp | + noIr); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_NoSap:terminal_connect_dpc_pdaf_output -> + // lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_NoSap:terminal_connect_pdaf_data_input + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100032 + */ +StaticGraph100032::StaticGraph100032(GraphConfiguration100032* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100032, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 19; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[15]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 16; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode = + &_lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100032::~StaticGraph100032() {} + +StaticGraphStatus imageSubGraphTopology100032::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if (subGraphLinks[11]->linkConfiguration->bufferSize == 0 && + subGraphLinks[13]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[12]->linkConfiguration->bufferSize == 0 && + subGraphLinks[14]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode->setInnerNode( + lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[5]->isActive = !( + lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions & + no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[6]->isActive = + !(lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_NoSap:terminal_connect_af_std_output + // -> af_std_out + subGraphLinks[7]->isActive = + !(lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_NoSap:terminal_connect_awb_std_output + // -> awb_std_out + subGraphLinks[8]->isActive = + !(lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_NoSap:terminal_connect_awb_sat_output + // -> awb_sat_out + subGraphLinks[3]->isActive = + !(lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions & noPdaf); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_NoSap:terminal_connect_pdaf_output + // -> pdaf_out + subGraphLinks[11]->isActive = + !(lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output + // -> image_mp + subGraphLinks[13]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions & + noMp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[12]->isActive = + !(lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output + // -> image_dp + subGraphLinks[14]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions & + noDp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_NoSap:terminal_connect_ofs_dp_output + // -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 16; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[2]->isActive = + (lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions & (no3A | noMp | noDp | noIr)) != + (no3A | noMp | noDp | + noIr); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_NoSap:terminal_connect_dpc_pdaf_output -> + // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_NoSap:terminal_connect_pdaf_data_input + subGraphLinks[9]->isActive = + (lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_NoSap:terminal_connect_gmv_feature_output + // -> lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_NoSap:terminal_connect_gmv_input + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100033 + */ +StaticGraph100033::StaticGraph100033(GraphConfiguration100033* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100033, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 19; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 14; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode = + &_lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode->contextId = 1; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100033::~StaticGraph100033() {} + +StaticGraphStatus imageSubGraphTopology100033::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if (subGraphLinks[12]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[13]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode->setInnerNode( + lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[5]->isActive = !( + lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ae_out + subGraphLinks[6]->isActive = + !(lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output + // -> af_std_out + subGraphLinks[7]->isActive = + !(lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output + // -> awb_std_out + subGraphLinks[8]->isActive = + !(lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output + // -> awb_sat_out + subGraphLinks[3]->isActive = + !(lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & noPdaf); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_pdaf_output + // -> pdaf_out + subGraphLinks[12]->isActive = + !(lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output + // -> image_mp + subGraphLinks[13]->isActive = + !(lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output + // -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 14; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[2]->isActive = + (lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & (no3A | noMp | noDp | noIr)) != + (no3A | noMp | noDp | + noIr); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_dpc_pdaf_output -> + // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_pdaf_data_input + subGraphLinks[9]->isActive = + (lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> + // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[10]->isActive = + (lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> + // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[11]->isActive = + (lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output + // -> lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100034 + */ +StaticGraph100034::StaticGraph100034(GraphConfiguration100034* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100034, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + _lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 19; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[3]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[7]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[18]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 19; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysOuterNode = &_isysOuterNode; + _imageSubGraph.lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode = + &_lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysOuterNode->contextId = 0; + _imageSubGraph.lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode->contextId = 1; + _imageSubGraph.swGdcOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100034::~StaticGraph100034() {} + +StaticGraphStatus imageSubGraphTopology100034::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions |= (noIr); + // active public options according to sink mapping + if (subGraphLinks[14]->linkConfiguration->bufferSize == 0 && + subGraphLinks[16]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions |= noMp; + } + if (subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode->setInnerNode( + lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[5]->isActive = + !(lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_ae_output + // -> ae_out + subGraphLinks[6]->isActive = + !(lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_af_std_output + // -> af_std_out + subGraphLinks[7]->isActive = + !(lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_awb_std_output + // -> awb_std_out + subGraphLinks[8]->isActive = + !(lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_awb_sat_output + // -> awb_sat_out + subGraphLinks[3]->isActive = + !(lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions & noPdaf); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_pdaf_output + // -> pdaf_out + subGraphLinks[14]->isActive = + !(lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions & noMp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output + // -> image_mp + subGraphLinks[16]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions & + noMp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[15]->isActive = + !(lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions & noDp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output + // -> image_dp + subGraphLinks[17]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions & + noDp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_ofs_dp_output + // -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 19; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[2]->isActive = + (lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions & (no3A | noMp | noDp | noIr)) != + (no3A | noMp | noDp | + noIr); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_dpc_pdaf_output + // -> + // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_pdaf_data_input + subGraphLinks[9]->isActive = + (lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_gmv_feature_output + // -> lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_gmv_input + subGraphLinks[11]->isActive = + (lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_blend_output -> + // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[12]->isActive = + (lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_bc_output -> + // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[13]->isActive = + (lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output + // -> lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100100 + */ +StaticGraph100100::StaticGraph100100(GraphConfiguration100100* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100100, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffBayerNoGmvNoTnrWithSapOuterNode.Init( + &_graphConfiguration.lbffBayerNoGmvNoTnrWithSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerNoGmvNoTnrWithSap; + link->destNode = &_lbffBayerNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerNoGmvNoTnrWithSap; + link->destNode = &_lbffBayerNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerNoGmvNoTnrWithSap; + link->destNode = &_lbffBayerNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerNoGmvNoTnrWithSap; + link->destNode = &_lbffBayerNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerNoGmvNoTnrWithSap; + link->destNode = &_lbffBayerNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerNoGmvNoTnrWithSap; + link->destNode = &_lbffBayerNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerNoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 15; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerNoGmvNoTnrWithSapOuterNode = &_lbffBayerNoGmvNoTnrWithSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerNoGmvNoTnrWithSapOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100100::~StaticGraph100100() {} + +StaticGraphStatus imageSubGraphTopology100100::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerNoGmvNoTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerNoGmvNoTnrWithSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerNoGmvNoTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[13]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerNoGmvNoTnrWithSapInnerOptions |= noMp; + } + if (subGraphLinks[14]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerNoGmvNoTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerNoGmvNoTnrWithSapOuterNode->setInnerNode(lbffBayerNoGmvNoTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[9]->isActive = + !(lbffBayerNoGmvNoTnrWithSapInnerOptions & + no3A); // lbff_Bayer_NoGmv_NoTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[10]->isActive = + !(lbffBayerNoGmvNoTnrWithSapInnerOptions & + no3A); // lbff_Bayer_NoGmv_NoTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[11]->isActive = + !(lbffBayerNoGmvNoTnrWithSapInnerOptions & + no3A); // lbff_Bayer_NoGmv_NoTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[12]->isActive = + !(lbffBayerNoGmvNoTnrWithSapInnerOptions & + no3A); // lbff_Bayer_NoGmv_NoTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[13]->isActive = + !(lbffBayerNoGmvNoTnrWithSapInnerOptions & + noMp); // lbff_Bayer_NoGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[14]->isActive = + !(lbffBayerNoGmvNoTnrWithSapInnerOptions & + noDp); // lbff_Bayer_NoGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 15; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100100::updateSegmentAwareKernels() { + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[4]->isActive == false) { + lbffBayerNoGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerNoGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerNoGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= + 0x60000; // Run kernel ids 17 (ifd_segmap_bnlm_1_4) and 18 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[5]->isActive == false) { + lbffBayerNoGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= + 0x1800000; // Run kernel ids 23 (ifd_segmap_xnr_1_4) and 24 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[6]->isActive == false) { + lbffBayerNoGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= + 0x30000000; // Run kernel ids 28 (ifd_segmap_acm_1_4) and 29 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[7]->isActive == false) { + lbffBayerNoGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerNoGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerNoGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= + 0x3000000000; // Run kernel ids 36 (ifd_segmap_cas_1_4) and 37 (smurf_cas_1_0) + } + + lbffBayerNoGmvNoTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100101 + */ +StaticGraph100101::StaticGraph100101(GraphConfiguration100101* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100101, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffBayerWithGmvNoTnrWithSapOuterNode.Init( + &_graphConfiguration.lbffBayerWithGmvNoTnrWithSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerWithGmvNoTnrWithSap; + link->destNode = &_lbffBayerWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerWithGmvNoTnrWithSap; + link->destNode = &_lbffBayerWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerWithGmvNoTnrWithSap; + link->destNode = &_lbffBayerWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerWithGmvNoTnrWithSap; + link->destNode = &_lbffBayerWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerWithGmvNoTnrWithSap; + link->destNode = &_lbffBayerWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerWithGmvNoTnrWithSap; + link->destNode = &_lbffBayerWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerWithGmvNoTnrWithSap; + link->destNode = &_lbffBayerWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerWithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[19]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 20; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerWithGmvNoTnrWithSapOuterNode = &_lbffBayerWithGmvNoTnrWithSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerWithGmvNoTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100101::~StaticGraph100101() {} + +StaticGraphStatus imageSubGraphTopology100101::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerWithGmvNoTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerWithGmvNoTnrWithSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerWithGmvNoTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerWithGmvNoTnrWithSapInnerOptions |= noMp; + } + if (subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + subGraphLinks[18]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerWithGmvNoTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerWithGmvNoTnrWithSapOuterNode->setInnerNode(lbffBayerWithGmvNoTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[9]->isActive = + !(lbffBayerWithGmvNoTnrWithSapInnerOptions & + no3A); // lbff_Bayer_WithGmv_NoTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[10]->isActive = + !(lbffBayerWithGmvNoTnrWithSapInnerOptions & + no3A); // lbff_Bayer_WithGmv_NoTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[11]->isActive = + !(lbffBayerWithGmvNoTnrWithSapInnerOptions & + no3A); // lbff_Bayer_WithGmv_NoTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[12]->isActive = + !(lbffBayerWithGmvNoTnrWithSapInnerOptions & + no3A); // lbff_Bayer_WithGmv_NoTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[15]->isActive = + !(lbffBayerWithGmvNoTnrWithSapInnerOptions & + noMp); // lbff_Bayer_WithGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[17]->isActive = + !(lbffBayerWithGmvNoTnrWithSapInnerOptions & noMp); // lbff_Bayer_WithGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[16]->isActive = + !(lbffBayerWithGmvNoTnrWithSapInnerOptions & + noDp); // lbff_Bayer_WithGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[18]->isActive = + !(lbffBayerWithGmvNoTnrWithSapInnerOptions & noDp); // lbff_Bayer_WithGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output + // -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 20; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[13]->isActive = + (lbffBayerWithGmvNoTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Bayer_WithGmv_NoTnr_WithSap:terminal_connect_gmv_feature_output + // -> lbff_Bayer_WithGmv_NoTnr_WithSap:terminal_connect_gmv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100101::updateSegmentAwareKernels() { + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[4]->isActive == false) { + lbffBayerWithGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerWithGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerWithGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= + 0xC0000; // Run kernel ids 18 (ifd_segmap_bnlm_1_4) and 19 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[5]->isActive == false) { + lbffBayerWithGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= + 0x3000000; // Run kernel ids 24 (ifd_segmap_xnr_1_4) and 25 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[6]->isActive == false) { + lbffBayerWithGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= + 0x60000000; // Run kernel ids 29 (ifd_segmap_acm_1_4) and 30 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[7]->isActive == false) { + lbffBayerWithGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerWithGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerWithGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= + 0x30000000000; // Run kernel ids 40 (ifd_segmap_cas_1_4) and 41 (smurf_cas_1_0) + } + + lbffBayerWithGmvNoTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100102 + */ +StaticGraph100102::StaticGraph100102(GraphConfiguration100102* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100102, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffBayerNoGmvWithTnrWithSapOuterNode.Init( + &_graphConfiguration.lbffBayerNoGmvWithTnrWithSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->destNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffBayerNoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 20; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerNoGmvWithTnrWithSapOuterNode = &_lbffBayerNoGmvWithTnrWithSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerNoGmvWithTnrWithSapOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100102::~StaticGraph100102() {} + +StaticGraphStatus imageSubGraphTopology100102::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerNoGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerNoGmvWithTnrWithSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerNoGmvWithTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[18]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerNoGmvWithTnrWithSapInnerOptions |= noMp; + } + if (subGraphLinks[19]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerNoGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerNoGmvWithTnrWithSapOuterNode->setInnerNode(lbffBayerNoGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[11]->isActive = + !(lbffBayerNoGmvWithTnrWithSapInnerOptions & + no3A); // lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[12]->isActive = + !(lbffBayerNoGmvWithTnrWithSapInnerOptions & + no3A); // lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[13]->isActive = + !(lbffBayerNoGmvWithTnrWithSapInnerOptions & + no3A); // lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[14]->isActive = + !(lbffBayerNoGmvWithTnrWithSapInnerOptions & + no3A); // lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[18]->isActive = + !(lbffBayerNoGmvWithTnrWithSapInnerOptions & + noMp); // lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[19]->isActive = + !(lbffBayerNoGmvWithTnrWithSapInnerOptions & + noDp); // lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 20; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[15]->isActive = + (lbffBayerNoGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_blend_output -> + // lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[16]->isActive = + (lbffBayerNoGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_bc_output -> + // lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[17]->isActive = + (lbffBayerNoGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output + // -> lbff_Bayer_NoGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100102::updateSegmentAwareKernels() { + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[4]->isActive == false) { + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= + 0x300000; // Run kernel ids 20 (ifd_segmap_bnlm_1_4) and 21 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[5]->isActive == false) { + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= + 0xC000000; // Run kernel ids 26 (ifd_segmap_xnr_1_4) and 27 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[6]->isActive == false) { + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= + 0x180000000; // Run kernel ids 31 (ifd_segmap_acm_1_4) and 32 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[7]->isActive == false) { + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= + 0x30000000000000; // Run kernel ids 52 (ifd_segmap_cas_1_4) and 53 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[8]->isActive == false) { + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= + 0x60000000000; // Run kernel ids 41 (ifd_segmap_tnr_bc_1_4) and 42 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[9]->isActive == false) { + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffBayerNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= + 0x600000000000; // Run kernel ids 45 (ifd_segmap_tnr_blend_1_4) and 46 + // (smurf_tnr_blend_1_0) + } + + lbffBayerNoGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100103 + */ +StaticGraph100103::StaticGraph100103(GraphConfiguration100103* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100103, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffBayerWithGmvWithTnrWithSapOuterNode.Init( + &_graphConfiguration.lbffBayerWithGmvWithTnrWithSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->destNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->destNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->destNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->destNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->destNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->destNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->destNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->destNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->destNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->destNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->destNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->destNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffBayerWithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[24]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 25; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerWithGmvWithTnrWithSapOuterNode = + &_lbffBayerWithGmvWithTnrWithSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerWithGmvWithTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100103::~StaticGraph100103() {} + +StaticGraphStatus imageSubGraphTopology100103::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerWithGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerWithGmvWithTnrWithSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerWithGmvWithTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[20]->linkConfiguration->bufferSize == 0 && + subGraphLinks[22]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerWithGmvWithTnrWithSapInnerOptions |= noMp; + } + if (subGraphLinks[21]->linkConfiguration->bufferSize == 0 && + subGraphLinks[23]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerWithGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerWithGmvWithTnrWithSapOuterNode->setInnerNode( + lbffBayerWithGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[11]->isActive = + !(lbffBayerWithGmvWithTnrWithSapInnerOptions & + no3A); // lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[12]->isActive = + !(lbffBayerWithGmvWithTnrWithSapInnerOptions & + no3A); // lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[13]->isActive = !( + lbffBayerWithGmvWithTnrWithSapInnerOptions & + no3A); // lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[14]->isActive = !( + lbffBayerWithGmvWithTnrWithSapInnerOptions & + no3A); // lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[20]->isActive = + !(lbffBayerWithGmvWithTnrWithSapInnerOptions & + noMp); // lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[22]->isActive = + !(lbffBayerWithGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[21]->isActive = + !(lbffBayerWithGmvWithTnrWithSapInnerOptions & + noDp); // lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[23]->isActive = + !(lbffBayerWithGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output + // -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 25; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[15]->isActive = + (lbffBayerWithGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_gmv_feature_output + // -> lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_gmv_input + subGraphLinks[17]->isActive = + (lbffBayerWithGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_blend_output -> + // lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[18]->isActive = + (lbffBayerWithGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_bc_output -> + // lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[19]->isActive = + (lbffBayerWithGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> + // lbff_Bayer_WithGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100103::updateSegmentAwareKernels() { + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[4]->isActive == false) { + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= + 0x600000; // Run kernel ids 21 (ifd_segmap_bnlm_1_4) and 22 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[5]->isActive == false) { + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= + 0x18000000; // Run kernel ids 27 (ifd_segmap_xnr_1_4) and 28 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[6]->isActive == false) { + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= + 0x300000000; // Run kernel ids 32 (ifd_segmap_acm_1_4) and 33 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[7]->isActive == false) { + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= + 0x300000000000000; // Run kernel ids 56 (ifd_segmap_cas_1_4) and 57 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[8]->isActive == false) { + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= + 0x600000000000; // Run kernel ids 45 (ifd_segmap_tnr_bc_1_4) and 46 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[9]->isActive == false) { + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffBayerWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= + 0x6000000000000; // Run kernel ids 49 (ifd_segmap_tnr_blend_1_4) and 50 + // (smurf_tnr_blend_1_0) + } + + lbffBayerWithGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100104 + */ +StaticGraph100104::StaticGraph100104(GraphConfiguration100104* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100104, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysPdaf2WithCvOuterNode.Init(&_graphConfiguration.isysPdaf2WithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode.Init( + &_graphConfiguration.lbffBayerPdaf2NoGmvNoTnrWithSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::PdafBuffer; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 7; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 18; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysPdaf2WithCvOuterNode = &_isysPdaf2WithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode = + &_lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysPdaf2WithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100104::~StaticGraph100104() {} + +StaticGraphStatus imageSubGraphTopology100104::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf2NoGmvNoTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf2NoGmvNoTnrWithSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf2NoGmvNoTnrWithSapInnerOptions |= (noIr); + // active public options according to sink mapping + if (subGraphLinks[16]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf2NoGmvNoTnrWithSapInnerOptions |= noMp; + } + if (subGraphLinks[17]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf2NoGmvNoTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode->setInnerNode( + lbffBayerPdaf2NoGmvNoTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[12]->isActive = + !(lbffBayerPdaf2NoGmvNoTnrWithSapInnerOptions & + no3A); // lbff_Bayer_Pdaf2_NoGmv_NoTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[13]->isActive = !( + lbffBayerPdaf2NoGmvNoTnrWithSapInnerOptions & + no3A); // lbff_Bayer_Pdaf2_NoGmv_NoTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[14]->isActive = + !(lbffBayerPdaf2NoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_NoTnr_WithSap:terminal_connect_awb_std_output + // -> awb_std_out + subGraphLinks[15]->isActive = + !(lbffBayerPdaf2NoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_NoTnr_WithSap:terminal_connect_awb_sat_output + // -> awb_sat_out + subGraphLinks[16]->isActive = + !(lbffBayerPdaf2NoGmvNoTnrWithSapInnerOptions & + noMp); // lbff_Bayer_Pdaf2_NoGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[17]->isActive = + !(lbffBayerPdaf2NoGmvNoTnrWithSapInnerOptions & + noDp); // lbff_Bayer_Pdaf2_NoGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 18; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100104::updateSegmentAwareKernels() { + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[6]->isActive == false) { + lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= + 0x600000; // Run kernel ids 21 (ifd_segmap_bnlm_1_4) and 22 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[7]->isActive == false) { + lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= + 0x18000000; // Run kernel ids 27 (ifd_segmap_xnr_1_4) and 28 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[8]->isActive == false) { + lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= + 0x300000000; // Run kernel ids 32 (ifd_segmap_acm_1_4) and 33 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[9]->isActive == false) { + lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= + 0x30000000000; // Run kernel ids 40 (ifd_segmap_cas_1_4) and 41 (smurf_cas_1_0) + } + + lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100105 + */ +StaticGraph100105::StaticGraph100105(GraphConfiguration100105* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100105, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysPdaf2WithCvOuterNode.Init(&_graphConfiguration.isysPdaf2WithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode.Init( + &_graphConfiguration.lbffBayerPdaf2WithGmvNoTnrWithSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::PdafBuffer; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 7; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[22]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 23; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysPdaf2WithCvOuterNode = &_isysPdaf2WithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode = + &_lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysPdaf2WithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100105::~StaticGraph100105() {} + +StaticGraphStatus imageSubGraphTopology100105::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf2WithGmvNoTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf2WithGmvNoTnrWithSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf2WithGmvNoTnrWithSapInnerOptions |= (noIr); + // active public options according to sink mapping + if (subGraphLinks[18]->linkConfiguration->bufferSize == 0 && + subGraphLinks[20]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf2WithGmvNoTnrWithSapInnerOptions |= noMp; + } + if (subGraphLinks[19]->linkConfiguration->bufferSize == 0 && + subGraphLinks[21]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf2WithGmvNoTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode->setInnerNode( + lbffBayerPdaf2WithGmvNoTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[12]->isActive = + !(lbffBayerPdaf2WithGmvNoTnrWithSapInnerOptions & + no3A); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[13]->isActive = + !(lbffBayerPdaf2WithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_WithSap:terminal_connect_af_std_output + // -> af_std_out + subGraphLinks[14]->isActive = + !(lbffBayerPdaf2WithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_WithSap:terminal_connect_awb_std_output + // -> awb_std_out + subGraphLinks[15]->isActive = + !(lbffBayerPdaf2WithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_WithSap:terminal_connect_awb_sat_output + // -> awb_sat_out + subGraphLinks[18]->isActive = !( + lbffBayerPdaf2WithGmvNoTnrWithSapInnerOptions & + noMp); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[20]->isActive = !(lbffBayerPdaf2WithGmvNoTnrWithSapInnerOptions & + noMp); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[19]->isActive = !( + lbffBayerPdaf2WithGmvNoTnrWithSapInnerOptions & + noDp); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[21]->isActive = !(lbffBayerPdaf2WithGmvNoTnrWithSapInnerOptions & + noDp); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output + // -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 23; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[16]->isActive = + (lbffBayerPdaf2WithGmvNoTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf2_WithGmv_NoTnr_WithSap:terminal_connect_gmv_feature_output -> + // lbff_Bayer_Pdaf2_WithGmv_NoTnr_WithSap:terminal_connect_gmv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100105::updateSegmentAwareKernels() { + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[6]->isActive == false) { + lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= + 0xC00000; // Run kernel ids 22 (ifd_segmap_bnlm_1_4) and 23 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[7]->isActive == false) { + lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= + 0x30000000; // Run kernel ids 28 (ifd_segmap_xnr_1_4) and 29 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[8]->isActive == false) { + lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= + 0x600000000; // Run kernel ids 33 (ifd_segmap_acm_1_4) and 34 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[9]->isActive == false) { + lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= + 0x300000000000; // Run kernel ids 44 (ifd_segmap_cas_1_4) and 45 (smurf_cas_1_0) + } + + lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100106 + */ +StaticGraph100106::StaticGraph100106(GraphConfiguration100106* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100106, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysPdaf2WithCvOuterNode.Init(&_graphConfiguration.isysPdaf2WithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode.Init( + &_graphConfiguration.lbffBayerPdaf2NoGmvWithTnrWithSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::PdafBuffer; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 7; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffBayerPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 23; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysPdaf2WithCvOuterNode = &_isysPdaf2WithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode = + &_lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysPdaf2WithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100106::~StaticGraph100106() {} + +StaticGraphStatus imageSubGraphTopology100106::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf2NoGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions |= (noIr); + // active public options according to sink mapping + if (subGraphLinks[21]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions |= noMp; + } + if (subGraphLinks[22]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->setInnerNode( + lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[14]->isActive = + !(lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions & + no3A); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[15]->isActive = + !(lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_af_std_output + // -> af_std_out + subGraphLinks[16]->isActive = + !(lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_awb_std_output + // -> awb_std_out + subGraphLinks[17]->isActive = + !(lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_awb_sat_output + // -> awb_sat_out + subGraphLinks[21]->isActive = !( + lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions & + noMp); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[22]->isActive = !( + lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions & + noDp); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 23; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[18]->isActive = + (lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_blend_output -> + // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[19]->isActive = + (lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_bc_output -> + // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[20]->isActive = + (lbffBayerPdaf2NoGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> + // lbff_Bayer_Pdaf2_NoGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100106::updateSegmentAwareKernels() { + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[6]->isActive == false) { + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= + 0x3000000; // Run kernel ids 24 (ifd_segmap_bnlm_1_4) and 25 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[7]->isActive == false) { + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= + 0xC0000000; // Run kernel ids 30 (ifd_segmap_xnr_1_4) and 31 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[8]->isActive == false) { + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= + 0x1800000000; // Run kernel ids 35 (ifd_segmap_acm_1_4) and 36 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[9]->isActive == false) { + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= + 0x300000000000000; // Run kernel ids 56 (ifd_segmap_cas_1_4) and 57 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[10]->isActive == false) { + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= + 0x600000000000; // Run kernel ids 45 (ifd_segmap_tnr_bc_1_4) and 46 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[11]->isActive == false) { + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= + 0x6000000000000; // Run kernel ids 49 (ifd_segmap_tnr_blend_1_4) and 50 + // (smurf_tnr_blend_1_0) + } + + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100107 + */ +StaticGraph100107::StaticGraph100107(GraphConfiguration100107* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100107, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysPdaf2WithCvOuterNode.Init(&_graphConfiguration.isysPdaf2WithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode.Init( + &_graphConfiguration.lbffBayerPdaf2WithGmvWithTnrWithSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::PdafBuffer; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 7; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[24]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[25]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[26]; + link->src = GraphElementType::LbffBayerPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[27]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 28; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysPdaf2WithCvOuterNode = &_isysPdaf2WithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode = + &_lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysPdaf2WithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100107::~StaticGraph100107() {} + +StaticGraphStatus imageSubGraphTopology100107::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf2WithGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions |= (noIr); + // active public options according to sink mapping + if (subGraphLinks[23]->linkConfiguration->bufferSize == 0 && + subGraphLinks[25]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions |= noMp; + } + if (subGraphLinks[24]->linkConfiguration->bufferSize == 0 && + subGraphLinks[26]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->setInnerNode( + lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[14]->isActive = + !(lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & + no3A); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[15]->isActive = + !(lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_af_std_output + // -> af_std_out + subGraphLinks[16]->isActive = + !(lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_awb_std_output + // -> awb_std_out + subGraphLinks[17]->isActive = + !(lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_awb_sat_output + // -> awb_sat_out + subGraphLinks[23]->isActive = + !(lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output + // -> image_mp + subGraphLinks[25]->isActive = !(lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & + noMp); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[24]->isActive = + !(lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output + // -> image_dp + subGraphLinks[26]->isActive = !(lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & + noDp); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output + // -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 28; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[18]->isActive = + (lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_gmv_feature_output -> + // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_gmv_input + subGraphLinks[20]->isActive = + (lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_blend_output -> + // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[21]->isActive = + (lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_bc_output -> + // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[22]->isActive = + (lbffBayerPdaf2WithGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> + // lbff_Bayer_Pdaf2_WithGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100107::updateSegmentAwareKernels() { + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[6]->isActive == false) { + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= + 0x6000000; // Run kernel ids 25 (ifd_segmap_bnlm_1_4) and 26 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[7]->isActive == false) { + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= + 0x180000000; // Run kernel ids 31 (ifd_segmap_xnr_1_4) and 32 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[8]->isActive == false) { + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= + 0x3000000000; // Run kernel ids 36 (ifd_segmap_acm_1_4) and 37 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[9]->isActive == false) { + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= + 0x3000000000000000; // Run kernel ids 60 (ifd_segmap_cas_1_4) and 61 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[10]->isActive == false) { + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= + 0x6000000000000; // Run kernel ids 49 (ifd_segmap_tnr_bc_1_4) and 50 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[11]->isActive == false) { + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= + 0x60000000000000; // Run kernel ids 53 (ifd_segmap_tnr_blend_1_4) and 54 + // (smurf_tnr_blend_1_0) + } + + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100108 + */ +StaticGraph100108::StaticGraph100108(GraphConfiguration100108* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100108, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode.Init( + &_graphConfiguration.lbffBayerPdaf3NoGmvNoTnrWithSapOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 16; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode = + &_lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100108::~StaticGraph100108() {} + +StaticGraphStatus imageSubGraphTopology100108::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3NoGmvNoTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3NoGmvNoTnrWithSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3NoGmvNoTnrWithSapInnerOptions |= (noIr); + // active public options according to sink mapping + if (subGraphLinks[14]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf3NoGmvNoTnrWithSapInnerOptions |= noMp; + } + if (subGraphLinks[15]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf3NoGmvNoTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode->setInnerNode( + lbffBayerPdaf3NoGmvNoTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[10]->isActive = + !(lbffBayerPdaf3NoGmvNoTnrWithSapInnerOptions & + no3A); // lbff_Bayer_Pdaf3_NoGmv_NoTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[11]->isActive = !( + lbffBayerPdaf3NoGmvNoTnrWithSapInnerOptions & + no3A); // lbff_Bayer_Pdaf3_NoGmv_NoTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[12]->isActive = + !(lbffBayerPdaf3NoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_NoTnr_WithSap:terminal_connect_awb_std_output + // -> awb_std_out + subGraphLinks[13]->isActive = + !(lbffBayerPdaf3NoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_NoTnr_WithSap:terminal_connect_awb_sat_output + // -> awb_sat_out + subGraphLinks[14]->isActive = + !(lbffBayerPdaf3NoGmvNoTnrWithSapInnerOptions & + noMp); // lbff_Bayer_Pdaf3_NoGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[15]->isActive = + !(lbffBayerPdaf3NoGmvNoTnrWithSapInnerOptions & + noDp); // lbff_Bayer_Pdaf3_NoGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 16; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100108::updateSegmentAwareKernels() { + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[5]->isActive == false) { + lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= + 0x300000; // Run kernel ids 20 (ifd_segmap_bnlm_1_4) and 21 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[6]->isActive == false) { + lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= + 0xC000000; // Run kernel ids 26 (ifd_segmap_xnr_1_4) and 27 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[7]->isActive == false) { + lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= + 0x180000000; // Run kernel ids 31 (ifd_segmap_acm_1_4) and 32 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[8]->isActive == false) { + lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= + 0x18000000000; // Run kernel ids 39 (ifd_segmap_cas_1_4) and 40 (smurf_cas_1_0) + } + + lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100109 + */ +StaticGraph100109::StaticGraph100109(GraphConfiguration100109* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100109, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode.Init( + &_graphConfiguration.lbffBayerPdaf3WithGmvNoTnrWithSapOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[20]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 21; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode = + &_lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100109::~StaticGraph100109() {} + +StaticGraphStatus imageSubGraphTopology100109::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3WithGmvNoTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3WithGmvNoTnrWithSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3WithGmvNoTnrWithSapInnerOptions |= (noIr); + // active public options according to sink mapping + if (subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + subGraphLinks[18]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf3WithGmvNoTnrWithSapInnerOptions |= noMp; + } + if (subGraphLinks[17]->linkConfiguration->bufferSize == 0 && + subGraphLinks[19]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf3WithGmvNoTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode->setInnerNode( + lbffBayerPdaf3WithGmvNoTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[10]->isActive = + !(lbffBayerPdaf3WithGmvNoTnrWithSapInnerOptions & + no3A); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[11]->isActive = + !(lbffBayerPdaf3WithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_WithSap:terminal_connect_af_std_output + // -> af_std_out + subGraphLinks[12]->isActive = + !(lbffBayerPdaf3WithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_WithSap:terminal_connect_awb_std_output + // -> awb_std_out + subGraphLinks[13]->isActive = + !(lbffBayerPdaf3WithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_WithSap:terminal_connect_awb_sat_output + // -> awb_sat_out + subGraphLinks[16]->isActive = !( + lbffBayerPdaf3WithGmvNoTnrWithSapInnerOptions & + noMp); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[18]->isActive = !(lbffBayerPdaf3WithGmvNoTnrWithSapInnerOptions & + noMp); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[17]->isActive = !( + lbffBayerPdaf3WithGmvNoTnrWithSapInnerOptions & + noDp); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[19]->isActive = !(lbffBayerPdaf3WithGmvNoTnrWithSapInnerOptions & + noDp); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output + // -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 21; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[14]->isActive = + (lbffBayerPdaf3WithGmvNoTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf3_WithGmv_NoTnr_WithSap:terminal_connect_gmv_feature_output -> + // lbff_Bayer_Pdaf3_WithGmv_NoTnr_WithSap:terminal_connect_gmv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100109::updateSegmentAwareKernels() { + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[5]->isActive == false) { + lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= + 0x600000; // Run kernel ids 21 (ifd_segmap_bnlm_1_4) and 22 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[6]->isActive == false) { + lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= + 0x18000000; // Run kernel ids 27 (ifd_segmap_xnr_1_4) and 28 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[7]->isActive == false) { + lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= + 0x300000000; // Run kernel ids 32 (ifd_segmap_acm_1_4) and 33 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[8]->isActive == false) { + lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= + 0x180000000000; // Run kernel ids 43 (ifd_segmap_cas_1_4) and 44 (smurf_cas_1_0) + } + + lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100110 + */ +StaticGraph100110::StaticGraph100110(GraphConfiguration100110* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100110, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode.Init( + &_graphConfiguration.lbffBayerPdaf3NoGmvWithTnrWithSapOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffBayerPdaf3NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 21; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode = + &_lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100110::~StaticGraph100110() {} + +StaticGraphStatus imageSubGraphTopology100110::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3NoGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions |= (noIr); + // active public options according to sink mapping + if (subGraphLinks[19]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions |= noMp; + } + if (subGraphLinks[20]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->setInnerNode( + lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[12]->isActive = + !(lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions & + no3A); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[13]->isActive = + !(lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_af_std_output + // -> af_std_out + subGraphLinks[14]->isActive = + !(lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_awb_std_output + // -> awb_std_out + subGraphLinks[15]->isActive = + !(lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_awb_sat_output + // -> awb_sat_out + subGraphLinks[19]->isActive = !( + lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions & + noMp); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[20]->isActive = !( + lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions & + noDp); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 21; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[16]->isActive = + (lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_blend_output -> + // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[17]->isActive = + (lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_bc_output -> + // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[18]->isActive = + (lbffBayerPdaf3NoGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> + // lbff_Bayer_Pdaf3_NoGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100110::updateSegmentAwareKernels() { + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[5]->isActive == false) { + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= + 0x1800000; // Run kernel ids 23 (ifd_segmap_bnlm_1_4) and 24 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[6]->isActive == false) { + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= + 0x60000000; // Run kernel ids 29 (ifd_segmap_xnr_1_4) and 30 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[7]->isActive == false) { + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= + 0xC00000000; // Run kernel ids 34 (ifd_segmap_acm_1_4) and 35 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[8]->isActive == false) { + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= + 0x180000000000000; // Run kernel ids 55 (ifd_segmap_cas_1_4) and 56 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[9]->isActive == false) { + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= + 0x300000000000; // Run kernel ids 44 (ifd_segmap_tnr_bc_1_4) and 45 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[10]->isActive == false) { + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= + 0x3000000000000; // Run kernel ids 48 (ifd_segmap_tnr_blend_1_4) and 49 + // (smurf_tnr_blend_1_0) + } + + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100111 + */ +StaticGraph100111::StaticGraph100111(GraphConfiguration100111* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100111, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode.Init( + &_graphConfiguration.lbffBayerPdaf3WithGmvWithTnrWithSapOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[24]; + link->src = GraphElementType::LbffBayerPdaf3WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[25]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 26; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode = + &_lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100111::~StaticGraph100111() {} + +StaticGraphStatus imageSubGraphTopology100111::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3WithGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions |= (noIr); + // active public options according to sink mapping + if (subGraphLinks[21]->linkConfiguration->bufferSize == 0 && + subGraphLinks[23]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions |= noMp; + } + if (subGraphLinks[22]->linkConfiguration->bufferSize == 0 && + subGraphLinks[24]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->setInnerNode( + lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[12]->isActive = + !(lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions & + no3A); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[13]->isActive = + !(lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_af_std_output + // -> af_std_out + subGraphLinks[14]->isActive = + !(lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_awb_std_output + // -> awb_std_out + subGraphLinks[15]->isActive = + !(lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_awb_sat_output + // -> awb_sat_out + subGraphLinks[21]->isActive = + !(lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output + // -> image_mp + subGraphLinks[23]->isActive = !(lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions & + noMp); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[22]->isActive = + !(lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output + // -> image_dp + subGraphLinks[24]->isActive = !(lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions & + noDp); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output + // -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 26; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[16]->isActive = + (lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_gmv_feature_output -> + // lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_gmv_input + subGraphLinks[18]->isActive = + (lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_blend_output -> + // lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[19]->isActive = + (lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_bc_output -> + // lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[20]->isActive = + (lbffBayerPdaf3WithGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> + // lbff_Bayer_Pdaf3_WithGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100111::updateSegmentAwareKernels() { + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[5]->isActive == false) { + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= + 0x3000000; // Run kernel ids 24 (ifd_segmap_bnlm_1_4) and 25 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[6]->isActive == false) { + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= + 0xC0000000; // Run kernel ids 30 (ifd_segmap_xnr_1_4) and 31 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[7]->isActive == false) { + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= + 0x1800000000; // Run kernel ids 35 (ifd_segmap_acm_1_4) and 36 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[8]->isActive == false) { + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= + 0x1800000000000000; // Run kernel ids 59 (ifd_segmap_cas_1_4) and 60 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[9]->isActive == false) { + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= + 0x3000000000000; // Run kernel ids 48 (ifd_segmap_tnr_bc_1_4) and 49 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[10]->isActive == false) { + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= + 0x30000000000000; // Run kernel ids 52 (ifd_segmap_tnr_blend_1_4) and 53 + // (smurf_tnr_blend_1_0) + } + + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100112 + */ +StaticGraph100112::StaticGraph100112(GraphConfiguration100112* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100112, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysDolWithCvOuterNode.Init(&_graphConfiguration.isysDolWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffDol2InputsNoGmvNoTnrWithSapOuterNode.Init( + &_graphConfiguration.lbffDol2InputsNoGmvNoTnrWithSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDol2InputsNoGmvNoTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::LbffDol2InputsNoGmvNoTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsNoGmvNoTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsNoGmvNoTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsNoGmvNoTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsNoGmvNoTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffDol2InputsNoGmvNoTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffDol2InputsNoGmvNoTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffDol2InputsNoGmvNoTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffDol2InputsNoGmvNoTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffDol2InputsNoGmvNoTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffDol2InputsNoGmvNoTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffDol2InputsNoGmvNoTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffDol2InputsNoGmvNoTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 19; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysDolWithCvOuterNode = &_isysDolWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffDol2InputsNoGmvNoTnrWithSapOuterNode = + &_lbffDol2InputsNoGmvNoTnrWithSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysDolWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffDol2InputsNoGmvNoTnrWithSapOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100112::~StaticGraph100112() {} + +StaticGraphStatus imageSubGraphTopology100112::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffDol2InputsNoGmvNoTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffDol2InputsNoGmvNoTnrWithSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffDol2InputsNoGmvNoTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[17]->linkConfiguration->bufferSize == 0 && true) { + lbffDol2InputsNoGmvNoTnrWithSapInnerOptions |= noMp; + } + if (subGraphLinks[18]->linkConfiguration->bufferSize == 0 && true) { + lbffDol2InputsNoGmvNoTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffDol2InputsNoGmvNoTnrWithSapOuterNode->setInnerNode( + lbffDol2InputsNoGmvNoTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[12]->isActive = + !(lbffDol2InputsNoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_NoTnr_WithSap:terminal_connect_awb_sve_output + // -> awb_sve_out + subGraphLinks[13]->isActive = + !(lbffDol2InputsNoGmvNoTnrWithSapInnerOptions & + no3A); // lbff_Dol2Inputs_NoGmv_NoTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[14]->isActive = !( + lbffDol2InputsNoGmvNoTnrWithSapInnerOptions & + no3A); // lbff_Dol2Inputs_NoGmv_NoTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[15]->isActive = + !(lbffDol2InputsNoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_NoTnr_WithSap:terminal_connect_awb_std_output + // -> awb_std_out + subGraphLinks[16]->isActive = + !(lbffDol2InputsNoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_NoTnr_WithSap:terminal_connect_awb_sat_output + // -> awb_sat_out + subGraphLinks[17]->isActive = + !(lbffDol2InputsNoGmvNoTnrWithSapInnerOptions & + noMp); // lbff_Dol2Inputs_NoGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[18]->isActive = + !(lbffDol2InputsNoGmvNoTnrWithSapInnerOptions & + noDp); // lbff_Dol2Inputs_NoGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 19; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100112::updateSegmentAwareKernels() { + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[7]->isActive == false) { + lbffDol2InputsNoGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffDol2InputsNoGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffDol2InputsNoGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= + 0x300000; // Run kernel ids 20 (ifd_segmap_bnlm_1_4) and 21 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[8]->isActive == false) { + lbffDol2InputsNoGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffDol2InputsNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffDol2InputsNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= + 0xC000000; // Run kernel ids 26 (ifd_segmap_xnr_1_4) and 27 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[9]->isActive == false) { + lbffDol2InputsNoGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffDol2InputsNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffDol2InputsNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= + 0x180000000; // Run kernel ids 31 (ifd_segmap_acm_1_4) and 32 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[10]->isActive == false) { + lbffDol2InputsNoGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffDol2InputsNoGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffDol2InputsNoGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= + 0x18000000000; // Run kernel ids 39 (ifd_segmap_cas_1_4) and 40 (smurf_cas_1_0) + } + + lbffDol2InputsNoGmvNoTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100113 + */ +StaticGraph100113::StaticGraph100113(GraphConfiguration100113* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100113, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysDolWithCvOuterNode.Init(&_graphConfiguration.isysDolWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffDol2InputsWithGmvNoTnrWithSapOuterNode.Init( + &_graphConfiguration.lbffDol2InputsWithGmvNoTnrWithSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDol2InputsWithGmvNoTnrWithSap; + link->destNode = &_lbffDol2InputsWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::LbffDol2InputsWithGmvNoTnrWithSap; + link->destNode = &_lbffDol2InputsWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsWithGmvNoTnrWithSap; + link->destNode = &_lbffDol2InputsWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsWithGmvNoTnrWithSap; + link->destNode = &_lbffDol2InputsWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsWithGmvNoTnrWithSap; + link->destNode = &_lbffDol2InputsWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsWithGmvNoTnrWithSap; + link->destNode = &_lbffDol2InputsWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffDol2InputsWithGmvNoTnrWithSap; + link->destNode = &_lbffDol2InputsWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffDol2InputsWithGmvNoTnrWithSap; + link->destNode = &_lbffDol2InputsWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffDol2InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[23]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 24; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysDolWithCvOuterNode = &_isysDolWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffDol2InputsWithGmvNoTnrWithSapOuterNode = + &_lbffDol2InputsWithGmvNoTnrWithSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysDolWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffDol2InputsWithGmvNoTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100113::~StaticGraph100113() {} + +StaticGraphStatus imageSubGraphTopology100113::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffDol2InputsWithGmvNoTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffDol2InputsWithGmvNoTnrWithSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffDol2InputsWithGmvNoTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[19]->linkConfiguration->bufferSize == 0 && + subGraphLinks[21]->linkConfiguration->bufferSize == 0 && true) { + lbffDol2InputsWithGmvNoTnrWithSapInnerOptions |= noMp; + } + if (subGraphLinks[20]->linkConfiguration->bufferSize == 0 && + subGraphLinks[22]->linkConfiguration->bufferSize == 0 && true) { + lbffDol2InputsWithGmvNoTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffDol2InputsWithGmvNoTnrWithSapOuterNode->setInnerNode( + lbffDol2InputsWithGmvNoTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[12]->isActive = + !(lbffDol2InputsWithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_NoTnr_WithSap:terminal_connect_awb_sve_output + // -> awb_sve_out + subGraphLinks[13]->isActive = + !(lbffDol2InputsWithGmvNoTnrWithSapInnerOptions & + no3A); // lbff_Dol2Inputs_WithGmv_NoTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[14]->isActive = + !(lbffDol2InputsWithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_NoTnr_WithSap:terminal_connect_af_std_output + // -> af_std_out + subGraphLinks[15]->isActive = + !(lbffDol2InputsWithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_NoTnr_WithSap:terminal_connect_awb_std_output + // -> awb_std_out + subGraphLinks[16]->isActive = + !(lbffDol2InputsWithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_NoTnr_WithSap:terminal_connect_awb_sat_output + // -> awb_sat_out + subGraphLinks[19]->isActive = !( + lbffDol2InputsWithGmvNoTnrWithSapInnerOptions & + noMp); // lbff_Dol2Inputs_WithGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[21]->isActive = !(lbffDol2InputsWithGmvNoTnrWithSapInnerOptions & + noMp); // lbff_Dol2Inputs_WithGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[20]->isActive = !( + lbffDol2InputsWithGmvNoTnrWithSapInnerOptions & + noDp); // lbff_Dol2Inputs_WithGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[22]->isActive = !(lbffDol2InputsWithGmvNoTnrWithSapInnerOptions & + noDp); // lbff_Dol2Inputs_WithGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output + // -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 24; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[17]->isActive = + (lbffDol2InputsWithGmvNoTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Dol2Inputs_WithGmv_NoTnr_WithSap:terminal_connect_gmv_feature_output -> + // lbff_Dol2Inputs_WithGmv_NoTnr_WithSap:terminal_connect_gmv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100113::updateSegmentAwareKernels() { + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[7]->isActive == false) { + lbffDol2InputsWithGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffDol2InputsWithGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffDol2InputsWithGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= + 0x600000; // Run kernel ids 21 (ifd_segmap_bnlm_1_4) and 22 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[8]->isActive == false) { + lbffDol2InputsWithGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffDol2InputsWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffDol2InputsWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= + 0x18000000; // Run kernel ids 27 (ifd_segmap_xnr_1_4) and 28 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[9]->isActive == false) { + lbffDol2InputsWithGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffDol2InputsWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffDol2InputsWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= + 0x300000000; // Run kernel ids 32 (ifd_segmap_acm_1_4) and 33 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[10]->isActive == false) { + lbffDol2InputsWithGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffDol2InputsWithGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffDol2InputsWithGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= + 0x180000000000; // Run kernel ids 43 (ifd_segmap_cas_1_4) and 44 (smurf_cas_1_0) + } + + lbffDol2InputsWithGmvNoTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100114 + */ +StaticGraph100114::StaticGraph100114(GraphConfiguration100114* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100114, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysDolWithCvOuterNode.Init(&_graphConfiguration.isysDolWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffDol2InputsNoGmvWithTnrWithSapOuterNode.Init( + &_graphConfiguration.lbffDol2InputsNoGmvWithTnrWithSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffDol2InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 24; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysDolWithCvOuterNode = &_isysDolWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffDol2InputsNoGmvWithTnrWithSapOuterNode = + &_lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysDolWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffDol2InputsNoGmvWithTnrWithSapOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100114::~StaticGraph100114() {} + +StaticGraphStatus imageSubGraphTopology100114::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffDol2InputsNoGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffDol2InputsNoGmvWithTnrWithSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffDol2InputsNoGmvWithTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[22]->linkConfiguration->bufferSize == 0 && true) { + lbffDol2InputsNoGmvWithTnrWithSapInnerOptions |= noMp; + } + if (subGraphLinks[23]->linkConfiguration->bufferSize == 0 && true) { + lbffDol2InputsNoGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->setInnerNode( + lbffDol2InputsNoGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[14]->isActive = + !(lbffDol2InputsNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_awb_sve_output + // -> awb_sve_out + subGraphLinks[15]->isActive = + !(lbffDol2InputsNoGmvWithTnrWithSapInnerOptions & + no3A); // lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[16]->isActive = + !(lbffDol2InputsNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_af_std_output + // -> af_std_out + subGraphLinks[17]->isActive = + !(lbffDol2InputsNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_awb_std_output + // -> awb_std_out + subGraphLinks[18]->isActive = + !(lbffDol2InputsNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_awb_sat_output + // -> awb_sat_out + subGraphLinks[22]->isActive = !( + lbffDol2InputsNoGmvWithTnrWithSapInnerOptions & + noMp); // lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[23]->isActive = !( + lbffDol2InputsNoGmvWithTnrWithSapInnerOptions & + noDp); // lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 24; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[19]->isActive = + (lbffDol2InputsNoGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_blend_output -> + // lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[20]->isActive = + (lbffDol2InputsNoGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_bc_output -> + // lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[21]->isActive = + (lbffDol2InputsNoGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> + // lbff_Dol2Inputs_NoGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100114::updateSegmentAwareKernels() { + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[7]->isActive == false) { + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= + 0x1800000; // Run kernel ids 23 (ifd_segmap_bnlm_1_4) and 24 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[8]->isActive == false) { + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= + 0x60000000; // Run kernel ids 29 (ifd_segmap_xnr_1_4) and 30 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[9]->isActive == false) { + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= + 0xC00000000; // Run kernel ids 34 (ifd_segmap_acm_1_4) and 35 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[10]->isActive == false) { + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= + 0x180000000000000; // Run kernel ids 55 (ifd_segmap_cas_1_4) and 56 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[11]->isActive == false) { + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= + 0x300000000000; // Run kernel ids 44 (ifd_segmap_tnr_bc_1_4) and 45 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[12]->isActive == false) { + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= + 0x3000000000000; // Run kernel ids 48 (ifd_segmap_tnr_blend_1_4) and 49 + // (smurf_tnr_blend_1_0) + } + + lbffDol2InputsNoGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100115 + */ +StaticGraph100115::StaticGraph100115(GraphConfiguration100115* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100115, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysDolWithCvOuterNode.Init(&_graphConfiguration.isysDolWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffDol2InputsWithGmvWithTnrWithSapOuterNode.Init( + &_graphConfiguration.lbffDol2InputsWithGmvWithTnrWithSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[24]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[25]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[26]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[27]; + link->src = GraphElementType::LbffDol2InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[28]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 29; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysDolWithCvOuterNode = &_isysDolWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffDol2InputsWithGmvWithTnrWithSapOuterNode = + &_lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysDolWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffDol2InputsWithGmvWithTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100115::~StaticGraph100115() {} + +StaticGraphStatus imageSubGraphTopology100115::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffDol2InputsWithGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffDol2InputsWithGmvWithTnrWithSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffDol2InputsWithGmvWithTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[24]->linkConfiguration->bufferSize == 0 && + subGraphLinks[26]->linkConfiguration->bufferSize == 0 && true) { + lbffDol2InputsWithGmvWithTnrWithSapInnerOptions |= noMp; + } + if (subGraphLinks[25]->linkConfiguration->bufferSize == 0 && + subGraphLinks[27]->linkConfiguration->bufferSize == 0 && true) { + lbffDol2InputsWithGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffDol2InputsWithGmvWithTnrWithSapOuterNode->setInnerNode( + lbffDol2InputsWithGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[14]->isActive = + !(lbffDol2InputsWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_WithTnr_WithSap:terminal_connect_awb_sve_output + // -> awb_sve_out + subGraphLinks[15]->isActive = + !(lbffDol2InputsWithGmvWithTnrWithSapInnerOptions & + no3A); // lbff_Dol2Inputs_WithGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[16]->isActive = + !(lbffDol2InputsWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_WithTnr_WithSap:terminal_connect_af_std_output + // -> af_std_out + subGraphLinks[17]->isActive = + !(lbffDol2InputsWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_WithTnr_WithSap:terminal_connect_awb_std_output + // -> awb_std_out + subGraphLinks[18]->isActive = + !(lbffDol2InputsWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Dol2Inputs_WithGmv_WithTnr_WithSap:terminal_connect_awb_sat_output + // -> awb_sat_out + subGraphLinks[24]->isActive = + !(lbffDol2InputsWithGmvWithTnrWithSapInnerOptions & noMp); // lbff_Dol2Inputs_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output + // -> image_mp + subGraphLinks[26]->isActive = !(lbffDol2InputsWithGmvWithTnrWithSapInnerOptions & + noMp); // lbff_Dol2Inputs_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[25]->isActive = + !(lbffDol2InputsWithGmvWithTnrWithSapInnerOptions & noDp); // lbff_Dol2Inputs_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output + // -> image_dp + subGraphLinks[27]->isActive = !(lbffDol2InputsWithGmvWithTnrWithSapInnerOptions & + noDp); // lbff_Dol2Inputs_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output + // -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 29; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[19]->isActive = + (lbffDol2InputsWithGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Dol2Inputs_WithGmv_WithTnr_WithSap:terminal_connect_gmv_feature_output -> + // lbff_Dol2Inputs_WithGmv_WithTnr_WithSap:terminal_connect_gmv_input + subGraphLinks[21]->isActive = + (lbffDol2InputsWithGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Dol2Inputs_WithGmv_WithTnr_WithSap:terminal_connect_blend_output -> + // lbff_Dol2Inputs_WithGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[22]->isActive = + (lbffDol2InputsWithGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Dol2Inputs_WithGmv_WithTnr_WithSap:terminal_connect_bc_output -> + // lbff_Dol2Inputs_WithGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[23]->isActive = + (lbffDol2InputsWithGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Dol2Inputs_WithGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> + // lbff_Dol2Inputs_WithGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100115::updateSegmentAwareKernels() { + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[7]->isActive == false) { + lbffDol2InputsWithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffDol2InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffDol2InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= + 0x3000000; // Run kernel ids 24 (ifd_segmap_bnlm_1_4) and 25 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[8]->isActive == false) { + lbffDol2InputsWithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffDol2InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffDol2InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= + 0xC0000000; // Run kernel ids 30 (ifd_segmap_xnr_1_4) and 31 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[9]->isActive == false) { + lbffDol2InputsWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffDol2InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffDol2InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= + 0x1800000000; // Run kernel ids 35 (ifd_segmap_acm_1_4) and 36 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[10]->isActive == false) { + lbffDol2InputsWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffDol2InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffDol2InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= + 0x1800000000000000; // Run kernel ids 59 (ifd_segmap_cas_1_4) and 60 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[11]->isActive == false) { + lbffDol2InputsWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffDol2InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffDol2InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= + 0x3000000000000; // Run kernel ids 48 (ifd_segmap_tnr_bc_1_4) and 49 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[12]->isActive == false) { + lbffDol2InputsWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffDol2InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffDol2InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= + 0x30000000000000; // Run kernel ids 52 (ifd_segmap_tnr_blend_1_4) and 53 + // (smurf_tnr_blend_1_0) + } + + lbffDol2InputsWithGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100116 + */ +StaticGraph100116::StaticGraph100116(GraphConfiguration100116* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100116, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysDolWithCvOuterNode.Init(&_graphConfiguration.isysDolWithCvOuterNodeConfiguration); + _lbffDolSmoothOuterNode.Init(&_graphConfiguration.lbffDolSmoothOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffDol3InputsNoGmvNoTnrWithSapOuterNode.Init( + &_graphConfiguration.lbffDol3InputsNoGmvNoTnrWithSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDolSmooth; + link->destNode = &_lbffDolSmoothOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffDolSmooth; + link->srcNode = &_lbffDolSmoothOuterNode; + link->srcTerminalId = 16; + link->dest = GraphElementType::LbffDol3InputsNoGmvNoTnrWithSap; + link->destNode = &_lbffDol3InputsNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDol3InputsNoGmvNoTnrWithSap; + link->destNode = &_lbffDol3InputsNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::LbffDol3InputsNoGmvNoTnrWithSap; + link->destNode = &_lbffDol3InputsNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol3InputsNoGmvNoTnrWithSap; + link->destNode = &_lbffDol3InputsNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol3InputsNoGmvNoTnrWithSap; + link->destNode = &_lbffDol3InputsNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol3InputsNoGmvNoTnrWithSap; + link->destNode = &_lbffDol3InputsNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol3InputsNoGmvNoTnrWithSap; + link->destNode = &_lbffDol3InputsNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffDol3InputsNoGmvNoTnrWithSap; + link->destNode = &_lbffDol3InputsNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffDol3InputsNoGmvNoTnrWithSap; + link->srcNode = &_lbffDol3InputsNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffDol3InputsNoGmvNoTnrWithSap; + link->srcNode = &_lbffDol3InputsNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffDol3InputsNoGmvNoTnrWithSap; + link->srcNode = &_lbffDol3InputsNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffDol3InputsNoGmvNoTnrWithSap; + link->srcNode = &_lbffDol3InputsNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffDol3InputsNoGmvNoTnrWithSap; + link->srcNode = &_lbffDol3InputsNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffDol3InputsNoGmvNoTnrWithSap; + link->srcNode = &_lbffDol3InputsNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffDol3InputsNoGmvNoTnrWithSap; + link->srcNode = &_lbffDol3InputsNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 21; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysDolWithCvOuterNode = &_isysDolWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffDolSmoothOuterNode = &_lbffDolSmoothOuterNode; + _imageSubGraph.lbffDol3InputsNoGmvNoTnrWithSapOuterNode = + &_lbffDol3InputsNoGmvNoTnrWithSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysDolWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffDolSmoothOuterNode->contextId = 2; + _imageSubGraph.lbffDol3InputsNoGmvNoTnrWithSapOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100116::~StaticGraph100116() {} + +StaticGraphStatus imageSubGraphTopology100116::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffDol3InputsNoGmvNoTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffDol3InputsNoGmvNoTnrWithSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffDol3InputsNoGmvNoTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[19]->linkConfiguration->bufferSize == 0 && true) { + lbffDol3InputsNoGmvNoTnrWithSapInnerOptions |= noMp; + } + if (subGraphLinks[20]->linkConfiguration->bufferSize == 0 && true) { + lbffDol3InputsNoGmvNoTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffDol3InputsNoGmvNoTnrWithSapOuterNode->setInnerNode( + lbffDol3InputsNoGmvNoTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[14]->isActive = + !(lbffDol3InputsNoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Dol3Inputs_NoGmv_NoTnr_WithSap:terminal_connect_awb_sve_output + // -> awb_sve_out + subGraphLinks[15]->isActive = + !(lbffDol3InputsNoGmvNoTnrWithSapInnerOptions & + no3A); // lbff_Dol3Inputs_NoGmv_NoTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[16]->isActive = !( + lbffDol3InputsNoGmvNoTnrWithSapInnerOptions & + no3A); // lbff_Dol3Inputs_NoGmv_NoTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[17]->isActive = + !(lbffDol3InputsNoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Dol3Inputs_NoGmv_NoTnr_WithSap:terminal_connect_awb_std_output + // -> awb_std_out + subGraphLinks[18]->isActive = + !(lbffDol3InputsNoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Dol3Inputs_NoGmv_NoTnr_WithSap:terminal_connect_awb_sat_output + // -> awb_sat_out + subGraphLinks[19]->isActive = + !(lbffDol3InputsNoGmvNoTnrWithSapInnerOptions & + noMp); // lbff_Dol3Inputs_NoGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[20]->isActive = + !(lbffDol3InputsNoGmvNoTnrWithSapInnerOptions & + noDp); // lbff_Dol3Inputs_NoGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 21; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100116::updateSegmentAwareKernels() { + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[9]->isActive == false) { + lbffDol3InputsNoGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffDol3InputsNoGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffDol3InputsNoGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= + 0x600000; // Run kernel ids 21 (ifd_segmap_bnlm_1_4) and 22 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[10]->isActive == false) { + lbffDol3InputsNoGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffDol3InputsNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffDol3InputsNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= + 0x18000000; // Run kernel ids 27 (ifd_segmap_xnr_1_4) and 28 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[11]->isActive == false) { + lbffDol3InputsNoGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffDol3InputsNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffDol3InputsNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= + 0x300000000; // Run kernel ids 32 (ifd_segmap_acm_1_4) and 33 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[12]->isActive == false) { + lbffDol3InputsNoGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffDol3InputsNoGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffDol3InputsNoGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= + 0x30000000000; // Run kernel ids 40 (ifd_segmap_cas_1_4) and 41 (smurf_cas_1_0) + } + + lbffDol3InputsNoGmvNoTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100117 + */ +StaticGraph100117::StaticGraph100117(GraphConfiguration100117* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100117, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysDolWithCvOuterNode.Init(&_graphConfiguration.isysDolWithCvOuterNodeConfiguration); + _lbffDolSmoothOuterNode.Init(&_graphConfiguration.lbffDolSmoothOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffDol3InputsWithGmvNoTnrWithSapOuterNode.Init( + &_graphConfiguration.lbffDol3InputsWithGmvNoTnrWithSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDolSmooth; + link->destNode = &_lbffDolSmoothOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffDolSmooth; + link->srcNode = &_lbffDolSmoothOuterNode; + link->srcTerminalId = 16; + link->dest = GraphElementType::LbffDol3InputsWithGmvNoTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDol3InputsWithGmvNoTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::LbffDol3InputsWithGmvNoTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol3InputsWithGmvNoTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol3InputsWithGmvNoTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol3InputsWithGmvNoTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol3InputsWithGmvNoTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffDol3InputsWithGmvNoTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffDol3InputsWithGmvNoTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[24]; + link->src = GraphElementType::LbffDol3InputsWithGmvNoTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[25]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 26; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysDolWithCvOuterNode = &_isysDolWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffDolSmoothOuterNode = &_lbffDolSmoothOuterNode; + _imageSubGraph.lbffDol3InputsWithGmvNoTnrWithSapOuterNode = + &_lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysDolWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffDolSmoothOuterNode->contextId = 2; + _imageSubGraph.lbffDol3InputsWithGmvNoTnrWithSapOuterNode->contextId = 3; + _imageSubGraph.swGdcOuterNode->contextId = 4; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100117::~StaticGraph100117() {} + +StaticGraphStatus imageSubGraphTopology100117::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffDol3InputsWithGmvNoTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffDol3InputsWithGmvNoTnrWithSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffDol3InputsWithGmvNoTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[21]->linkConfiguration->bufferSize == 0 && + subGraphLinks[23]->linkConfiguration->bufferSize == 0 && true) { + lbffDol3InputsWithGmvNoTnrWithSapInnerOptions |= noMp; + } + if (subGraphLinks[22]->linkConfiguration->bufferSize == 0 && + subGraphLinks[24]->linkConfiguration->bufferSize == 0 && true) { + lbffDol3InputsWithGmvNoTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffDol3InputsWithGmvNoTnrWithSapOuterNode->setInnerNode( + lbffDol3InputsWithGmvNoTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[14]->isActive = + !(lbffDol3InputsWithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_NoTnr_WithSap:terminal_connect_awb_sve_output + // -> awb_sve_out + subGraphLinks[15]->isActive = + !(lbffDol3InputsWithGmvNoTnrWithSapInnerOptions & + no3A); // lbff_Dol3Inputs_WithGmv_NoTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[16]->isActive = + !(lbffDol3InputsWithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_NoTnr_WithSap:terminal_connect_af_std_output + // -> af_std_out + subGraphLinks[17]->isActive = + !(lbffDol3InputsWithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_NoTnr_WithSap:terminal_connect_awb_std_output + // -> awb_std_out + subGraphLinks[18]->isActive = + !(lbffDol3InputsWithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_NoTnr_WithSap:terminal_connect_awb_sat_output + // -> awb_sat_out + subGraphLinks[21]->isActive = !( + lbffDol3InputsWithGmvNoTnrWithSapInnerOptions & + noMp); // lbff_Dol3Inputs_WithGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[23]->isActive = !(lbffDol3InputsWithGmvNoTnrWithSapInnerOptions & + noMp); // lbff_Dol3Inputs_WithGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[22]->isActive = !( + lbffDol3InputsWithGmvNoTnrWithSapInnerOptions & + noDp); // lbff_Dol3Inputs_WithGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[24]->isActive = !(lbffDol3InputsWithGmvNoTnrWithSapInnerOptions & + noDp); // lbff_Dol3Inputs_WithGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output + // -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 26; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[19]->isActive = + (lbffDol3InputsWithGmvNoTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Dol3Inputs_WithGmv_NoTnr_WithSap:terminal_connect_gmv_feature_output -> + // lbff_Dol3Inputs_WithGmv_NoTnr_WithSap:terminal_connect_gmv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100117::updateSegmentAwareKernels() { + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[9]->isActive == false) { + lbffDol3InputsWithGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffDol3InputsWithGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffDol3InputsWithGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= + 0xC00000; // Run kernel ids 22 (ifd_segmap_bnlm_1_4) and 23 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[10]->isActive == false) { + lbffDol3InputsWithGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffDol3InputsWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffDol3InputsWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= + 0x30000000; // Run kernel ids 28 (ifd_segmap_xnr_1_4) and 29 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[11]->isActive == false) { + lbffDol3InputsWithGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffDol3InputsWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffDol3InputsWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= + 0x600000000; // Run kernel ids 33 (ifd_segmap_acm_1_4) and 34 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[12]->isActive == false) { + lbffDol3InputsWithGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffDol3InputsWithGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffDol3InputsWithGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= + 0x300000000000; // Run kernel ids 44 (ifd_segmap_cas_1_4) and 45 (smurf_cas_1_0) + } + + lbffDol3InputsWithGmvNoTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100118 + */ +StaticGraph100118::StaticGraph100118(GraphConfiguration100118* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100118, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysDolWithCvOuterNode.Init(&_graphConfiguration.isysDolWithCvOuterNodeConfiguration); + _lbffDolSmoothOuterNode.Init(&_graphConfiguration.lbffDolSmoothOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffDol3InputsNoGmvWithTnrWithSapOuterNode.Init( + &_graphConfiguration.lbffDol3InputsNoGmvWithTnrWithSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDolSmooth; + link->destNode = &_lbffDolSmoothOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffDolSmooth; + link->srcNode = &_lbffDolSmoothOuterNode; + link->srcTerminalId = 16; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[15]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[24]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[25]; + link->src = GraphElementType::LbffDol3InputsNoGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 26; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysDolWithCvOuterNode = &_isysDolWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffDolSmoothOuterNode = &_lbffDolSmoothOuterNode; + _imageSubGraph.lbffDol3InputsNoGmvWithTnrWithSapOuterNode = + &_lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysDolWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffDolSmoothOuterNode->contextId = 2; + _imageSubGraph.lbffDol3InputsNoGmvWithTnrWithSapOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100118::~StaticGraph100118() {} + +StaticGraphStatus imageSubGraphTopology100118::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffDol3InputsNoGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffDol3InputsNoGmvWithTnrWithSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffDol3InputsNoGmvWithTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[24]->linkConfiguration->bufferSize == 0 && true) { + lbffDol3InputsNoGmvWithTnrWithSapInnerOptions |= noMp; + } + if (subGraphLinks[25]->linkConfiguration->bufferSize == 0 && true) { + lbffDol3InputsNoGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffDol3InputsNoGmvWithTnrWithSapOuterNode->setInnerNode( + lbffDol3InputsNoGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[16]->isActive = + !(lbffDol3InputsNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Dol3Inputs_NoGmv_WithTnr_WithSap:terminal_connect_awb_sve_output + // -> awb_sve_out + subGraphLinks[17]->isActive = + !(lbffDol3InputsNoGmvWithTnrWithSapInnerOptions & + no3A); // lbff_Dol3Inputs_NoGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[18]->isActive = + !(lbffDol3InputsNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Dol3Inputs_NoGmv_WithTnr_WithSap:terminal_connect_af_std_output + // -> af_std_out + subGraphLinks[19]->isActive = + !(lbffDol3InputsNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Dol3Inputs_NoGmv_WithTnr_WithSap:terminal_connect_awb_std_output + // -> awb_std_out + subGraphLinks[20]->isActive = + !(lbffDol3InputsNoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Dol3Inputs_NoGmv_WithTnr_WithSap:terminal_connect_awb_sat_output + // -> awb_sat_out + subGraphLinks[24]->isActive = !( + lbffDol3InputsNoGmvWithTnrWithSapInnerOptions & + noMp); // lbff_Dol3Inputs_NoGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[25]->isActive = !( + lbffDol3InputsNoGmvWithTnrWithSapInnerOptions & + noDp); // lbff_Dol3Inputs_NoGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 26; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[21]->isActive = + (lbffDol3InputsNoGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Dol3Inputs_NoGmv_WithTnr_WithSap:terminal_connect_blend_output -> + // lbff_Dol3Inputs_NoGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[22]->isActive = + (lbffDol3InputsNoGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Dol3Inputs_NoGmv_WithTnr_WithSap:terminal_connect_bc_output -> + // lbff_Dol3Inputs_NoGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[23]->isActive = + (lbffDol3InputsNoGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Dol3Inputs_NoGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> + // lbff_Dol3Inputs_NoGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100118::updateSegmentAwareKernels() { + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[9]->isActive == false) { + lbffDol3InputsNoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffDol3InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffDol3InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= + 0x3000000; // Run kernel ids 24 (ifd_segmap_bnlm_1_4) and 25 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[10]->isActive == false) { + lbffDol3InputsNoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffDol3InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffDol3InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= + 0xC0000000; // Run kernel ids 30 (ifd_segmap_xnr_1_4) and 31 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[11]->isActive == false) { + lbffDol3InputsNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffDol3InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffDol3InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= + 0x1800000000; // Run kernel ids 35 (ifd_segmap_acm_1_4) and 36 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[12]->isActive == false) { + lbffDol3InputsNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffDol3InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffDol3InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= + 0x300000000000000; // Run kernel ids 56 (ifd_segmap_cas_1_4) and 57 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[13]->isActive == false) { + lbffDol3InputsNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffDol3InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffDol3InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= + 0x600000000000; // Run kernel ids 45 (ifd_segmap_tnr_bc_1_4) and 46 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[14]->isActive == false) { + lbffDol3InputsNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffDol3InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffDol3InputsNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= + 0x6000000000000; // Run kernel ids 49 (ifd_segmap_tnr_blend_1_4) and 50 + // (smurf_tnr_blend_1_0) + } + + lbffDol3InputsNoGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100119 + */ +StaticGraph100119::StaticGraph100119(GraphConfiguration100119* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100119, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysDolWithCvOuterNode.Init(&_graphConfiguration.isysDolWithCvOuterNodeConfiguration); + _lbffDolSmoothOuterNode.Init(&_graphConfiguration.lbffDolSmoothOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffDol3InputsWithGmvWithTnrWithSapOuterNode.Init( + &_graphConfiguration.lbffDol3InputsWithGmvWithTnrWithSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDolSmooth; + link->destNode = &_lbffDolSmoothOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::LbffDolSmooth; + link->srcNode = &_lbffDolSmoothOuterNode; + link->srcTerminalId = 16; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 5; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[12]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[14]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[15]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[24]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[25]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->destNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[26]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[27]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[28]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[29]; + link->src = GraphElementType::LbffDol3InputsWithGmvWithTnrWithSap; + link->srcNode = &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[30]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 31; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysDolWithCvOuterNode = &_isysDolWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffDolSmoothOuterNode = &_lbffDolSmoothOuterNode; + _imageSubGraph.lbffDol3InputsWithGmvWithTnrWithSapOuterNode = + &_lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysDolWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffDolSmoothOuterNode->contextId = 2; + _imageSubGraph.lbffDol3InputsWithGmvWithTnrWithSapOuterNode->contextId = 3; + _imageSubGraph.swGdcOuterNode->contextId = 4; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100119::~StaticGraph100119() {} + +StaticGraphStatus imageSubGraphTopology100119::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffDol3InputsWithGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffDol3InputsWithGmvWithTnrWithSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffDol3InputsWithGmvWithTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[26]->linkConfiguration->bufferSize == 0 && + subGraphLinks[28]->linkConfiguration->bufferSize == 0 && true) { + lbffDol3InputsWithGmvWithTnrWithSapInnerOptions |= noMp; + } + if (subGraphLinks[27]->linkConfiguration->bufferSize == 0 && + subGraphLinks[29]->linkConfiguration->bufferSize == 0 && true) { + lbffDol3InputsWithGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffDol3InputsWithGmvWithTnrWithSapOuterNode->setInnerNode( + lbffDol3InputsWithGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[16]->isActive = + !(lbffDol3InputsWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_WithTnr_WithSap:terminal_connect_awb_sve_output + // -> awb_sve_out + subGraphLinks[17]->isActive = + !(lbffDol3InputsWithGmvWithTnrWithSapInnerOptions & + no3A); // lbff_Dol3Inputs_WithGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[18]->isActive = + !(lbffDol3InputsWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_WithTnr_WithSap:terminal_connect_af_std_output + // -> af_std_out + subGraphLinks[19]->isActive = + !(lbffDol3InputsWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_WithTnr_WithSap:terminal_connect_awb_std_output + // -> awb_std_out + subGraphLinks[20]->isActive = + !(lbffDol3InputsWithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Dol3Inputs_WithGmv_WithTnr_WithSap:terminal_connect_awb_sat_output + // -> awb_sat_out + subGraphLinks[26]->isActive = + !(lbffDol3InputsWithGmvWithTnrWithSapInnerOptions & noMp); // lbff_Dol3Inputs_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output + // -> image_mp + subGraphLinks[28]->isActive = !(lbffDol3InputsWithGmvWithTnrWithSapInnerOptions & + noMp); // lbff_Dol3Inputs_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[27]->isActive = + !(lbffDol3InputsWithGmvWithTnrWithSapInnerOptions & noDp); // lbff_Dol3Inputs_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output + // -> image_dp + subGraphLinks[29]->isActive = !(lbffDol3InputsWithGmvWithTnrWithSapInnerOptions & + noDp); // lbff_Dol3Inputs_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output + // -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 31; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[21]->isActive = + (lbffDol3InputsWithGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Dol3Inputs_WithGmv_WithTnr_WithSap:terminal_connect_gmv_feature_output -> + // lbff_Dol3Inputs_WithGmv_WithTnr_WithSap:terminal_connect_gmv_input + subGraphLinks[23]->isActive = + (lbffDol3InputsWithGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Dol3Inputs_WithGmv_WithTnr_WithSap:terminal_connect_blend_output -> + // lbff_Dol3Inputs_WithGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[24]->isActive = + (lbffDol3InputsWithGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Dol3Inputs_WithGmv_WithTnr_WithSap:terminal_connect_bc_output -> + // lbff_Dol3Inputs_WithGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[25]->isActive = + (lbffDol3InputsWithGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Dol3Inputs_WithGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> + // lbff_Dol3Inputs_WithGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100119::updateSegmentAwareKernels() { + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[9]->isActive == false) { + lbffDol3InputsWithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffDol3InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffDol3InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= + 0x6000000; // Run kernel ids 25 (ifd_segmap_bnlm_1_4) and 26 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[10]->isActive == false) { + lbffDol3InputsWithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffDol3InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffDol3InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= + 0x180000000; // Run kernel ids 31 (ifd_segmap_xnr_1_4) and 32 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[11]->isActive == false) { + lbffDol3InputsWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffDol3InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffDol3InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= + 0x3000000000; // Run kernel ids 36 (ifd_segmap_acm_1_4) and 37 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[12]->isActive == false) { + lbffDol3InputsWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffDol3InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffDol3InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= + 0x3000000000000000; // Run kernel ids 60 (ifd_segmap_cas_1_4) and 61 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[13]->isActive == false) { + lbffDol3InputsWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffDol3InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffDol3InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= + 0x6000000000000; // Run kernel ids 49 (ifd_segmap_tnr_bc_1_4) and 50 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[14]->isActive == false) { + lbffDol3InputsWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffDol3InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffDol3InputsWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= + 0x60000000000000; // Run kernel ids 53 (ifd_segmap_tnr_blend_1_4) and 54 + // (smurf_tnr_blend_1_0) + } + + lbffDol3InputsWithGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100120 + */ +StaticGraph100120::StaticGraph100120(GraphConfiguration100120* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100120, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration), + _irSubGraph(_sinkMappingConfiguration), + _image_irSubGraph(_sinkMappingConfiguration) { + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffRgbIrNoGmvNoTnrWithSapOuterNode.Init( + &_graphConfiguration.lbffRgbIrNoGmvNoTnrWithSapOuterNodeConfiguration); + _lbffRgbIrIrNoGmvNoTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffRgbIrIrNoGmvNoTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + _imageSubGraph.links[0] = link; + _irSubGraph.links[0] = link; + _image_irSubGraph.links[0] = link; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + _imageSubGraph.links[1] = link; + _irSubGraph.links[1] = link; + _image_irSubGraph.links[1] = link; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + _imageSubGraph.links[2] = link; + _irSubGraph.links[2] = link; + _image_irSubGraph.links[2] = link; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffRgbIrNoGmvNoTnrWithSap; + link->destNode = &_lbffRgbIrNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + _imageSubGraph.links[3] = link; + _irSubGraph.links[3] = link; + _image_irSubGraph.links[3] = link; + + link = &_graphLinks[4]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffRgbIrNoGmvNoTnrWithSap; + link->destNode = &_lbffRgbIrNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + _imageSubGraph.links[4] = link; + _irSubGraph.links[4] = link; + _image_irSubGraph.links[4] = link; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffRgbIrNoGmvNoTnrWithSap; + link->destNode = &_lbffRgbIrNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + _imageSubGraph.links[5] = link; + _irSubGraph.links[5] = link; + _image_irSubGraph.links[5] = link; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffRgbIrNoGmvNoTnrWithSap; + link->destNode = &_lbffRgbIrNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + _imageSubGraph.links[6] = link; + _irSubGraph.links[6] = link; + _image_irSubGraph.links[6] = link; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffRgbIrNoGmvNoTnrWithSap; + link->destNode = &_lbffRgbIrNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + _imageSubGraph.links[7] = link; + _irSubGraph.links[7] = link; + _image_irSubGraph.links[7] = link; + + link = &_graphLinks[8]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffRgbIrNoGmvNoTnrWithSap; + link->destNode = &_lbffRgbIrNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + _imageSubGraph.links[8] = link; + _irSubGraph.links[8] = link; + _image_irSubGraph.links[8] = link; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffRgbIrNoGmvNoTnrWithSap; + link->srcNode = &_lbffRgbIrNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[9] = link; + _irSubGraph.links[9] = link; + _image_irSubGraph.links[9] = link; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffRgbIrNoGmvNoTnrWithSap; + link->srcNode = &_lbffRgbIrNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[10] = link; + _irSubGraph.links[10] = link; + _image_irSubGraph.links[10] = link; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffRgbIrNoGmvNoTnrWithSap; + link->srcNode = &_lbffRgbIrNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[11] = link; + _irSubGraph.links[11] = link; + _image_irSubGraph.links[11] = link; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffRgbIrNoGmvNoTnrWithSap; + link->srcNode = &_lbffRgbIrNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[12] = link; + _irSubGraph.links[12] = link; + _image_irSubGraph.links[12] = link; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffRgbIrNoGmvNoTnrWithSap; + link->srcNode = &_lbffRgbIrNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[13] = link; + _irSubGraph.links[13] = link; + _image_irSubGraph.links[13] = link; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffRgbIrNoGmvNoTnrWithSap; + link->srcNode = &_lbffRgbIrNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[14] = link; + _irSubGraph.links[14] = link; + _image_irSubGraph.links[14] = link; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffRgbIrNoGmvNoTnrWithSap; + link->srcNode = &_lbffRgbIrNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[15] = link; + _irSubGraph.links[15] = link; + _image_irSubGraph.links[15] = link; + + link = &_graphLinks[16]; + link->src = GraphElementType::LscBufferIr; + link->dest = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + _irSubGraph.links[16] = link; + _image_irSubGraph.links[16] = link; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffRgbIrNoGmvNoTnrWithSap; + link->srcNode = &_lbffRgbIrNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 14; + link->dest = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + _irSubGraph.links[17] = link; + _image_irSubGraph.links[17] = link; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::IrAeOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[18] = link; + _image_irSubGraph.links[18] = link; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::IrAfStdOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[19] = link; + _image_irSubGraph.links[19] = link; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::IrAwbStdOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[20] = link; + _image_irSubGraph.links[20] = link; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::IrAwbSatOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[21] = link; + _image_irSubGraph.links[21] = link; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::IrMp; + link->type = LinkType::Node2Sink; + _irSubGraph.links[22] = link; + _image_irSubGraph.links[22] = link; + + for (uint8_t i = 0; i < 23; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffRgbIrNoGmvNoTnrWithSapOuterNode = &_lbffRgbIrNoGmvNoTnrWithSapOuterNode; + _irSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _irSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _irSubGraph.lbffRgbIrNoGmvNoTnrWithSapOuterNode = &_lbffRgbIrNoGmvNoTnrWithSapOuterNode; + _irSubGraph.lbffRgbIrIrNoGmvNoTnrNoSapOuterNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + _image_irSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _image_irSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _image_irSubGraph.lbffRgbIrNoGmvNoTnrWithSapOuterNode = &_lbffRgbIrNoGmvNoTnrWithSapOuterNode; + _image_irSubGraph.lbffRgbIrIrNoGmvNoTnrNoSapOuterNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + + // choose the selected sub graph + if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.video != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.stills != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.thumbnail != + static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == + static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.previewIr == + static_cast(HwSink::Disconnected))) { + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffRgbIrNoGmvNoTnrWithSapOuterNode->contextId = 2; + } else if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.video == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.stills == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.thumbnail == + static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == + static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.previewIr != + static_cast(HwSink::Disconnected))) { + _selectedGraphTopology = &_irSubGraph; + + // logical node IDs + _irSubGraph.isysWithCvOuterNode->contextId = 0; + _irSubGraph.swSegnetOuterNode->contextId = 1; + _irSubGraph.lbffRgbIrNoGmvNoTnrWithSapOuterNode->contextId = 2; + _irSubGraph.lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->contextId = 3; + } else if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.video != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.stills != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.thumbnail != + static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == + static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.previewIr != + static_cast(HwSink::Disconnected))) { + _selectedGraphTopology = &_image_irSubGraph; + + // logical node IDs + _image_irSubGraph.isysWithCvOuterNode->contextId = 0; + _image_irSubGraph.swSegnetOuterNode->contextId = 1; + _image_irSubGraph.lbffRgbIrNoGmvNoTnrWithSapOuterNode->contextId = 2; + _image_irSubGraph.lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->contextId = 3; + } else { + STATIC_GRAPH_LOG("Didn't found a matching sub graph for the selected virtual sinks."); + } + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100120::~StaticGraph100120() {} + +StaticGraphStatus imageSubGraphTopology100120::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffRgbIrNoGmvNoTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrNoGmvNoTnrWithSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrNoGmvNoTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[14]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrNoGmvNoTnrWithSapInnerOptions |= noMp; + } + if (subGraphLinks[15]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrNoGmvNoTnrWithSapInnerOptions |= noDp; + } + // always active private inner options + lbffRgbIrNoGmvNoTnrWithSapInnerOptions |= (noIr); + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrNoGmvNoTnrWithSapOuterNode->setInnerNode(lbffRgbIrNoGmvNoTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[9]->isActive = + !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[10]->isActive = + !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[11]->isActive = + !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[12]->isActive = + !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[13]->isActive = + !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[14]->isActive = + !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & + noMp); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[15]->isActive = + !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & + noDp); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 16; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100120::updateSegmentAwareKernels() { + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[4]->isActive == false) { + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= + 0x180000; // Run kernel ids 19 (ifd_segmap_bnlm_1_4) and 20 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[5]->isActive == false) { + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= + 0x6000000; // Run kernel ids 25 (ifd_segmap_xnr_1_4) and 26 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[6]->isActive == false) { + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= + 0xC0000000; // Run kernel ids 30 (ifd_segmap_acm_1_4) and 31 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[7]->isActive == false) { + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= + 0xC000000000; // Run kernel ids 38 (ifd_segmap_cas_1_4) and 39 (smurf_cas_1_0) + } + + lbffRgbIrNoGmvNoTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus irSubGraphTopology100120::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags irPublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.irInnerOptions); + + /* + * Setting Node lbffRgbIrNoGmvNoTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrNoGmvNoTnrWithSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrNoGmvNoTnrWithSapInnerOptions |= (noPdaf); + // active public options according to sink mapping + if (subGraphLinks[14]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrNoGmvNoTnrWithSapInnerOptions |= noMp; + } + if (subGraphLinks[15]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrNoGmvNoTnrWithSapInnerOptions |= noDp; + } + + /* + * Setting Node lbffRgbIrIrNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions |= (noPdaf | noDp | noIr); + // active public options according to sink mapping + if (subGraphLinks[22]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions |= noMp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrNoGmvNoTnrWithSapOuterNode->setInnerNode(lbffRgbIrNoGmvNoTnrWithSapInnerOptions); + lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[9]->isActive = + !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[10]->isActive = + !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[11]->isActive = + !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[12]->isActive = + !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[13]->isActive = + !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[14]->isActive = + !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & + noMp); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[15]->isActive = + !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & + noDp); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[18]->isActive = + !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ir_ae_out + subGraphLinks[19]->isActive = + !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> ir_af_std_out + subGraphLinks[20]->isActive = !( + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> ir_awb_std_out + subGraphLinks[21]->isActive = !( + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> ir_awb_sat_out + subGraphLinks[22]->isActive = + !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & + noMp); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> ir_mp + + /* + * Link enablement by private inner options + */ + subGraphLinks[17]->isActive = + !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & + noIr); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_ir_output -> + // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_main_data_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 23; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus irSubGraphTopology100120::updateSegmentAwareKernels() { + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[4]->isActive == false) { + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= + 0x180000; // Run kernel ids 19 (ifd_segmap_bnlm_1_4) and 20 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[5]->isActive == false) { + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= + 0x6000000; // Run kernel ids 25 (ifd_segmap_xnr_1_4) and 26 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[6]->isActive == false) { + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= + 0xC0000000; // Run kernel ids 30 (ifd_segmap_acm_1_4) and 31 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[7]->isActive == false) { + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= + 0xC000000000; // Run kernel ids 38 (ifd_segmap_cas_1_4) and 39 (smurf_cas_1_0) + } + + lbffRgbIrNoGmvNoTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus image_irSubGraphTopology100120::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + InnerNodeOptionsFlags irPublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.irInnerOptions); + + /* + * Setting Node lbffRgbIrNoGmvNoTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrNoGmvNoTnrWithSapInnerOptions = None; + // active public inner options according to sink mapping + if (subGraphLinks[14]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrNoGmvNoTnrWithSapInnerOptions |= noMp; + } + if (subGraphLinks[15]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrNoGmvNoTnrWithSapInnerOptions |= noDp; + } + // combine inner options for the node common sub graphs + lbffRgbIrNoGmvNoTnrWithSapInnerOptions |= imagePublicInnerNodeConfiguration; + lbffRgbIrNoGmvNoTnrWithSapInnerOptions |= irPublicInnerNodeConfiguration; + + /* + * Setting Node lbffRgbIrIrNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions |= (noPdaf | noDp | noIr); + // active public options according to sink mapping + if (subGraphLinks[22]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions |= noMp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrNoGmvNoTnrWithSapOuterNode->setInnerNode(lbffRgbIrNoGmvNoTnrWithSapInnerOptions); + lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[9]->isActive = + !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[10]->isActive = + !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[11]->isActive = + !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[12]->isActive = + !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[13]->isActive = + !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[14]->isActive = + !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & + noMp); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[15]->isActive = + !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & + noDp); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[18]->isActive = + !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ir_ae_out + subGraphLinks[19]->isActive = + !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> ir_af_std_out + subGraphLinks[20]->isActive = !( + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> ir_awb_std_out + subGraphLinks[21]->isActive = !( + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> ir_awb_sat_out + subGraphLinks[22]->isActive = + !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & + noMp); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> ir_mp + + /* + * Link enablement by private inner options + */ + subGraphLinks[17]->isActive = + !(lbffRgbIrNoGmvNoTnrWithSapInnerOptions & + noIr); // lbff_RgbIr_NoGmv_NoTnr_WithSap:terminal_connect_ir_output -> + // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_main_data_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 23; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus image_irSubGraphTopology100120::updateSegmentAwareKernels() { + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[4]->isActive == false) { + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= + 0x180000; // Run kernel ids 19 (ifd_segmap_bnlm_1_4) and 20 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[5]->isActive == false) { + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= + 0x6000000; // Run kernel ids 25 (ifd_segmap_xnr_1_4) and 26 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[6]->isActive == false) { + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= + 0xC0000000; // Run kernel ids 30 (ifd_segmap_acm_1_4) and 31 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[7]->isActive == false) { + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffRgbIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= + 0xC000000000; // Run kernel ids 38 (ifd_segmap_cas_1_4) and 39 (smurf_cas_1_0) + } + + lbffRgbIrNoGmvNoTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100121 + */ +StaticGraph100121::StaticGraph100121(GraphConfiguration100121* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100121, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration), + _irSubGraph(_sinkMappingConfiguration), + _image_irSubGraph(_sinkMappingConfiguration) { + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffRgbIrWithGmvNoTnrWithSapOuterNode.Init( + &_graphConfiguration.lbffRgbIrWithGmvNoTnrWithSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + _lbffRgbIrIrNoGmvNoTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffRgbIrIrNoGmvNoTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + _imageSubGraph.links[0] = link; + _irSubGraph.links[0] = link; + _image_irSubGraph.links[0] = link; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + _imageSubGraph.links[1] = link; + _irSubGraph.links[1] = link; + _image_irSubGraph.links[1] = link; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + _imageSubGraph.links[2] = link; + _irSubGraph.links[2] = link; + _image_irSubGraph.links[2] = link; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffRgbIrWithGmvNoTnrWithSap; + link->destNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + _imageSubGraph.links[3] = link; + _irSubGraph.links[3] = link; + _image_irSubGraph.links[3] = link; + + link = &_graphLinks[4]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffRgbIrWithGmvNoTnrWithSap; + link->destNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + _imageSubGraph.links[4] = link; + _irSubGraph.links[4] = link; + _image_irSubGraph.links[4] = link; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffRgbIrWithGmvNoTnrWithSap; + link->destNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + _imageSubGraph.links[5] = link; + _irSubGraph.links[5] = link; + _image_irSubGraph.links[5] = link; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffRgbIrWithGmvNoTnrWithSap; + link->destNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + _imageSubGraph.links[6] = link; + _irSubGraph.links[6] = link; + _image_irSubGraph.links[6] = link; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffRgbIrWithGmvNoTnrWithSap; + link->destNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + _imageSubGraph.links[7] = link; + _irSubGraph.links[7] = link; + _image_irSubGraph.links[7] = link; + + link = &_graphLinks[8]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffRgbIrWithGmvNoTnrWithSap; + link->destNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + _imageSubGraph.links[8] = link; + _irSubGraph.links[8] = link; + _image_irSubGraph.links[8] = link; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[9] = link; + _irSubGraph.links[9] = link; + _image_irSubGraph.links[9] = link; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[10] = link; + _irSubGraph.links[10] = link; + _image_irSubGraph.links[10] = link; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[11] = link; + _irSubGraph.links[11] = link; + _image_irSubGraph.links[11] = link; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[12] = link; + _irSubGraph.links[12] = link; + _image_irSubGraph.links[12] = link; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[13] = link; + _irSubGraph.links[13] = link; + _image_irSubGraph.links[13] = link; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffRgbIrWithGmvNoTnrWithSap; + link->destNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _imageSubGraph.links[14] = link; + _irSubGraph.links[14] = link; + _image_irSubGraph.links[14] = link; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[15] = link; + _irSubGraph.links[15] = link; + _image_irSubGraph.links[15] = link; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[16] = link; + _irSubGraph.links[16] = link; + _image_irSubGraph.links[16] = link; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[17] = link; + _irSubGraph.links[17] = link; + _image_irSubGraph.links[17] = link; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + _imageSubGraph.links[18] = link; + _image_irSubGraph.links[18] = link; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + _imageSubGraph.links[19] = link; + _image_irSubGraph.links[19] = link; + + link = &_graphLinks[20]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[20] = link; + _image_irSubGraph.links[20] = link; + + link = &_graphLinks[21]; + link->src = GraphElementType::LscBufferIr; + link->dest = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + _irSubGraph.links[18] = link; + _image_irSubGraph.links[21] = link; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffRgbIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 14; + link->dest = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + _irSubGraph.links[19] = link; + _image_irSubGraph.links[22] = link; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::IrAeOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[20] = link; + _image_irSubGraph.links[23] = link; + + link = &_graphLinks[24]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::IrAfStdOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[21] = link; + _image_irSubGraph.links[24] = link; + + link = &_graphLinks[25]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::IrAwbStdOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[22] = link; + _image_irSubGraph.links[25] = link; + + link = &_graphLinks[26]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::IrAwbSatOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[23] = link; + _image_irSubGraph.links[26] = link; + + link = &_graphLinks[27]; + link->src = GraphElementType::LbffRgbIrIrNoGmvNoTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::IrMp; + link->type = LinkType::Node2Sink; + _irSubGraph.links[24] = link; + _image_irSubGraph.links[27] = link; + + for (uint8_t i = 0; i < 28; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffRgbIrWithGmvNoTnrWithSapOuterNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + _irSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _irSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _irSubGraph.lbffRgbIrWithGmvNoTnrWithSapOuterNode = &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + _irSubGraph.lbffRgbIrIrNoGmvNoTnrNoSapOuterNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + _image_irSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _image_irSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _image_irSubGraph.lbffRgbIrWithGmvNoTnrWithSapOuterNode = + &_lbffRgbIrWithGmvNoTnrWithSapOuterNode; + _image_irSubGraph.swGdcOuterNode = &_swGdcOuterNode; + _image_irSubGraph.lbffRgbIrIrNoGmvNoTnrNoSapOuterNode = &_lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + + // choose the selected sub graph + if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.video != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.stills != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.thumbnail != + static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == + static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.previewIr == + static_cast(HwSink::Disconnected))) { + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffRgbIrWithGmvNoTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + } else if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.video == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.stills == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.thumbnail == + static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == + static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.previewIr != + static_cast(HwSink::Disconnected))) { + _selectedGraphTopology = &_irSubGraph; + + // logical node IDs + _irSubGraph.isysWithCvOuterNode->contextId = 0; + _irSubGraph.swSegnetOuterNode->contextId = 1; + _irSubGraph.lbffRgbIrWithGmvNoTnrWithSapOuterNode->contextId = 2; + _irSubGraph.lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->contextId = 3; + } else if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.video != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.stills != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.thumbnail != + static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == + static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.previewIr != + static_cast(HwSink::Disconnected))) { + _selectedGraphTopology = &_image_irSubGraph; + + // logical node IDs + _image_irSubGraph.isysWithCvOuterNode->contextId = 0; + _image_irSubGraph.swSegnetOuterNode->contextId = 1; + _image_irSubGraph.lbffRgbIrWithGmvNoTnrWithSapOuterNode->contextId = 2; + _image_irSubGraph.swGdcOuterNode->contextId = 3; + _image_irSubGraph.lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->contextId = 4; + } else { + STATIC_GRAPH_LOG("Didn't found a matching sub graph for the selected virtual sinks."); + } + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100121::~StaticGraph100121() {} + +StaticGraphStatus imageSubGraphTopology100121::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffRgbIrWithGmvNoTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrWithGmvNoTnrWithSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrWithGmvNoTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + subGraphLinks[18]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrWithGmvNoTnrWithSapInnerOptions |= noMp; + } + if (subGraphLinks[17]->linkConfiguration->bufferSize == 0 && + subGraphLinks[19]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrWithGmvNoTnrWithSapInnerOptions |= noDp; + } + // always active private inner options + lbffRgbIrWithGmvNoTnrWithSapInnerOptions |= (noIr); + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrWithGmvNoTnrWithSapOuterNode->setInnerNode(lbffRgbIrWithGmvNoTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[9]->isActive = + !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[10]->isActive = + !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[11]->isActive = + !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[12]->isActive = + !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[13]->isActive = + !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[16]->isActive = + !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & + noMp); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[18]->isActive = + !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & noMp); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[17]->isActive = + !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & + noDp); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[19]->isActive = + !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & noDp); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output + // -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 21; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[14]->isActive = + (lbffRgbIrWithGmvNoTnrWithSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_gmv_feature_output -> + // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_gmv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100121::updateSegmentAwareKernels() { + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[4]->isActive == false) { + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= + 0x300000; // Run kernel ids 20 (ifd_segmap_bnlm_1_4) and 21 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[5]->isActive == false) { + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= + 0xC000000; // Run kernel ids 26 (ifd_segmap_xnr_1_4) and 27 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[6]->isActive == false) { + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= + 0x180000000; // Run kernel ids 31 (ifd_segmap_acm_1_4) and 32 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[7]->isActive == false) { + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= + 0xC0000000000; // Run kernel ids 42 (ifd_segmap_cas_1_4) and 43 (smurf_cas_1_0) + } + + lbffRgbIrWithGmvNoTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus irSubGraphTopology100121::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags irPublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.irInnerOptions); + + /* + * Setting Node lbffRgbIrWithGmvNoTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrWithGmvNoTnrWithSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrWithGmvNoTnrWithSapInnerOptions |= (noPdaf); + // active public options according to sink mapping + if (subGraphLinks[16]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrWithGmvNoTnrWithSapInnerOptions |= noMp; + } + if (subGraphLinks[17]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrWithGmvNoTnrWithSapInnerOptions |= noDp; + } + + /* + * Setting Node lbffRgbIrIrNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions |= (noPdaf | noDp | noIr); + // active public options according to sink mapping + if (subGraphLinks[24]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions |= noMp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrWithGmvNoTnrWithSapOuterNode->setInnerNode(lbffRgbIrWithGmvNoTnrWithSapInnerOptions); + lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[9]->isActive = + !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[10]->isActive = + !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[11]->isActive = + !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[12]->isActive = + !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[13]->isActive = + !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[16]->isActive = + !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & + noMp); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[17]->isActive = + !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & + noDp); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[20]->isActive = + !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ir_ae_out + subGraphLinks[21]->isActive = + !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> ir_af_std_out + subGraphLinks[22]->isActive = !( + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> ir_awb_std_out + subGraphLinks[23]->isActive = !( + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> ir_awb_sat_out + subGraphLinks[24]->isActive = + !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & + noMp); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> ir_mp + + /* + * Link enablement by private inner options + */ + subGraphLinks[19]->isActive = + !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & + noIr); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_ir_output -> + // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_main_data_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 25; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[14]->isActive = + (lbffRgbIrWithGmvNoTnrWithSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_gmv_feature_output -> + // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_gmv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus irSubGraphTopology100121::updateSegmentAwareKernels() { + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[4]->isActive == false) { + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= + 0x300000; // Run kernel ids 20 (ifd_segmap_bnlm_1_4) and 21 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[5]->isActive == false) { + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= + 0xC000000; // Run kernel ids 26 (ifd_segmap_xnr_1_4) and 27 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[6]->isActive == false) { + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= + 0x180000000; // Run kernel ids 31 (ifd_segmap_acm_1_4) and 32 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[7]->isActive == false) { + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= + 0xC0000000000; // Run kernel ids 42 (ifd_segmap_cas_1_4) and 43 (smurf_cas_1_0) + } + + lbffRgbIrWithGmvNoTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus image_irSubGraphTopology100121::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + InnerNodeOptionsFlags irPublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.irInnerOptions); + + /* + * Setting Node lbffRgbIrWithGmvNoTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrWithGmvNoTnrWithSapInnerOptions = None; + // active public inner options according to sink mapping + if (subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + subGraphLinks[18]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrWithGmvNoTnrWithSapInnerOptions |= noMp; + } + if (subGraphLinks[17]->linkConfiguration->bufferSize == 0 && + subGraphLinks[19]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrWithGmvNoTnrWithSapInnerOptions |= noDp; + } + // combine inner options for the node common sub graphs + lbffRgbIrWithGmvNoTnrWithSapInnerOptions |= imagePublicInnerNodeConfiguration; + lbffRgbIrWithGmvNoTnrWithSapInnerOptions |= irPublicInnerNodeConfiguration; + + /* + * Setting Node lbffRgbIrIrNoGmvNoTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions |= (noPdaf | noDp | noIr); + // active public options according to sink mapping + if (subGraphLinks[27]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions |= noMp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrWithGmvNoTnrWithSapOuterNode->setInnerNode(lbffRgbIrWithGmvNoTnrWithSapInnerOptions); + lbffRgbIrIrNoGmvNoTnrNoSapOuterNode->setInnerNode(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[9]->isActive = + !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[10]->isActive = + !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[11]->isActive = + !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[12]->isActive = + !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[13]->isActive = + !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[16]->isActive = + !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & + noMp); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[18]->isActive = + !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & noMp); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[17]->isActive = + !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & + noDp); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[19]->isActive = + !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & noDp); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[23]->isActive = + !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ae_output -> ir_ae_out + subGraphLinks[24]->isActive = + !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_af_std_output -> ir_af_std_out + subGraphLinks[25]->isActive = !( + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_std_output -> ir_awb_std_out + subGraphLinks[26]->isActive = !( + lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_awb_sat_output -> ir_awb_sat_out + subGraphLinks[27]->isActive = + !(lbffRgbIrIrNoGmvNoTnrNoSapInnerOptions & + noMp); // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_ofs_mp_output -> ir_mp + + /* + * Link enablement by private inner options + */ + subGraphLinks[22]->isActive = + !(lbffRgbIrWithGmvNoTnrWithSapInnerOptions & + noIr); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_ir_output -> + // lbff_RgbIr_Ir_NoGmv_NoTnr_NoSap:terminal_connect_main_data_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 28; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[14]->isActive = + (lbffRgbIrWithGmvNoTnrWithSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_gmv_feature_output -> + // lbff_RgbIr_WithGmv_NoTnr_WithSap:terminal_connect_gmv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus image_irSubGraphTopology100121::updateSegmentAwareKernels() { + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[4]->isActive == false) { + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= + 0x300000; // Run kernel ids 20 (ifd_segmap_bnlm_1_4) and 21 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[5]->isActive == false) { + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= + 0xC000000; // Run kernel ids 26 (ifd_segmap_xnr_1_4) and 27 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[6]->isActive == false) { + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= + 0x180000000; // Run kernel ids 31 (ifd_segmap_acm_1_4) and 32 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[7]->isActive == false) { + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffRgbIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= + 0xC0000000000; // Run kernel ids 42 (ifd_segmap_cas_1_4) and 43 (smurf_cas_1_0) + } + + lbffRgbIrWithGmvNoTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100122 + */ +StaticGraph100122::StaticGraph100122(GraphConfiguration100122* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100122, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration), + _irSubGraph(_sinkMappingConfiguration), + _image_irSubGraph(_sinkMappingConfiguration) { + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffRgbIrNoGmvWithTnrWithSapOuterNode.Init( + &_graphConfiguration.lbffRgbIrNoGmvWithTnrWithSapOuterNodeConfiguration); + _lbffRgbIrIrNoGmvWithTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffRgbIrIrNoGmvWithTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + _imageSubGraph.links[0] = link; + _irSubGraph.links[0] = link; + _image_irSubGraph.links[0] = link; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + _imageSubGraph.links[1] = link; + _irSubGraph.links[1] = link; + _image_irSubGraph.links[1] = link; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + _imageSubGraph.links[2] = link; + _irSubGraph.links[2] = link; + _image_irSubGraph.links[2] = link; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + _imageSubGraph.links[3] = link; + _irSubGraph.links[3] = link; + _image_irSubGraph.links[3] = link; + + link = &_graphLinks[4]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + _imageSubGraph.links[4] = link; + _irSubGraph.links[4] = link; + _image_irSubGraph.links[4] = link; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + _imageSubGraph.links[5] = link; + _irSubGraph.links[5] = link; + _image_irSubGraph.links[5] = link; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + _imageSubGraph.links[6] = link; + _irSubGraph.links[6] = link; + _image_irSubGraph.links[6] = link; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + _imageSubGraph.links[7] = link; + _irSubGraph.links[7] = link; + _image_irSubGraph.links[7] = link; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + _imageSubGraph.links[8] = link; + _irSubGraph.links[8] = link; + _image_irSubGraph.links[8] = link; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + _imageSubGraph.links[9] = link; + _irSubGraph.links[9] = link; + _image_irSubGraph.links[9] = link; + + link = &_graphLinks[10]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + _imageSubGraph.links[10] = link; + _irSubGraph.links[10] = link; + _image_irSubGraph.links[10] = link; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[11] = link; + _irSubGraph.links[11] = link; + _image_irSubGraph.links[11] = link; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[12] = link; + _irSubGraph.links[12] = link; + _image_irSubGraph.links[12] = link; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[13] = link; + _irSubGraph.links[13] = link; + _image_irSubGraph.links[13] = link; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[14] = link; + _irSubGraph.links[14] = link; + _image_irSubGraph.links[14] = link; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[15] = link; + _irSubGraph.links[15] = link; + _image_irSubGraph.links[15] = link; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _imageSubGraph.links[16] = link; + _irSubGraph.links[16] = link; + _image_irSubGraph.links[16] = link; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _imageSubGraph.links[17] = link; + _irSubGraph.links[17] = link; + _image_irSubGraph.links[17] = link; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _imageSubGraph.links[18] = link; + _irSubGraph.links[18] = link; + _image_irSubGraph.links[18] = link; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[19] = link; + _irSubGraph.links[19] = link; + _image_irSubGraph.links[19] = link; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[20] = link; + _irSubGraph.links[20] = link; + _image_irSubGraph.links[20] = link; + + link = &_graphLinks[21]; + link->src = GraphElementType::LscBufferIr; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + _irSubGraph.links[21] = link; + _image_irSubGraph.links[21] = link; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffRgbIrNoGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 14; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + _irSubGraph.links[22] = link; + _image_irSubGraph.links[22] = link; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::IrAeOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[23] = link; + _image_irSubGraph.links[23] = link; + + link = &_graphLinks[24]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::IrAfStdOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[24] = link; + _image_irSubGraph.links[24] = link; + + link = &_graphLinks[25]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::IrAwbStdOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[25] = link; + _image_irSubGraph.links[25] = link; + + link = &_graphLinks[26]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::IrAwbSatOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[26] = link; + _image_irSubGraph.links[26] = link; + + link = &_graphLinks[27]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _irSubGraph.links[27] = link; + _image_irSubGraph.links[27] = link; + + link = &_graphLinks[28]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _irSubGraph.links[28] = link; + _image_irSubGraph.links[28] = link; + + link = &_graphLinks[29]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _irSubGraph.links[29] = link; + _image_irSubGraph.links[29] = link; + + link = &_graphLinks[30]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::IrMp; + link->type = LinkType::Node2Sink; + _irSubGraph.links[30] = link; + _image_irSubGraph.links[30] = link; + + for (uint8_t i = 0; i < 31; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffRgbIrNoGmvWithTnrWithSapOuterNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + _irSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _irSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _irSubGraph.lbffRgbIrNoGmvWithTnrWithSapOuterNode = &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + _irSubGraph.lbffRgbIrIrNoGmvWithTnrNoSapOuterNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + _image_irSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _image_irSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _image_irSubGraph.lbffRgbIrNoGmvWithTnrWithSapOuterNode = + &_lbffRgbIrNoGmvWithTnrWithSapOuterNode; + _image_irSubGraph.lbffRgbIrIrNoGmvWithTnrNoSapOuterNode = + &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + + // choose the selected sub graph + if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.video != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.stills != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.thumbnail != + static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == + static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.previewIr == + static_cast(HwSink::Disconnected))) { + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffRgbIrNoGmvWithTnrWithSapOuterNode->contextId = 2; + } else if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.video == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.stills == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.thumbnail == + static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == + static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.previewIr != + static_cast(HwSink::Disconnected))) { + _selectedGraphTopology = &_irSubGraph; + + // logical node IDs + _irSubGraph.isysWithCvOuterNode->contextId = 0; + _irSubGraph.swSegnetOuterNode->contextId = 1; + _irSubGraph.lbffRgbIrNoGmvWithTnrWithSapOuterNode->contextId = 2; + _irSubGraph.lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->contextId = 3; + } else if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.video != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.stills != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.thumbnail != + static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == + static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.previewIr != + static_cast(HwSink::Disconnected))) { + _selectedGraphTopology = &_image_irSubGraph; + + // logical node IDs + _image_irSubGraph.isysWithCvOuterNode->contextId = 0; + _image_irSubGraph.swSegnetOuterNode->contextId = 1; + _image_irSubGraph.lbffRgbIrNoGmvWithTnrWithSapOuterNode->contextId = 2; + _image_irSubGraph.lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->contextId = 3; + } else { + STATIC_GRAPH_LOG("Didn't found a matching sub graph for the selected virtual sinks."); + } + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100122::~StaticGraph100122() {} + +StaticGraphStatus imageSubGraphTopology100122::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffRgbIrNoGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrNoGmvWithTnrWithSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrNoGmvWithTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[19]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrNoGmvWithTnrWithSapInnerOptions |= noMp; + } + if (subGraphLinks[20]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrNoGmvWithTnrWithSapInnerOptions |= noDp; + } + // always active private inner options + lbffRgbIrNoGmvWithTnrWithSapInnerOptions |= (noIr); + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrNoGmvWithTnrWithSapOuterNode->setInnerNode(lbffRgbIrNoGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[11]->isActive = + !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[12]->isActive = + !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[13]->isActive = + !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[14]->isActive = + !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[15]->isActive = + !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[19]->isActive = + !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & + noMp); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[20]->isActive = + !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & + noDp); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 21; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[16]->isActive = + (lbffRgbIrNoGmvWithTnrWithSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_blend_output -> + // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[17]->isActive = + (lbffRgbIrNoGmvWithTnrWithSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_bc_output -> + // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[18]->isActive = + (lbffRgbIrNoGmvWithTnrWithSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> + // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100122::updateSegmentAwareKernels() { + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[4]->isActive == false) { + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= + 0xC00000; // Run kernel ids 22 (ifd_segmap_bnlm_1_4) and 23 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[5]->isActive == false) { + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= + 0x30000000; // Run kernel ids 28 (ifd_segmap_xnr_1_4) and 29 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[6]->isActive == false) { + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= + 0x600000000; // Run kernel ids 33 (ifd_segmap_acm_1_4) and 34 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[7]->isActive == false) { + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= + 0xC0000000000000; // Run kernel ids 54 (ifd_segmap_cas_1_4) and 55 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[8]->isActive == false) { + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= + 0x180000000000; // Run kernel ids 43 (ifd_segmap_tnr_bc_1_4) and 44 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[9]->isActive == false) { + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= + 0x1800000000000; // Run kernel ids 47 (ifd_segmap_tnr_blend_1_4) and 48 + // (smurf_tnr_blend_1_0) + } + + lbffRgbIrNoGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus irSubGraphTopology100122::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags irPublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.irInnerOptions); + + /* + * Setting Node lbffRgbIrNoGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrNoGmvWithTnrWithSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrNoGmvWithTnrWithSapInnerOptions |= (noPdaf); + // active public options according to sink mapping + if (subGraphLinks[19]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrNoGmvWithTnrWithSapInnerOptions |= noMp; + } + if (subGraphLinks[20]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrNoGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Setting Node lbffRgbIrIrNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noDp | noIr); + // active public options according to sink mapping + if (subGraphLinks[30]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions |= noMp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrNoGmvWithTnrWithSapOuterNode->setInnerNode(lbffRgbIrNoGmvWithTnrWithSapInnerOptions); + lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[11]->isActive = + !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[12]->isActive = + !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[13]->isActive = + !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[14]->isActive = + !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[15]->isActive = + !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[19]->isActive = + !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & + noMp); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[20]->isActive = + !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & + noDp); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[23]->isActive = + !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ir_ae_out + subGraphLinks[24]->isActive = !( + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> ir_af_std_out + subGraphLinks[25]->isActive = + !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output + // -> ir_awb_std_out + subGraphLinks[26]->isActive = + !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output + // -> ir_awb_sat_out + subGraphLinks[30]->isActive = + !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & + noMp); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> ir_mp + + /* + * Link enablement by private inner options + */ + subGraphLinks[22]->isActive = + !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & + noIr); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_ir_output -> + // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_main_data_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 31; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[16]->isActive = + (lbffRgbIrNoGmvWithTnrWithSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_blend_output -> + // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[17]->isActive = + (lbffRgbIrNoGmvWithTnrWithSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_bc_output -> + // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[18]->isActive = + (lbffRgbIrNoGmvWithTnrWithSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> + // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + subGraphLinks[27]->isActive = + (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> + // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[28]->isActive = + (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> + // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[29]->isActive = + (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output + // -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus irSubGraphTopology100122::updateSegmentAwareKernels() { + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[4]->isActive == false) { + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= + 0xC00000; // Run kernel ids 22 (ifd_segmap_bnlm_1_4) and 23 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[5]->isActive == false) { + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= + 0x30000000; // Run kernel ids 28 (ifd_segmap_xnr_1_4) and 29 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[6]->isActive == false) { + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= + 0x600000000; // Run kernel ids 33 (ifd_segmap_acm_1_4) and 34 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[7]->isActive == false) { + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= + 0xC0000000000000; // Run kernel ids 54 (ifd_segmap_cas_1_4) and 55 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[8]->isActive == false) { + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= + 0x180000000000; // Run kernel ids 43 (ifd_segmap_tnr_bc_1_4) and 44 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[9]->isActive == false) { + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= + 0x1800000000000; // Run kernel ids 47 (ifd_segmap_tnr_blend_1_4) and 48 + // (smurf_tnr_blend_1_0) + } + + lbffRgbIrNoGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus image_irSubGraphTopology100122::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + InnerNodeOptionsFlags irPublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.irInnerOptions); + + /* + * Setting Node lbffRgbIrNoGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrNoGmvWithTnrWithSapInnerOptions = None; + // active public inner options according to sink mapping + if (subGraphLinks[19]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrNoGmvWithTnrWithSapInnerOptions |= noMp; + } + if (subGraphLinks[20]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrNoGmvWithTnrWithSapInnerOptions |= noDp; + } + // combine inner options for the node common sub graphs + lbffRgbIrNoGmvWithTnrWithSapInnerOptions |= imagePublicInnerNodeConfiguration; + lbffRgbIrNoGmvWithTnrWithSapInnerOptions |= irPublicInnerNodeConfiguration; + + /* + * Setting Node lbffRgbIrIrNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noDp | noIr); + // active public options according to sink mapping + if (subGraphLinks[30]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions |= noMp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrNoGmvWithTnrWithSapOuterNode->setInnerNode(lbffRgbIrNoGmvWithTnrWithSapInnerOptions); + lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[11]->isActive = + !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[12]->isActive = + !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[13]->isActive = + !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[14]->isActive = + !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[15]->isActive = + !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[19]->isActive = + !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & + noMp); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[20]->isActive = + !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & + noDp); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[23]->isActive = + !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ir_ae_out + subGraphLinks[24]->isActive = !( + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> ir_af_std_out + subGraphLinks[25]->isActive = + !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output + // -> ir_awb_std_out + subGraphLinks[26]->isActive = + !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output + // -> ir_awb_sat_out + subGraphLinks[30]->isActive = + !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & + noMp); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> ir_mp + + /* + * Link enablement by private inner options + */ + subGraphLinks[22]->isActive = + !(lbffRgbIrNoGmvWithTnrWithSapInnerOptions & + noIr); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_ir_output -> + // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_main_data_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 31; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[16]->isActive = + (lbffRgbIrNoGmvWithTnrWithSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_blend_output -> + // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[17]->isActive = + (lbffRgbIrNoGmvWithTnrWithSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_bc_output -> + // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[18]->isActive = + (lbffRgbIrNoGmvWithTnrWithSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> + // lbff_RgbIr_NoGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + subGraphLinks[27]->isActive = + (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> + // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[28]->isActive = + (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> + // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[29]->isActive = + (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output + // -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus image_irSubGraphTopology100122::updateSegmentAwareKernels() { + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[4]->isActive == false) { + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= + 0xC00000; // Run kernel ids 22 (ifd_segmap_bnlm_1_4) and 23 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[5]->isActive == false) { + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= + 0x30000000; // Run kernel ids 28 (ifd_segmap_xnr_1_4) and 29 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[6]->isActive == false) { + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= + 0x600000000; // Run kernel ids 33 (ifd_segmap_acm_1_4) and 34 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[7]->isActive == false) { + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= + 0xC0000000000000; // Run kernel ids 54 (ifd_segmap_cas_1_4) and 55 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[8]->isActive == false) { + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= + 0x180000000000; // Run kernel ids 43 (ifd_segmap_tnr_bc_1_4) and 44 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[9]->isActive == false) { + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffRgbIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= + 0x1800000000000; // Run kernel ids 47 (ifd_segmap_tnr_blend_1_4) and 48 + // (smurf_tnr_blend_1_0) + } + + lbffRgbIrNoGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100123 + */ +StaticGraph100123::StaticGraph100123(GraphConfiguration100123* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100123, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration), + _irSubGraph(_sinkMappingConfiguration), + _image_irSubGraph(_sinkMappingConfiguration) { + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffRgbIrWithGmvWithTnrWithSapOuterNode.Init( + &_graphConfiguration.lbffRgbIrWithGmvWithTnrWithSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + _lbffRgbIrIrNoGmvWithTnrNoSapOuterNode.Init( + &_graphConfiguration.lbffRgbIrIrNoGmvWithTnrNoSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + _imageSubGraph.links[0] = link; + _irSubGraph.links[0] = link; + _image_irSubGraph.links[0] = link; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + _imageSubGraph.links[1] = link; + _irSubGraph.links[1] = link; + _image_irSubGraph.links[1] = link; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + _imageSubGraph.links[2] = link; + _irSubGraph.links[2] = link; + _image_irSubGraph.links[2] = link; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + _imageSubGraph.links[3] = link; + _irSubGraph.links[3] = link; + _image_irSubGraph.links[3] = link; + + link = &_graphLinks[4]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + _imageSubGraph.links[4] = link; + _irSubGraph.links[4] = link; + _image_irSubGraph.links[4] = link; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + _imageSubGraph.links[5] = link; + _irSubGraph.links[5] = link; + _image_irSubGraph.links[5] = link; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + _imageSubGraph.links[6] = link; + _irSubGraph.links[6] = link; + _image_irSubGraph.links[6] = link; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + _imageSubGraph.links[7] = link; + _irSubGraph.links[7] = link; + _image_irSubGraph.links[7] = link; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + _imageSubGraph.links[8] = link; + _irSubGraph.links[8] = link; + _image_irSubGraph.links[8] = link; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + _imageSubGraph.links[9] = link; + _irSubGraph.links[9] = link; + _image_irSubGraph.links[9] = link; + + link = &_graphLinks[10]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + _imageSubGraph.links[10] = link; + _irSubGraph.links[10] = link; + _image_irSubGraph.links[10] = link; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 18; + link->dest = GraphElementType::AwbSveOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[11] = link; + _irSubGraph.links[11] = link; + _image_irSubGraph.links[11] = link; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[12] = link; + _irSubGraph.links[12] = link; + _image_irSubGraph.links[12] = link; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[13] = link; + _irSubGraph.links[13] = link; + _image_irSubGraph.links[13] = link; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[14] = link; + _irSubGraph.links[14] = link; + _image_irSubGraph.links[14] = link; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[15] = link; + _irSubGraph.links[15] = link; + _image_irSubGraph.links[15] = link; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _imageSubGraph.links[16] = link; + _irSubGraph.links[16] = link; + _image_irSubGraph.links[16] = link; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[17] = link; + _irSubGraph.links[17] = link; + _image_irSubGraph.links[17] = link; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _imageSubGraph.links[18] = link; + _irSubGraph.links[18] = link; + _image_irSubGraph.links[18] = link; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _imageSubGraph.links[19] = link; + _irSubGraph.links[19] = link; + _image_irSubGraph.links[19] = link; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->destNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _imageSubGraph.links[20] = link; + _irSubGraph.links[20] = link; + _image_irSubGraph.links[20] = link; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[21] = link; + _irSubGraph.links[21] = link; + _image_irSubGraph.links[21] = link; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[22] = link; + _irSubGraph.links[22] = link; + _image_irSubGraph.links[22] = link; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + _imageSubGraph.links[23] = link; + _image_irSubGraph.links[23] = link; + + link = &_graphLinks[24]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + _imageSubGraph.links[24] = link; + _image_irSubGraph.links[24] = link; + + link = &_graphLinks[25]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + _imageSubGraph.links[25] = link; + _image_irSubGraph.links[25] = link; + + link = &_graphLinks[26]; + link->src = GraphElementType::LscBufferIr; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + _irSubGraph.links[23] = link; + _image_irSubGraph.links[26] = link; + + link = &_graphLinks[27]; + link->src = GraphElementType::LbffRgbIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 14; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + _irSubGraph.links[24] = link; + _image_irSubGraph.links[27] = link; + + link = &_graphLinks[28]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::IrAeOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[25] = link; + _image_irSubGraph.links[28] = link; + + link = &_graphLinks[29]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::IrAfStdOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[26] = link; + _image_irSubGraph.links[29] = link; + + link = &_graphLinks[30]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::IrAwbStdOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[27] = link; + _image_irSubGraph.links[30] = link; + + link = &_graphLinks[31]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::IrAwbSatOut; + link->type = LinkType::Node2Sink; + _irSubGraph.links[28] = link; + _image_irSubGraph.links[31] = link; + + link = &_graphLinks[32]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _irSubGraph.links[29] = link; + _image_irSubGraph.links[32] = link; + + link = &_graphLinks[33]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _irSubGraph.links[30] = link; + _image_irSubGraph.links[33] = link; + + link = &_graphLinks[34]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->destNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + _irSubGraph.links[31] = link; + _image_irSubGraph.links[34] = link; + + link = &_graphLinks[35]; + link->src = GraphElementType::LbffRgbIrIrNoGmvWithTnrNoSap; + link->srcNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::IrMp; + link->type = LinkType::Node2Sink; + _irSubGraph.links[32] = link; + _image_irSubGraph.links[35] = link; + + for (uint8_t i = 0; i < 36; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffRgbIrWithGmvWithTnrWithSapOuterNode = + &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + _irSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _irSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _irSubGraph.lbffRgbIrWithGmvWithTnrWithSapOuterNode = &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + _irSubGraph.lbffRgbIrIrNoGmvWithTnrNoSapOuterNode = &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + _image_irSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _image_irSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _image_irSubGraph.lbffRgbIrWithGmvWithTnrWithSapOuterNode = + &_lbffRgbIrWithGmvWithTnrWithSapOuterNode; + _image_irSubGraph.swGdcOuterNode = &_swGdcOuterNode; + _image_irSubGraph.lbffRgbIrIrNoGmvWithTnrNoSapOuterNode = + &_lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + + // choose the selected sub graph + if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.video != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.stills != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.thumbnail != + static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == + static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.previewIr == + static_cast(HwSink::Disconnected))) { + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffRgbIrWithGmvWithTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + } else if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.video == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.stills == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.thumbnail == + static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == + static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.previewIr != + static_cast(HwSink::Disconnected))) { + _selectedGraphTopology = &_irSubGraph; + + // logical node IDs + _irSubGraph.isysWithCvOuterNode->contextId = 0; + _irSubGraph.swSegnetOuterNode->contextId = 1; + _irSubGraph.lbffRgbIrWithGmvWithTnrWithSapOuterNode->contextId = 2; + _irSubGraph.lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->contextId = 3; + } else if ( + // image sink group + (_graphConfiguration.sinkMappingConfiguration.preview != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.video != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.postProcessingVideo != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.stills != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.thumbnail != + static_cast(HwSink::Disconnected)) && + // raw sink group + (_graphConfiguration.sinkMappingConfiguration.raw == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawPdaf == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawDolLong == + static_cast(HwSink::Disconnected) && + _graphConfiguration.sinkMappingConfiguration.rawCv == + static_cast(HwSink::Disconnected)) && + // ir sink group + (_graphConfiguration.sinkMappingConfiguration.videoIr != + static_cast(HwSink::Disconnected) || + _graphConfiguration.sinkMappingConfiguration.previewIr != + static_cast(HwSink::Disconnected))) { + _selectedGraphTopology = &_image_irSubGraph; + + // logical node IDs + _image_irSubGraph.isysWithCvOuterNode->contextId = 0; + _image_irSubGraph.swSegnetOuterNode->contextId = 1; + _image_irSubGraph.lbffRgbIrWithGmvWithTnrWithSapOuterNode->contextId = 2; + _image_irSubGraph.swGdcOuterNode->contextId = 3; + _image_irSubGraph.lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->contextId = 4; + } else { + STATIC_GRAPH_LOG("Didn't found a matching sub graph for the selected virtual sinks."); + } + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100123::~StaticGraph100123() {} + +StaticGraphStatus imageSubGraphTopology100123::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffRgbIrWithGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrWithGmvWithTnrWithSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrWithGmvWithTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[21]->linkConfiguration->bufferSize == 0 && + subGraphLinks[23]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrWithGmvWithTnrWithSapInnerOptions |= noMp; + } + if (subGraphLinks[22]->linkConfiguration->bufferSize == 0 && + subGraphLinks[24]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrWithGmvWithTnrWithSapInnerOptions |= noDp; + } + // always active private inner options + lbffRgbIrWithGmvWithTnrWithSapInnerOptions |= (noIr); + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrWithGmvWithTnrWithSapOuterNode->setInnerNode( + lbffRgbIrWithGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[11]->isActive = !( + lbffRgbIrWithGmvWithTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[12]->isActive = + !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[13]->isActive = + !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[14]->isActive = !( + lbffRgbIrWithGmvWithTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[15]->isActive = !( + lbffRgbIrWithGmvWithTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[21]->isActive = + !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & + noMp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[23]->isActive = + !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & noMp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[22]->isActive = + !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & + noDp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[24]->isActive = + !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & noDp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output + // -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 26; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[16]->isActive = + (lbffRgbIrWithGmvWithTnrWithSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_gmv_feature_output -> + // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_gmv_input + subGraphLinks[18]->isActive = + (lbffRgbIrWithGmvWithTnrWithSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_blend_output -> + // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[19]->isActive = + (lbffRgbIrWithGmvWithTnrWithSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_bc_output -> + // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[20]->isActive = + (lbffRgbIrWithGmvWithTnrWithSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> + // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100123::updateSegmentAwareKernels() { + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[4]->isActive == false) { + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= + 0x1800000; // Run kernel ids 23 (ifd_segmap_bnlm_1_4) and 24 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[5]->isActive == false) { + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= + 0x60000000; // Run kernel ids 29 (ifd_segmap_xnr_1_4) and 30 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[6]->isActive == false) { + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= + 0xC00000000; // Run kernel ids 34 (ifd_segmap_acm_1_4) and 35 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[7]->isActive == false) { + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= + 0xC00000000000000; // Run kernel ids 58 (ifd_segmap_cas_1_4) and 59 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[8]->isActive == false) { + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= + 0x1800000000000; // Run kernel ids 47 (ifd_segmap_tnr_bc_1_4) and 48 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[9]->isActive == false) { + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= + 0x18000000000000; // Run kernel ids 51 (ifd_segmap_tnr_blend_1_4) and 52 + // (smurf_tnr_blend_1_0) + } + + lbffRgbIrWithGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus irSubGraphTopology100123::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags irPublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.irInnerOptions); + + /* + * Setting Node lbffRgbIrWithGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrWithGmvWithTnrWithSapInnerOptions = + irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrWithGmvWithTnrWithSapInnerOptions |= (noPdaf); + // active public options according to sink mapping + if (subGraphLinks[21]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrWithGmvWithTnrWithSapInnerOptions |= noMp; + } + if (subGraphLinks[22]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrWithGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Setting Node lbffRgbIrIrNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noDp | noIr); + // active public options according to sink mapping + if (subGraphLinks[32]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions |= noMp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrWithGmvWithTnrWithSapOuterNode->setInnerNode( + lbffRgbIrWithGmvWithTnrWithSapInnerOptions); + lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[11]->isActive = !( + lbffRgbIrWithGmvWithTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[12]->isActive = + !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[13]->isActive = + !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[14]->isActive = !( + lbffRgbIrWithGmvWithTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[15]->isActive = !( + lbffRgbIrWithGmvWithTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[21]->isActive = + !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & + noMp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[22]->isActive = + !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & + noDp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[25]->isActive = + !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ir_ae_out + subGraphLinks[26]->isActive = !( + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> ir_af_std_out + subGraphLinks[27]->isActive = + !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output + // -> ir_awb_std_out + subGraphLinks[28]->isActive = + !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output + // -> ir_awb_sat_out + subGraphLinks[32]->isActive = + !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & + noMp); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> ir_mp + + /* + * Link enablement by private inner options + */ + subGraphLinks[24]->isActive = + !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & + noIr); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_ir_output -> + // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_main_data_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 33; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[16]->isActive = + (lbffRgbIrWithGmvWithTnrWithSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_gmv_feature_output -> + // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_gmv_input + subGraphLinks[18]->isActive = + (lbffRgbIrWithGmvWithTnrWithSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_blend_output -> + // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[19]->isActive = + (lbffRgbIrWithGmvWithTnrWithSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_bc_output -> + // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[20]->isActive = + (lbffRgbIrWithGmvWithTnrWithSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> + // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + subGraphLinks[29]->isActive = + (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> + // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[30]->isActive = + (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> + // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[31]->isActive = + (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output + // -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus irSubGraphTopology100123::updateSegmentAwareKernels() { + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[4]->isActive == false) { + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= + 0x1800000; // Run kernel ids 23 (ifd_segmap_bnlm_1_4) and 24 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[5]->isActive == false) { + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= + 0x60000000; // Run kernel ids 29 (ifd_segmap_xnr_1_4) and 30 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[6]->isActive == false) { + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= + 0xC00000000; // Run kernel ids 34 (ifd_segmap_acm_1_4) and 35 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[7]->isActive == false) { + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= + 0xC00000000000000; // Run kernel ids 58 (ifd_segmap_cas_1_4) and 59 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[8]->isActive == false) { + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= + 0x1800000000000; // Run kernel ids 47 (ifd_segmap_tnr_bc_1_4) and 48 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[9]->isActive == false) { + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= + 0x18000000000000; // Run kernel ids 51 (ifd_segmap_tnr_blend_1_4) and 52 + // (smurf_tnr_blend_1_0) + } + + lbffRgbIrWithGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus image_irSubGraphTopology100123::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + InnerNodeOptionsFlags irPublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.irInnerOptions); + + /* + * Setting Node lbffRgbIrWithGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrWithGmvWithTnrWithSapInnerOptions = None; + // active public inner options according to sink mapping + if (subGraphLinks[21]->linkConfiguration->bufferSize == 0 && + subGraphLinks[23]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrWithGmvWithTnrWithSapInnerOptions |= noMp; + } + if (subGraphLinks[22]->linkConfiguration->bufferSize == 0 && + subGraphLinks[24]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrWithGmvWithTnrWithSapInnerOptions |= noDp; + } + // combine inner options for the node common sub graphs + lbffRgbIrWithGmvWithTnrWithSapInnerOptions |= imagePublicInnerNodeConfiguration; + lbffRgbIrWithGmvWithTnrWithSapInnerOptions |= irPublicInnerNodeConfiguration; + + /* + * Setting Node lbffRgbIrIrNoGmvWithTnrNoSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions = irPublicInnerNodeConfiguration; + // always active public inner options + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions |= (noPdaf | noDp | noIr); + // active public options according to sink mapping + if (subGraphLinks[35]->linkConfiguration->bufferSize == 0 && true) { + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions |= noMp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffRgbIrWithGmvWithTnrWithSapOuterNode->setInnerNode( + lbffRgbIrWithGmvWithTnrWithSapInnerOptions); + lbffRgbIrIrNoGmvWithTnrNoSapOuterNode->setInnerNode(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[11]->isActive = !( + lbffRgbIrWithGmvWithTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_awb_sve_output -> awb_sve_out + subGraphLinks[12]->isActive = + !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[13]->isActive = + !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[14]->isActive = !( + lbffRgbIrWithGmvWithTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[15]->isActive = !( + lbffRgbIrWithGmvWithTnrWithSapInnerOptions & + no3A); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[21]->isActive = + !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & + noMp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[23]->isActive = + !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & noMp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[22]->isActive = + !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & + noDp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[24]->isActive = + !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & noDp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[28]->isActive = + !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ae_output -> ir_ae_out + subGraphLinks[29]->isActive = !( + lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & + no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_af_std_output -> ir_af_std_out + subGraphLinks[30]->isActive = + !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_std_output + // -> ir_awb_std_out + subGraphLinks[31]->isActive = + !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & no3A); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_awb_sat_output + // -> ir_awb_sat_out + subGraphLinks[35]->isActive = + !(lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & + noMp); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_ofs_mp_output -> ir_mp + + /* + * Link enablement by private inner options + */ + subGraphLinks[27]->isActive = + !(lbffRgbIrWithGmvWithTnrWithSapInnerOptions & + noIr); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_ir_output -> + // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_main_data_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 36; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[16]->isActive = + (lbffRgbIrWithGmvWithTnrWithSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_gmv_feature_output -> + // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_gmv_input + subGraphLinks[18]->isActive = + (lbffRgbIrWithGmvWithTnrWithSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_blend_output -> + // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[19]->isActive = + (lbffRgbIrWithGmvWithTnrWithSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_bc_output -> + // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[20]->isActive = + (lbffRgbIrWithGmvWithTnrWithSapInnerOptions & (noMp | noDp)) != + (noMp | noDp); // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output -> + // lbff_RgbIr_WithGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + subGraphLinks[32]->isActive = + (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_output -> + // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_blend_yuv_input + subGraphLinks[33]->isActive = + (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_output -> + // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_rs_input + subGraphLinks[34]->isActive = + (lbffRgbIrIrNoGmvWithTnrNoSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_tnr_scaler_output + // -> lbff_RgbIr_Ir_NoGmv_WithTnr_NoSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus image_irSubGraphTopology100123::updateSegmentAwareKernels() { + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[4]->isActive == false) { + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= + 0x1800000; // Run kernel ids 23 (ifd_segmap_bnlm_1_4) and 24 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[5]->isActive == false) { + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= + 0x60000000; // Run kernel ids 29 (ifd_segmap_xnr_1_4) and 30 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[6]->isActive == false) { + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= + 0xC00000000; // Run kernel ids 34 (ifd_segmap_acm_1_4) and 35 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[7]->isActive == false) { + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= + 0xC00000000000000; // Run kernel ids 58 (ifd_segmap_cas_1_4) and 59 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[8]->isActive == false) { + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= + 0x1800000000000; // Run kernel ids 47 (ifd_segmap_tnr_bc_1_4) and 48 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[9]->isActive == false) { + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffRgbIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= + 0x18000000000000; // Run kernel ids 51 (ifd_segmap_tnr_blend_1_4) and 52 + // (smurf_tnr_blend_1_0) + } + + lbffRgbIrWithGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100127 + */ +StaticGraph100127::StaticGraph100127(GraphConfiguration100127* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100127, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffIrNoGmvNoTnrWithSapOuterNode.Init( + &_graphConfiguration.lbffIrNoGmvNoTnrWithSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffIrNoGmvNoTnrWithSap; + link->destNode = &_lbffIrNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffIrNoGmvNoTnrWithSap; + link->destNode = &_lbffIrNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffIrNoGmvNoTnrWithSap; + link->destNode = &_lbffIrNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffIrNoGmvNoTnrWithSap; + link->destNode = &_lbffIrNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffIrNoGmvNoTnrWithSap; + link->destNode = &_lbffIrNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffIrNoGmvNoTnrWithSap; + link->destNode = &_lbffIrNoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffIrNoGmvNoTnrWithSap; + link->srcNode = &_lbffIrNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffIrNoGmvNoTnrWithSap; + link->srcNode = &_lbffIrNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffIrNoGmvNoTnrWithSap; + link->srcNode = &_lbffIrNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffIrNoGmvNoTnrWithSap; + link->srcNode = &_lbffIrNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffIrNoGmvNoTnrWithSap; + link->srcNode = &_lbffIrNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffIrNoGmvNoTnrWithSap; + link->srcNode = &_lbffIrNoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 15; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffIrNoGmvNoTnrWithSapOuterNode = &_lbffIrNoGmvNoTnrWithSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffIrNoGmvNoTnrWithSapOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100127::~StaticGraph100127() {} + +StaticGraphStatus imageSubGraphTopology100127::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffIrNoGmvNoTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffIrNoGmvNoTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffIrNoGmvNoTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[13]->linkConfiguration->bufferSize == 0 && true) { + lbffIrNoGmvNoTnrWithSapInnerOptions |= noMp; + } + if (subGraphLinks[14]->linkConfiguration->bufferSize == 0 && true) { + lbffIrNoGmvNoTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffIrNoGmvNoTnrWithSapOuterNode->setInnerNode(lbffIrNoGmvNoTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[9]->isActive = + !(lbffIrNoGmvNoTnrWithSapInnerOptions & + no3A); // lbff_Ir_NoGmv_NoTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[10]->isActive = + !(lbffIrNoGmvNoTnrWithSapInnerOptions & + no3A); // lbff_Ir_NoGmv_NoTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[11]->isActive = + !(lbffIrNoGmvNoTnrWithSapInnerOptions & + no3A); // lbff_Ir_NoGmv_NoTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[12]->isActive = + !(lbffIrNoGmvNoTnrWithSapInnerOptions & + no3A); // lbff_Ir_NoGmv_NoTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[13]->isActive = + !(lbffIrNoGmvNoTnrWithSapInnerOptions & + noMp); // lbff_Ir_NoGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[14]->isActive = + !(lbffIrNoGmvNoTnrWithSapInnerOptions & + noDp); // lbff_Ir_NoGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 15; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100127::updateSegmentAwareKernels() { + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[4]->isActive == false) { + lbffIrNoGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= + 0x30000; // Run kernel ids 16 (ifd_segmap_bnlm_1_4) and 17 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[5]->isActive == false) { + lbffIrNoGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= + 0xC00000; // Run kernel ids 22 (ifd_segmap_xnr_1_4) and 23 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[6]->isActive == false) { + lbffIrNoGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= + 0x18000000; // Run kernel ids 27 (ifd_segmap_acm_1_4) and 28 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[7]->isActive == false) { + lbffIrNoGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffIrNoGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= + 0x1800000000; // Run kernel ids 35 (ifd_segmap_cas_1_4) and 36 (smurf_cas_1_0) + } + + lbffIrNoGmvNoTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100128 + */ +StaticGraph100128::StaticGraph100128(GraphConfiguration100128* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100128, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffIrWithGmvNoTnrWithSapOuterNode.Init( + &_graphConfiguration.lbffIrWithGmvNoTnrWithSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffIrWithGmvNoTnrWithSap; + link->destNode = &_lbffIrWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffIrWithGmvNoTnrWithSap; + link->destNode = &_lbffIrWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffIrWithGmvNoTnrWithSap; + link->destNode = &_lbffIrWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffIrWithGmvNoTnrWithSap; + link->destNode = &_lbffIrWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffIrWithGmvNoTnrWithSap; + link->destNode = &_lbffIrWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffIrWithGmvNoTnrWithSap; + link->destNode = &_lbffIrWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffIrWithGmvNoTnrWithSap; + link->destNode = &_lbffIrWithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffIrWithGmvNoTnrWithSap; + link->srcNode = &_lbffIrWithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[19]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 20; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffIrWithGmvNoTnrWithSapOuterNode = &_lbffIrWithGmvNoTnrWithSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffIrWithGmvNoTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100128::~StaticGraph100128() {} + +StaticGraphStatus imageSubGraphTopology100128::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffIrWithGmvNoTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffIrWithGmvNoTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffIrWithGmvNoTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[15]->linkConfiguration->bufferSize == 0 && + subGraphLinks[17]->linkConfiguration->bufferSize == 0 && true) { + lbffIrWithGmvNoTnrWithSapInnerOptions |= noMp; + } + if (subGraphLinks[16]->linkConfiguration->bufferSize == 0 && + subGraphLinks[18]->linkConfiguration->bufferSize == 0 && true) { + lbffIrWithGmvNoTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffIrWithGmvNoTnrWithSapOuterNode->setInnerNode(lbffIrWithGmvNoTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[9]->isActive = + !(lbffIrWithGmvNoTnrWithSapInnerOptions & + no3A); // lbff_Ir_WithGmv_NoTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[10]->isActive = + !(lbffIrWithGmvNoTnrWithSapInnerOptions & + no3A); // lbff_Ir_WithGmv_NoTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[11]->isActive = + !(lbffIrWithGmvNoTnrWithSapInnerOptions & + no3A); // lbff_Ir_WithGmv_NoTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[12]->isActive = + !(lbffIrWithGmvNoTnrWithSapInnerOptions & + no3A); // lbff_Ir_WithGmv_NoTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[15]->isActive = + !(lbffIrWithGmvNoTnrWithSapInnerOptions & + noMp); // lbff_Ir_WithGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[17]->isActive = + !(lbffIrWithGmvNoTnrWithSapInnerOptions & noMp); // lbff_Ir_WithGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[16]->isActive = + !(lbffIrWithGmvNoTnrWithSapInnerOptions & + noDp); // lbff_Ir_WithGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[18]->isActive = + !(lbffIrWithGmvNoTnrWithSapInnerOptions & noDp); // lbff_Ir_WithGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output + // -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 20; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[13]->isActive = + (lbffIrWithGmvNoTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Ir_WithGmv_NoTnr_WithSap:terminal_connect_gmv_feature_output + // -> lbff_Ir_WithGmv_NoTnr_WithSap:terminal_connect_gmv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100128::updateSegmentAwareKernels() { + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[4]->isActive == false) { + lbffIrWithGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= + 0x60000; // Run kernel ids 17 (ifd_segmap_bnlm_1_4) and 18 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[5]->isActive == false) { + lbffIrWithGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= + 0x1800000; // Run kernel ids 23 (ifd_segmap_xnr_1_4) and 24 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[6]->isActive == false) { + lbffIrWithGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= + 0x30000000; // Run kernel ids 28 (ifd_segmap_acm_1_4) and 29 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[7]->isActive == false) { + lbffIrWithGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffIrWithGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= + 0x18000000000; // Run kernel ids 39 (ifd_segmap_cas_1_4) and 40 (smurf_cas_1_0) + } + + lbffIrWithGmvNoTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100129 + */ +StaticGraph100129::StaticGraph100129(GraphConfiguration100129* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100129, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffIrNoGmvWithTnrWithSapOuterNode.Init( + &_graphConfiguration.lbffIrNoGmvWithTnrWithSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffIrNoGmvWithTnrWithSap; + link->destNode = &_lbffIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffIrNoGmvWithTnrWithSap; + link->destNode = &_lbffIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffIrNoGmvWithTnrWithSap; + link->destNode = &_lbffIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffIrNoGmvWithTnrWithSap; + link->destNode = &_lbffIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffIrNoGmvWithTnrWithSap; + link->destNode = &_lbffIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffIrNoGmvWithTnrWithSap; + link->destNode = &_lbffIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffIrNoGmvWithTnrWithSap; + link->destNode = &_lbffIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffIrNoGmvWithTnrWithSap; + link->destNode = &_lbffIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffIrNoGmvWithTnrWithSap; + link->srcNode = &_lbffIrNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffIrNoGmvWithTnrWithSap; + link->srcNode = &_lbffIrNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffIrNoGmvWithTnrWithSap; + link->srcNode = &_lbffIrNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffIrNoGmvWithTnrWithSap; + link->srcNode = &_lbffIrNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffIrNoGmvWithTnrWithSap; + link->srcNode = &_lbffIrNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffIrNoGmvWithTnrWithSap; + link->destNode = &_lbffIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffIrNoGmvWithTnrWithSap; + link->srcNode = &_lbffIrNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffIrNoGmvWithTnrWithSap; + link->destNode = &_lbffIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffIrNoGmvWithTnrWithSap; + link->srcNode = &_lbffIrNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffIrNoGmvWithTnrWithSap; + link->destNode = &_lbffIrNoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffIrNoGmvWithTnrWithSap; + link->srcNode = &_lbffIrNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffIrNoGmvWithTnrWithSap; + link->srcNode = &_lbffIrNoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 20; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffIrNoGmvWithTnrWithSapOuterNode = &_lbffIrNoGmvWithTnrWithSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffIrNoGmvWithTnrWithSapOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100129::~StaticGraph100129() {} + +StaticGraphStatus imageSubGraphTopology100129::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffIrNoGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffIrNoGmvWithTnrWithSapInnerOptions = imagePublicInnerNodeConfiguration; + // always active public inner options + lbffIrNoGmvWithTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[18]->linkConfiguration->bufferSize == 0 && true) { + lbffIrNoGmvWithTnrWithSapInnerOptions |= noMp; + } + if (subGraphLinks[19]->linkConfiguration->bufferSize == 0 && true) { + lbffIrNoGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffIrNoGmvWithTnrWithSapOuterNode->setInnerNode(lbffIrNoGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[11]->isActive = + !(lbffIrNoGmvWithTnrWithSapInnerOptions & + no3A); // lbff_Ir_NoGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[12]->isActive = + !(lbffIrNoGmvWithTnrWithSapInnerOptions & + no3A); // lbff_Ir_NoGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[13]->isActive = + !(lbffIrNoGmvWithTnrWithSapInnerOptions & + no3A); // lbff_Ir_NoGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[14]->isActive = + !(lbffIrNoGmvWithTnrWithSapInnerOptions & + no3A); // lbff_Ir_NoGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[18]->isActive = + !(lbffIrNoGmvWithTnrWithSapInnerOptions & + noMp); // lbff_Ir_NoGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[19]->isActive = + !(lbffIrNoGmvWithTnrWithSapInnerOptions & + noDp); // lbff_Ir_NoGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 20; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[15]->isActive = + (lbffIrNoGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Ir_NoGmv_WithTnr_WithSap:terminal_connect_blend_output -> + // lbff_Ir_NoGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[16]->isActive = + (lbffIrNoGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Ir_NoGmv_WithTnr_WithSap:terminal_connect_bc_output -> + // lbff_Ir_NoGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[17]->isActive = + (lbffIrNoGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Ir_NoGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output + // -> lbff_Ir_NoGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100129::updateSegmentAwareKernels() { + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[4]->isActive == false) { + lbffIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= + 0x180000; // Run kernel ids 19 (ifd_segmap_bnlm_1_4) and 20 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[5]->isActive == false) { + lbffIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= + 0x6000000; // Run kernel ids 25 (ifd_segmap_xnr_1_4) and 26 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[6]->isActive == false) { + lbffIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= + 0xC0000000; // Run kernel ids 30 (ifd_segmap_acm_1_4) and 31 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[7]->isActive == false) { + lbffIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= + 0x18000000000000; // Run kernel ids 51 (ifd_segmap_cas_1_4) and 52 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[8]->isActive == false) { + lbffIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= + 0x30000000000; // Run kernel ids 40 (ifd_segmap_tnr_bc_1_4) and 41 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[9]->isActive == false) { + lbffIrNoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffIrNoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= + 0x300000000000; // Run kernel ids 44 (ifd_segmap_tnr_blend_1_4) and 45 + // (smurf_tnr_blend_1_0) + } + + lbffIrNoGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100130 + */ +StaticGraph100130::StaticGraph100130(GraphConfiguration100130* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100130, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffIrWithGmvWithTnrWithSapOuterNode.Init( + &_graphConfiguration.lbffIrWithGmvWithTnrWithSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->destNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->destNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->destNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->destNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->destNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->destNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->destNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->destNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->destNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->destNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->destNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->destNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffIrWithGmvWithTnrWithSap; + link->srcNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[24]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 25; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffIrWithGmvWithTnrWithSapOuterNode = &_lbffIrWithGmvWithTnrWithSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffIrWithGmvWithTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100130::~StaticGraph100130() {} + +StaticGraphStatus imageSubGraphTopology100130::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffIrWithGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffIrWithGmvWithTnrWithSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffIrWithGmvWithTnrWithSapInnerOptions |= (noPdaf | noIr); + // active public options according to sink mapping + if (subGraphLinks[20]->linkConfiguration->bufferSize == 0 && + subGraphLinks[22]->linkConfiguration->bufferSize == 0 && true) { + lbffIrWithGmvWithTnrWithSapInnerOptions |= noMp; + } + if (subGraphLinks[21]->linkConfiguration->bufferSize == 0 && + subGraphLinks[23]->linkConfiguration->bufferSize == 0 && true) { + lbffIrWithGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffIrWithGmvWithTnrWithSapOuterNode->setInnerNode(lbffIrWithGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[11]->isActive = + !(lbffIrWithGmvWithTnrWithSapInnerOptions & + no3A); // lbff_Ir_WithGmv_WithTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[12]->isActive = + !(lbffIrWithGmvWithTnrWithSapInnerOptions & + no3A); // lbff_Ir_WithGmv_WithTnr_WithSap:terminal_connect_af_std_output -> af_std_out + subGraphLinks[13]->isActive = + !(lbffIrWithGmvWithTnrWithSapInnerOptions & + no3A); // lbff_Ir_WithGmv_WithTnr_WithSap:terminal_connect_awb_std_output -> awb_std_out + subGraphLinks[14]->isActive = + !(lbffIrWithGmvWithTnrWithSapInnerOptions & + no3A); // lbff_Ir_WithGmv_WithTnr_WithSap:terminal_connect_awb_sat_output -> awb_sat_out + subGraphLinks[20]->isActive = + !(lbffIrWithGmvWithTnrWithSapInnerOptions & + noMp); // lbff_Ir_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output -> image_mp + subGraphLinks[22]->isActive = + !(lbffIrWithGmvWithTnrWithSapInnerOptions & noMp); // lbff_Ir_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[21]->isActive = + !(lbffIrWithGmvWithTnrWithSapInnerOptions & + noDp); // lbff_Ir_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output -> image_dp + subGraphLinks[23]->isActive = + !(lbffIrWithGmvWithTnrWithSapInnerOptions & noDp); // lbff_Ir_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output + // -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 25; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[15]->isActive = + (lbffIrWithGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Ir_WithGmv_WithTnr_WithSap:terminal_connect_gmv_feature_output + // -> lbff_Ir_WithGmv_WithTnr_WithSap:terminal_connect_gmv_input + subGraphLinks[17]->isActive = + (lbffIrWithGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Ir_WithGmv_WithTnr_WithSap:terminal_connect_blend_output -> + // lbff_Ir_WithGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[18]->isActive = + (lbffIrWithGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Ir_WithGmv_WithTnr_WithSap:terminal_connect_bc_output -> + // lbff_Ir_WithGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[19]->isActive = + (lbffIrWithGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | noIr); // lbff_Ir_WithGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output + // -> lbff_Ir_WithGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100130::updateSegmentAwareKernels() { + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[4]->isActive == false) { + lbffIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= + 0x300000; // Run kernel ids 20 (ifd_segmap_bnlm_1_4) and 21 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[5]->isActive == false) { + lbffIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= + 0xC000000; // Run kernel ids 26 (ifd_segmap_xnr_1_4) and 27 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[6]->isActive == false) { + lbffIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= + 0x180000000; // Run kernel ids 31 (ifd_segmap_acm_1_4) and 32 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[7]->isActive == false) { + lbffIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= + 0x180000000000000; // Run kernel ids 55 (ifd_segmap_cas_1_4) and 56 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[8]->isActive == false) { + lbffIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= + 0x300000000000; // Run kernel ids 44 (ifd_segmap_tnr_bc_1_4) and 45 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[9]->isActive == false) { + lbffIrWithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffIrWithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= + 0x3000000000000; // Run kernel ids 48 (ifd_segmap_tnr_blend_1_4) and 49 + // (smurf_tnr_blend_1_0) + } + + lbffIrWithGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100131 + */ +StaticGraph100131::StaticGraph100131(GraphConfiguration100131* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100131, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode.Init( + &_graphConfiguration.lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 19; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 17; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode = + &_lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100131::~StaticGraph100131() {} + +StaticGraphStatus imageSubGraphTopology100131::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapInnerOptions |= (noIr); + // active public options according to sink mapping + if (subGraphLinks[15]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapInnerOptions |= noMp; + } + if (subGraphLinks[16]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode->setInnerNode( + lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[11]->isActive = !( + lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapInnerOptions & + no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_WithSap:terminal_connect_ae_output -> ae_out + subGraphLinks[12]->isActive = + !(lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_WithSap:terminal_connect_af_std_output + // -> af_std_out + subGraphLinks[13]->isActive = + !(lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_WithSap:terminal_connect_awb_std_output + // -> awb_std_out + subGraphLinks[14]->isActive = + !(lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_WithSap:terminal_connect_awb_sat_output + // -> awb_sat_out + subGraphLinks[9]->isActive = + !(lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapInnerOptions & noPdaf); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_WithSap:terminal_connect_pdaf_output + // -> pdaf_out + subGraphLinks[15]->isActive = + !(lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output + // -> image_mp + subGraphLinks[16]->isActive = + !(lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output + // -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 17; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[8]->isActive = + (lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapInnerOptions & (no3A | noMp | noDp | noIr)) != + (no3A | noMp | noDp | + noIr); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_WithSap:terminal_connect_dpc_pdaf_output -> + // lbff_Bayer_Pdaf3asPdaf2_NoGmv_NoTnr_WithSap:terminal_connect_pdaf_data_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100131::updateSegmentAwareKernels() { + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[4]->isActive == false) { + lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= + 0xC00000; // Run kernel ids 22 (ifd_segmap_bnlm_1_4) and 23 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[5]->isActive == false) { + lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= + 0x30000000; // Run kernel ids 28 (ifd_segmap_xnr_1_4) and 29 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[6]->isActive == false) { + lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= + 0x600000000; // Run kernel ids 33 (ifd_segmap_acm_1_4) and 34 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[7]->isActive == false) { + lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= + 0x60000000000; // Run kernel ids 41 (ifd_segmap_cas_1_4) and 42 (smurf_cas_1_0) + } + + lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100132 + */ +StaticGraph100132::StaticGraph100132(GraphConfiguration100132* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100132, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode.Init( + &_graphConfiguration.lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 19; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[9]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[10]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[21]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 22; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode = + &_lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100132::~StaticGraph100132() {} + +StaticGraphStatus imageSubGraphTopology100132::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapInnerOptions |= (noIr); + // active public options according to sink mapping + if (subGraphLinks[17]->linkConfiguration->bufferSize == 0 && + subGraphLinks[19]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapInnerOptions |= noMp; + } + if (subGraphLinks[18]->linkConfiguration->bufferSize == 0 && + subGraphLinks[20]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode->setInnerNode( + lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[11]->isActive = + !(lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_WithSap:terminal_connect_ae_output + // -> ae_out + subGraphLinks[12]->isActive = + !(lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_WithSap:terminal_connect_af_std_output + // -> af_std_out + subGraphLinks[13]->isActive = + !(lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_WithSap:terminal_connect_awb_std_output + // -> awb_std_out + subGraphLinks[14]->isActive = + !(lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_WithSap:terminal_connect_awb_sat_output + // -> awb_sat_out + subGraphLinks[9]->isActive = + !(lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapInnerOptions & noPdaf); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_WithSap:terminal_connect_pdaf_output + // -> pdaf_out + subGraphLinks[17]->isActive = + !(lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output + // -> image_mp + subGraphLinks[19]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapInnerOptions & + noMp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_WithSap:terminal_connect_ofs_mp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[18]->isActive = + !(lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output + // -> image_dp + subGraphLinks[20]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapInnerOptions & + noDp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_WithSap:terminal_connect_ofs_dp_output + // -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 22; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[8]->isActive = + (lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapInnerOptions & (no3A | noMp | noDp | noIr)) != + (no3A | noMp | noDp | + noIr); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_WithSap:terminal_connect_dpc_pdaf_output + // -> + // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_WithSap:terminal_connect_pdaf_data_input + subGraphLinks[15]->isActive = + (lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_WithSap:terminal_connect_gmv_feature_output + // -> lbff_Bayer_Pdaf3asPdaf2_WithGmv_NoTnr_WithSap:terminal_connect_gmv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100132::updateSegmentAwareKernels() { + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[4]->isActive == false) { + lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= + 0x1800000; // Run kernel ids 23 (ifd_segmap_bnlm_1_4) and 24 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[5]->isActive == false) { + lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= + 0x60000000; // Run kernel ids 29 (ifd_segmap_xnr_1_4) and 30 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[6]->isActive == false) { + lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= + 0xC00000000; // Run kernel ids 34 (ifd_segmap_acm_1_4) and 35 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[7]->isActive == false) { + lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= + 0x600000000000; // Run kernel ids 45 (ifd_segmap_cas_1_4) and 46 (smurf_cas_1_0) + } + + lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100133 + */ +StaticGraph100133::StaticGraph100133(GraphConfiguration100133* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100133, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode.Init( + &_graphConfiguration.lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 19; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 22; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode = + &_lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->contextId = 2; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100133::~StaticGraph100133() {} + +StaticGraphStatus imageSubGraphTopology100133::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions |= (noIr); + // active public options according to sink mapping + if (subGraphLinks[20]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions |= noMp; + } + if (subGraphLinks[21]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->setInnerNode( + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[13]->isActive = + !(lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_ae_output + // -> ae_out + subGraphLinks[14]->isActive = + !(lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_af_std_output + // -> af_std_out + subGraphLinks[15]->isActive = + !(lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_awb_std_output + // -> awb_std_out + subGraphLinks[16]->isActive = + !(lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_awb_sat_output + // -> awb_sat_out + subGraphLinks[11]->isActive = + !(lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & noPdaf); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_pdaf_output + // -> pdaf_out + subGraphLinks[20]->isActive = + !(lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output + // -> image_mp + subGraphLinks[21]->isActive = + !(lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output + // -> image_dp + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 22; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[10]->isActive = + (lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & (no3A | noMp | noDp | noIr)) != + (no3A | noMp | noDp | + noIr); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_dpc_pdaf_output + // -> + // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_pdaf_data_input + subGraphLinks[17]->isActive = + (lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_blend_output -> + // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[18]->isActive = + (lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_bc_output -> + // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[19]->isActive = + (lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output + // -> lbff_Bayer_Pdaf3asPdaf2_NoGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100133::updateSegmentAwareKernels() { + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[4]->isActive == false) { + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= + 0x6000000; // Run kernel ids 25 (ifd_segmap_bnlm_1_4) and 26 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[5]->isActive == false) { + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= + 0x180000000; // Run kernel ids 31 (ifd_segmap_xnr_1_4) and 32 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[6]->isActive == false) { + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= + 0x3000000000; // Run kernel ids 36 (ifd_segmap_acm_1_4) and 37 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[7]->isActive == false) { + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= + 0x600000000000000; // Run kernel ids 57 (ifd_segmap_cas_1_4) and 58 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[8]->isActive == false) { + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= + 0xC00000000000; // Run kernel ids 46 (ifd_segmap_tnr_bc_1_4) and 47 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[9]->isActive == false) { + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= + 0xC000000000000; // Run kernel ids 50 (ifd_segmap_tnr_blend_1_4) and 51 + // (smurf_tnr_blend_1_0) + } + + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode->SetDisabledKernels(disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100134 + */ +StaticGraph100134::StaticGraph100134(GraphConfiguration100134* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100134, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _imageSubGraph(_sinkMappingConfiguration) { + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + _swSegnetOuterNode.Init(&_graphConfiguration.swSegnetOuterNodeConfiguration); + _lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode.Init( + &_graphConfiguration.lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNodeConfiguration); + _swGdcOuterNode.Init(&_graphConfiguration.swGdcOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::SwSegnet; + link->destNode = &_swSegnetOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Node2Node; + + link = &_graphLinks[4]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 30; + link->type = LinkType::Node2Node; + + link = &_graphLinks[5]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 31; + link->type = LinkType::Node2Node; + + link = &_graphLinks[6]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 32; + link->type = LinkType::Node2Node; + + link = &_graphLinks[7]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 35; + link->type = LinkType::Node2Node; + + link = &_graphLinks[8]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 33; + link->type = LinkType::Node2Node; + + link = &_graphLinks[9]; + link->src = GraphElementType::SwSegnet; + link->srcNode = &_swSegnetOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 34; + link->type = LinkType::Node2Node; + + link = &_graphLinks[10]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 19; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[11]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 13; + link->dest = GraphElementType::PdafOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[12]; + link->src = GraphElementType::LscBuffer; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 7; + link->type = LinkType::Source2Node; + + link = &_graphLinks[13]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::AeOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[14]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 10; + link->dest = GraphElementType::AfStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[15]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 11; + link->dest = GraphElementType::AwbStdOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[16]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 12; + link->dest = GraphElementType::AwbSatOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[17]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 21; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 17; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[18]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 20; + link->dest = GraphElementType::GmvMatchOut; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[19]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 26; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 25; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[20]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 24; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 23; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[21]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 27; + link->dest = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->destNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->destTerminalId = 22; + link->type = LinkType::Node2Self; + link->frameDelay = 1U; + + link = &_graphLinks[22]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::ImageMp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[23]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::ImageDp; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[24]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 28; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[25]; + link->src = GraphElementType::LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap; + link->srcNode = &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + link->srcTerminalId = 29; + link->dest = GraphElementType::SwGdc; + link->destNode = &_swGdcOuterNode; + link->destTerminalId = 0; + link->type = LinkType::Node2Node; + + link = &_graphLinks[26]; + link->src = GraphElementType::SwGdc; + link->srcNode = &_swGdcOuterNode; + link->srcTerminalId = 1; + link->dest = GraphElementType::ProcessedMain; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 27; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _imageSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _imageSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + _imageSubGraph.swSegnetOuterNode = &_swSegnetOuterNode; + _imageSubGraph.lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode = + &_lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + _imageSubGraph.swGdcOuterNode = &_swGdcOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_imageSubGraph; + + // logical node IDs + _imageSubGraph.isysWithCvOuterNode->contextId = 0; + _imageSubGraph.swSegnetOuterNode->contextId = 1; + _imageSubGraph.lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->contextId = 2; + _imageSubGraph.swGdcOuterNode->contextId = 3; + // Apply a default inner nodes configuration for the selected sub graph + SubGraphInnerNodeConfiguration defaultInnerNodeConfiguration; + if (_selectedGraphTopology != nullptr) { + _selectedGraphTopology->configInnerNodes(defaultInnerNodeConfiguration); + } +} +StaticGraph100134::~StaticGraph100134() {} + +StaticGraphStatus imageSubGraphTopology100134::configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) { + /* + * Init sub graphs inner nodes configuration base on user request + */ + InnerNodeOptionsFlags imagePublicInnerNodeConfiguration = + GetInnerOptions(subGraphInnerNodeConfiguration.imageInnerOptions); + + /* + * Setting Node lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap initial inner node configuration + */ + InnerNodeOptionsFlags lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions = + imagePublicInnerNodeConfiguration; + // always active public inner options + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions |= (noIr); + // active public options according to sink mapping + if (subGraphLinks[22]->linkConfiguration->bufferSize == 0 && + subGraphLinks[24]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions |= noMp; + } + if (subGraphLinks[23]->linkConfiguration->bufferSize == 0 && + subGraphLinks[25]->linkConfiguration->bufferSize == 0 && true) { + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions |= noDp; + } + + /* + * Set the selected inner nodes to the outer nodes + */ + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->setInnerNode( + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions); + + /* + * Link enablement by public inner options + */ + subGraphLinks[13]->isActive = + !(lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_ae_output + // -> ae_out + subGraphLinks[14]->isActive = + !(lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_af_std_output + // -> af_std_out + subGraphLinks[15]->isActive = + !(lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_awb_std_output + // -> awb_std_out + subGraphLinks[16]->isActive = + !(lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions & no3A); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_awb_sat_output + // -> awb_sat_out + subGraphLinks[11]->isActive = + !(lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions & noPdaf); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_pdaf_output + // -> pdaf_out + subGraphLinks[22]->isActive = + !(lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions & noMp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output + // -> image_mp + subGraphLinks[24]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions & + noMp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_ofs_mp_output + // -> sw_gdc:terminal_connect_input + subGraphLinks[23]->isActive = + !(lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions & noDp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output + // -> image_dp + subGraphLinks[25]->isActive = !(lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions & + noDp); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_ofs_dp_output + // -> sw_gdc:terminal_connect_input + + /* + * Disable links with zero buffer size + * (used for post processing when not all links are being used) + */ + for (uint32_t i = 0; i < 27; i++) { + if (subGraphLinks[i]->linkConfiguration->bufferSize == 0) { + subGraphLinks[i]->isActive = false; + } + } + + /* + * Link enablement by inner options combinations + */ + subGraphLinks[10]->isActive = + (lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions & (no3A | noMp | noDp | noIr)) != + (no3A | noMp | noDp | + noIr); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_dpc_pdaf_output + // -> + // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_pdaf_data_input + subGraphLinks[17]->isActive = + (lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_gmv_feature_output + // -> lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_gmv_input + subGraphLinks[19]->isActive = + (lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_blend_output -> + // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_blend_yuv_input + subGraphLinks[20]->isActive = + (lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_bc_output -> + // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_bc_rs_input + subGraphLinks[21]->isActive = + (lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapInnerOptions & (noMp | noDp | noIr)) != + (noMp | noDp | + noIr); // lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_tnr_scaler_output + // -> lbff_Bayer_Pdaf3asPdaf2_WithGmv_WithTnr_WithSap:terminal_connect_bc_yuv_input + + /* + * Update segment aware kernels according to links enablement + */ + updateSegmentAwareKernels(); + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus imageSubGraphTopology100134::updateSegmentAwareKernels() { + // For run kernels disablement + uint64_t disabledRunKernelsBitmap[] = {0x0, 0x0}; + + // Link to terminal_connect_bnlm_sm_input + if (subGraphLinks[4]->isActive == false) { + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 30); // Terminal id 30 - terminal_connect_bnlm_sm_input + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 29); // Device id 29 - ifd_segmap_bnlm_1_4 + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[0] &= + ~(1 << 30); // Device id 30 - smurf_bnlm_1_0 + disabledRunKernelsBitmap[0] |= + 0xC000000; // Run kernel ids 26 (ifd_segmap_bnlm_1_4) and 27 (smurf_bnlm_1_0) + } + + // Link to terminal_connect_xnr_sm_input + if (subGraphLinks[5]->isActive == false) { + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.teb[0] &= + ~(1 << 31); // Terminal id 31 - terminal_connect_xnr_sm_input + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 4); // Device id 36 - ifd_segmap_xnr_1_4 + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 5); // Device id 37 - smurf_xnr_1_0 + disabledRunKernelsBitmap[0] |= + 0x300000000; // Run kernel ids 32 (ifd_segmap_xnr_1_4) and 33 (smurf_xnr_1_0) + } + + // Link to terminal_connect_acm_sm_input + if (subGraphLinks[6]->isActive == false) { + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 0); // Terminal id 32 - terminal_connect_acm_sm_input + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 9); // Device id 41 - ifd_segmap_acm_1_4 + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 10); // Device id 42 - smurf_acm_1_0 + disabledRunKernelsBitmap[0] |= + 0x6000000000; // Run kernel ids 37 (ifd_segmap_acm_1_4) and 38 (smurf_acm_1_0) + } + + // Link to terminal_connect_cas_sm_input + if (subGraphLinks[7]->isActive == false) { + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 3); // Terminal id 35 - terminal_connect_cas_sm_input + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 6); // Device id 70 - ifd_segmap_cas_1_4 + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 7); // Device id 71 - smurf_cas_1_0 + disabledRunKernelsBitmap[0] |= + 0x6000000000000000; // Run kernel ids 61 (ifd_segmap_cas_1_4) and 62 (smurf_cas_1_0) + } + + // Link to terminal_connect_bc_sm_input + if (subGraphLinks[8]->isActive == false) { + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 1); // Terminal id 33 - terminal_connect_bc_sm_input + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 25); // Device id 57 - ifd_segmap_tnr_bc_1_4 + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 26); // Device id 58 - smurf_tnr_bc_1_0 + disabledRunKernelsBitmap[0] |= + 0xC000000000000; // Run kernel ids 50 (ifd_segmap_tnr_bc_1_4) and 51 (smurf_tnr_bc_1_0) + } + + // Link to terminal_connect_blend_sm_input + if (subGraphLinks[9]->isActive == false) { + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.teb[1] &= + ~(1 << 2); // Terminal id 34 - terminal_connect_blend_sm_input + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[1] &= + ~(1 << 31); // Device id 63 - ifd_segmap_tnr_blend_1_4 + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->bitmaps.deb[2] &= + ~(1 << 0); // Device id 64 - smurf_tnr_blend_1_0 + disabledRunKernelsBitmap[0] |= + 0xC0000000000000; // Run kernel ids 54 (ifd_segmap_tnr_blend_1_4) and 55 + // (smurf_tnr_blend_1_0) + } + + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode->SetDisabledKernels( + disabledRunKernelsBitmap); + return StaticGraphStatus::SG_OK; +} + +/* + * Graph 100026 + */ +StaticGraph100026::StaticGraph100026(GraphConfiguration100026* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100026, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _rawSubGraph(_sinkMappingConfiguration) { + _isysOuterNode.Init(&_graphConfiguration.isysOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::Isys; + link->destNode = &_isysOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Isys; + link->srcNode = &_isysOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::RawIsys; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 2; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _rawSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _rawSubGraph.isysOuterNode = &_isysOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_rawSubGraph; + + // logical node IDs + _rawSubGraph.isysOuterNode->contextId = 0; +} +StaticGraph100026::~StaticGraph100026() {} +/* + * Graph 100035 + */ +StaticGraph100035::StaticGraph100035(GraphConfiguration100035* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100035, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _rawSubGraph(_sinkMappingConfiguration) { + _isysDolOuterNode.Init(&_graphConfiguration.isysDolOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDol; + link->destNode = &_isysDolOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDol; + link->destNode = &_isysDolOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::RawIsys; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysDol; + link->srcNode = &_isysDolOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::RawIsysDolLong; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 4; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _rawSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _rawSubGraph.isysDolOuterNode = &_isysDolOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_rawSubGraph; + + // logical node IDs + _rawSubGraph.isysDolOuterNode->contextId = 0; +} +StaticGraph100035::~StaticGraph100035() {} +/* + * Graph 100036 + */ +StaticGraph100036::StaticGraph100036(GraphConfiguration100036* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100036, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _rawSubGraph(_sinkMappingConfiguration) { + _isysPdaf2OuterNode.Init(&_graphConfiguration.isysPdaf2OuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2; + link->destNode = &_isysPdaf2OuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::PdafBuffer; + link->dest = GraphElementType::IsysPdaf2; + link->destNode = &_isysPdaf2OuterNode; + link->destTerminalId = 6; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysPdaf2; + link->srcNode = &_isysPdaf2OuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::RawIsys; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysPdaf2; + link->srcNode = &_isysPdaf2OuterNode; + link->srcTerminalId = 7; + link->dest = GraphElementType::RawIsysPdaf; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 4; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _rawSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _rawSubGraph.isysPdaf2OuterNode = &_isysPdaf2OuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_rawSubGraph; + + // logical node IDs + _rawSubGraph.isysPdaf2OuterNode->contextId = 0; +} +StaticGraph100036::~StaticGraph100036() {} +/* + * Graph 100037 + */ +StaticGraph100037::StaticGraph100037(GraphConfiguration100037* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100037, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _rawSubGraph(_sinkMappingConfiguration) { + _isysWithCvOuterNode.Init(&_graphConfiguration.isysWithCvOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysWithCv; + link->destNode = &_isysWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::RawIsys; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysWithCv; + link->srcNode = &_isysWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::RawIsysCv; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 4; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _rawSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _rawSubGraph.isysWithCvOuterNode = &_isysWithCvOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_rawSubGraph; + + // logical node IDs + _rawSubGraph.isysWithCvOuterNode->contextId = 0; +} +StaticGraph100037::~StaticGraph100037() {} +/* + * Graph 100038 + */ +StaticGraph100038::StaticGraph100038(GraphConfiguration100038* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100038, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _rawSubGraph(_sinkMappingConfiguration) { + _isysDolWithCvOuterNode.Init(&_graphConfiguration.isysDolWithCvOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::SensorDolLongExposure; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 8; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysDolWithCv; + link->destNode = &_isysDolWithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::RawIsys; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 9; + link->dest = GraphElementType::RawIsysDolLong; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysDolWithCv; + link->srcNode = &_isysDolWithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::RawIsysCv; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 6; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _rawSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _rawSubGraph.isysDolWithCvOuterNode = &_isysDolWithCvOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_rawSubGraph; + + // logical node IDs + _rawSubGraph.isysDolWithCvOuterNode->contextId = 0; +} +StaticGraph100038::~StaticGraph100038() {} +/* + * Graph 100039 + */ +StaticGraph100039::StaticGraph100039(GraphConfiguration100039* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, + SensorMode* selectedSensorMode, int32_t selectedSettingsId) + : IStaticGraphConfig(selectedSensorMode, sinkMappingConfiguration, 100039, + selectedSettingsId), + _graphConfiguration(*selectedGraphConfiguration), + + _rawSubGraph(_sinkMappingConfiguration) { + _isysPdaf2WithCvOuterNode.Init(&_graphConfiguration.isysPdaf2WithCvOuterNodeConfiguration); + + // Declare all the links in the graph + GraphLink* link = nullptr; + link = &_graphLinks[0]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 4; + link->type = LinkType::Source2Node; + + link = &_graphLinks[1]; + link->src = GraphElementType::Sensor; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 2; + link->type = LinkType::Source2Node; + + link = &_graphLinks[2]; + link->src = GraphElementType::PdafBuffer; + link->dest = GraphElementType::IsysPdaf2WithCv; + link->destNode = &_isysPdaf2WithCvOuterNode; + link->destTerminalId = 6; + link->type = LinkType::Source2Node; + + link = &_graphLinks[3]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 5; + link->dest = GraphElementType::RawIsys; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[4]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 7; + link->dest = GraphElementType::RawIsysPdaf; + link->type = LinkType::Node2Sink; + + link = &_graphLinks[5]; + link->src = GraphElementType::IsysPdaf2WithCv; + link->srcNode = &_isysPdaf2WithCvOuterNode; + link->srcTerminalId = 3; + link->dest = GraphElementType::RawIsysCv; + link->type = LinkType::Node2Sink; + + for (uint8_t i = 0; i < 6; ++i) { + // apply link configuration + _graphLinks[i].linkConfiguration = &_graphConfiguration.linkConfigurations[i]; + + // Assign link to sub-graph + _rawSubGraph.links[i] = &_graphLinks[i]; + } + + // add nodes for sub graph + _rawSubGraph.isysPdaf2WithCvOuterNode = &_isysPdaf2WithCvOuterNode; + + // choose the selected sub graph + _selectedGraphTopology = &_rawSubGraph; + + // logical node IDs + _rawSubGraph.isysPdaf2WithCvOuterNode->contextId = 0; +} +StaticGraph100039::~StaticGraph100039() {} diff --git a/modules/ipu_desc/ipu8/StaticGraphAutogen.h b/modules/ipu_desc/ipu8/StaticGraphAutogen.h new file mode 100644 index 0000000..3bb16bf --- /dev/null +++ b/modules/ipu_desc/ipu8/StaticGraphAutogen.h @@ -0,0 +1,5750 @@ +/* + * Copyright (C) 2025 Intel Corporation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#pragma once + +#include +#include +#include + +#include "StaticGraphBinaryAutogen.h" +#include "StaticGraphTypesAutogen.h" + +#define SUPPORT_KEY_RESOLUTIONS 0 + +enum InnerNodeOption { + None = 0, + noIr = (1 << 1), + no3A = (1 << 2), + noMp = (1 << 3), + noDp = (1 << 4), + noPdaf = (1 << 5), +}; +typedef int32_t InnerNodeOptionsFlags; + +struct SubGraphPublicInnerNodeConfiguration { + bool no3A = false; + bool noMp = false; + bool noDp = false; + bool noPdaf = false; +}; + +struct KernelFragments { + StaticGraphFragmentDesc fragmentDescriptors[4]; +}; + +class OuterNode { + public: + /** + * \brief resourceId - represents the physical ID of the node, e.g. cb_id for CB node. + */ + uint8_t resourceId; + + /** + * \brief contextId - represents the logical Id of the node according to the use-case. + * Same physical nodes in given graph topology will have a different + * contextId + */ + uint8_t contextId = 0; + NodeTypes type; + HwBitmaps bitmaps; + StaticGraphNodeKernels nodeKernels; + + uint8_t numberOfFragments; + OuterNode() {} + ~OuterNode(); + + void Init(uint8_t nodeResourceId, NodeTypes nodeType, uint32_t kernelCount, + uint32_t operationMode, uint32_t streamId, uint8_t nodeNumberOfFragments); + + uint8_t GetNumberOfFragments(); + + void SetDisabledKernels(uint64_t disabledRunKernelsBitmap[2]); + + protected: + void InitRunKernels(uint16_t* kernelsUuids, uint64_t kernelsRcbBitmap[2], + StaticGraphKernelRes* resolutionInfos, + uint64_t kernelsResolutionHistoryGroupBitmap[2], + uint64_t kernelFragmentDescriptorGroupBitmap[2], + StaticGraphKernelRes* resolutionHistories, + StaticGraphKernelBppConfiguration* bppInfos, uint8_t* systemApisSizes, + uint8_t* systemApiData, KernelFragments* fragmentDescriptors); +}; + +struct GraphLink { + bool isActive = true; + + GraphElementType src; + OuterNode* srcNode = nullptr; + GraphElementType dest; + OuterNode* destNode = nullptr; + + uint8_t srcTerminalId = 0; + uint8_t destTerminalId = 0; + + FormatType format; + LinkType type; + uint8_t frameDelay = 0; + + StaticGraphLinkConfiguration* linkConfiguration = nullptr; + StaticGraphLinkCompressionConfiguration* linkCompressionConfiguration = nullptr; +}; + +struct SubGraphInnerNodeConfiguration { + SubGraphPublicInnerNodeConfiguration* imageInnerOptions = nullptr; + SubGraphPublicInnerNodeConfiguration* irInnerOptions = nullptr; + SubGraphPublicInnerNodeConfiguration* rawInnerOptions = nullptr; +}; + +class GraphTopology { + public: + GraphLink** links = nullptr; + int32_t numOfLinks = 0; + + GraphTopology(GraphLink** links, int32_t numOfLinks, + VirtualSinkMapping* sinkMappingConfiguration); + virtual StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration); + + protected: + VirtualSinkMapping* _sinkMappingConfiguration = nullptr; + static InnerNodeOptionsFlags GetInnerOptions( + SubGraphPublicInnerNodeConfiguration* publicInnerOptions); +}; + +class IStaticGraphConfig { + public: + virtual ~IStaticGraphConfig() {} + IStaticGraphConfig(SensorMode* selectedSensorMode, VirtualSinkMapping* sinkMappingConfiguration, + int32_t graphId, int32_t selectedSettingsId); + StaticGraphStatus getGraphTopology(GraphTopology** topology); + StaticGraphStatus getSensorMode(SensorMode** sensorMode); + StaticGraphStatus getGraphId(int32_t* id); + StaticGraphStatus getSettingsId(int32_t* id); + StaticGraphStatus getVirtualSinkConnection(VirtualSink& virtualSink, HwSink* hwSink); + + protected: + SensorMode* _selectedSensorMode = nullptr; + GraphTopology* _selectedGraphTopology = nullptr; + VirtualSinkMapping* _sinkMappingConfiguration = &_selectedSinkMappingConfiguration; + + private: + int32_t _graphId; + int32_t _settingsId; + VirtualSinkMapping _selectedSinkMappingConfiguration; +}; + +#pragma pack(push, 4) + +struct IsysOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[1]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[1]; + StaticGraphKernelRes resolutionHistories[1]; + StaticGraphKernelBppConfiguration bppInfos[1]; +}; + +struct LbffBayerNoGmvNoTnrNoSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[20]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[17]; + StaticGraphKernelRes resolutionHistories[13]; + StaticGraphKernelBppConfiguration bppInfos[34]; + uint8_t systemApiConfiguration[2144]; +}; + +struct LbffBayerWithGmvNoTnrNoSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[24]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[21]; + StaticGraphKernelRes resolutionHistories[17]; + StaticGraphKernelBppConfiguration bppInfos[38]; + uint8_t systemApiConfiguration[2824]; +}; + +struct SwGdcOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[1]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[1]; + StaticGraphKernelRes resolutionHistories[1]; + StaticGraphKernelBppConfiguration bppInfos[1]; +}; + +struct LbffBayerNoGmvWithTnrNoSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[31]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[25]; + StaticGraphKernelRes resolutionHistories[19]; + StaticGraphKernelBppConfiguration bppInfos[46]; + uint8_t systemApiConfiguration[3474]; +}; + +struct LbffBayerWithGmvWithTnrNoSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[35]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[29]; + StaticGraphKernelRes resolutionHistories[23]; + StaticGraphKernelBppConfiguration bppInfos[50]; + uint8_t systemApiConfiguration[4154]; +}; + +struct SwNntmOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[1]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionHistories[1]; + StaticGraphKernelBppConfiguration bppInfos[1]; + uint8_t systemApiConfiguration[5]; +}; + +struct SwScalerOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[1]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[1]; + StaticGraphKernelRes resolutionHistories[1]; + StaticGraphKernelBppConfiguration bppInfos[1]; +}; + +struct IsysPdaf2OuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[2]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[2]; + StaticGraphKernelRes resolutionHistories[2]; + StaticGraphKernelBppConfiguration bppInfos[2]; +}; + +struct LbffBayerPdaf2NoGmvNoTnrNoSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[24]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[21]; + StaticGraphKernelRes resolutionHistories[17]; + StaticGraphKernelBppConfiguration bppInfos[38]; + uint8_t systemApiConfiguration[2616]; +}; + +struct LbffBayerPdaf2WithGmvNoTnrNoSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[28]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[25]; + StaticGraphKernelRes resolutionHistories[21]; + StaticGraphKernelBppConfiguration bppInfos[42]; + uint8_t systemApiConfiguration[3296]; +}; + +struct LbffBayerPdaf2NoGmvWithTnrNoSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[35]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[29]; + StaticGraphKernelRes resolutionHistories[23]; + StaticGraphKernelBppConfiguration bppInfos[50]; + uint8_t systemApiConfiguration[3946]; +}; + +struct LbffBayerPdaf2WithGmvWithTnrNoSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[39]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[33]; + StaticGraphKernelRes resolutionHistories[27]; + StaticGraphKernelBppConfiguration bppInfos[54]; + uint8_t systemApiConfiguration[4626]; +}; + +struct LbffBayerPdaf3NoGmvNoTnrNoSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[23]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[20]; + StaticGraphKernelRes resolutionHistories[15]; + StaticGraphKernelBppConfiguration bppInfos[37]; + uint8_t systemApiConfiguration[2396]; +}; + +struct LbffBayerPdaf3WithGmvNoTnrNoSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[27]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[24]; + StaticGraphKernelRes resolutionHistories[19]; + StaticGraphKernelBppConfiguration bppInfos[41]; + uint8_t systemApiConfiguration[3076]; +}; + +struct LbffBayerPdaf3NoGmvWithTnrNoSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[34]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[28]; + StaticGraphKernelRes resolutionHistories[21]; + StaticGraphKernelBppConfiguration bppInfos[49]; + uint8_t systemApiConfiguration[3726]; +}; + +struct LbffBayerPdaf3WithGmvWithTnrNoSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[38]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[32]; + StaticGraphKernelRes resolutionHistories[25]; + StaticGraphKernelBppConfiguration bppInfos[53]; + uint8_t systemApiConfiguration[4406]; +}; + +struct IsysDolOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[2]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[2]; + StaticGraphKernelRes resolutionHistories[2]; + StaticGraphKernelBppConfiguration bppInfos[2]; +}; + +struct LbffDol2InputsNoGmvNoTnrNoSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[22]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[19]; + StaticGraphKernelRes resolutionHistories[15]; + StaticGraphKernelBppConfiguration bppInfos[37]; + uint8_t systemApiConfiguration[2589]; +}; + +struct LbffDol2InputsWithGmvNoTnrNoSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[26]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[23]; + StaticGraphKernelRes resolutionHistories[19]; + StaticGraphKernelBppConfiguration bppInfos[41]; + uint8_t systemApiConfiguration[3269]; +}; + +struct LbffDol2InputsNoGmvWithTnrNoSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[33]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[27]; + StaticGraphKernelRes resolutionHistories[21]; + StaticGraphKernelBppConfiguration bppInfos[49]; + uint8_t systemApiConfiguration[3919]; +}; + +struct LbffDol2InputsWithGmvWithTnrNoSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[37]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[31]; + StaticGraphKernelRes resolutionHistories[25]; + StaticGraphKernelBppConfiguration bppInfos[53]; + uint8_t systemApiConfiguration[4599]; +}; + +struct LbffDolSmoothOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[3]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[2]; + StaticGraphKernelRes resolutionHistories[2]; + StaticGraphKernelBppConfiguration bppInfos[8]; + uint8_t systemApiConfiguration[476]; +}; + +struct LbffDol3InputsNoGmvNoTnrNoSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[23]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[20]; + StaticGraphKernelRes resolutionHistories[16]; + StaticGraphKernelBppConfiguration bppInfos[38]; + uint8_t systemApiConfiguration[2809]; +}; + +struct LbffDol3InputsWithGmvNoTnrNoSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[27]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[24]; + StaticGraphKernelRes resolutionHistories[20]; + StaticGraphKernelBppConfiguration bppInfos[42]; + uint8_t systemApiConfiguration[3489]; +}; + +struct LbffDol3InputsNoGmvWithTnrNoSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[34]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[28]; + StaticGraphKernelRes resolutionHistories[22]; + StaticGraphKernelBppConfiguration bppInfos[50]; + uint8_t systemApiConfiguration[4139]; +}; + +struct LbffDol3InputsWithGmvWithTnrNoSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[38]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[32]; + StaticGraphKernelRes resolutionHistories[26]; + StaticGraphKernelBppConfiguration bppInfos[54]; + uint8_t systemApiConfiguration[4819]; +}; + +struct LbffRgbIrNoGmvNoTnrNoSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[22]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[19]; + StaticGraphKernelRes resolutionHistories[15]; + StaticGraphKernelBppConfiguration bppInfos[36]; + uint8_t systemApiConfiguration[2584]; +}; + +struct LbffRgbIrIrNoGmvNoTnrNoSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[19]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[16]; + StaticGraphKernelRes resolutionHistories[13]; + StaticGraphKernelBppConfiguration bppInfos[32]; + uint8_t systemApiConfiguration[2124]; +}; + +struct LbffRgbIrWithGmvNoTnrNoSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[26]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[23]; + StaticGraphKernelRes resolutionHistories[19]; + StaticGraphKernelBppConfiguration bppInfos[40]; + uint8_t systemApiConfiguration[3264]; +}; + +struct LbffRgbIrNoGmvWithTnrNoSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[33]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[27]; + StaticGraphKernelRes resolutionHistories[21]; + StaticGraphKernelBppConfiguration bppInfos[48]; + uint8_t systemApiConfiguration[3914]; +}; + +struct LbffRgbIrIrNoGmvWithTnrNoSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[30]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[24]; + StaticGraphKernelRes resolutionHistories[19]; + StaticGraphKernelBppConfiguration bppInfos[44]; + uint8_t systemApiConfiguration[3454]; +}; + +struct LbffRgbIrWithGmvWithTnrNoSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[37]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[31]; + StaticGraphKernelRes resolutionHistories[25]; + StaticGraphKernelBppConfiguration bppInfos[52]; + uint8_t systemApiConfiguration[4594]; +}; + +struct LbffIrNoGmvNoTnrNoSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[19]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[16]; + StaticGraphKernelRes resolutionHistories[13]; + StaticGraphKernelBppConfiguration bppInfos[33]; + uint8_t systemApiConfiguration[2144]; +}; + +struct LbffIrWithGmvNoTnrNoSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[23]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[20]; + StaticGraphKernelRes resolutionHistories[17]; + StaticGraphKernelBppConfiguration bppInfos[37]; + uint8_t systemApiConfiguration[2824]; +}; + +struct LbffIrNoGmvWithTnrNoSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[30]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[24]; + StaticGraphKernelRes resolutionHistories[19]; + StaticGraphKernelBppConfiguration bppInfos[45]; + uint8_t systemApiConfiguration[3474]; +}; + +struct LbffIrWithGmvWithTnrNoSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[34]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[28]; + StaticGraphKernelRes resolutionHistories[23]; + StaticGraphKernelBppConfiguration bppInfos[49]; + uint8_t systemApiConfiguration[4154]; +}; + +struct LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[25]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[22]; + StaticGraphKernelRes resolutionHistories[17]; + StaticGraphKernelBppConfiguration bppInfos[39]; + uint8_t systemApiConfiguration[2836]; +}; + +struct LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[29]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[26]; + StaticGraphKernelRes resolutionHistories[21]; + StaticGraphKernelBppConfiguration bppInfos[43]; + uint8_t systemApiConfiguration[3516]; +}; + +struct LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[36]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[30]; + StaticGraphKernelRes resolutionHistories[23]; + StaticGraphKernelBppConfiguration bppInfos[51]; + uint8_t systemApiConfiguration[4166]; +}; + +struct LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[40]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[34]; + StaticGraphKernelRes resolutionHistories[27]; + StaticGraphKernelBppConfiguration bppInfos[55]; + uint8_t systemApiConfiguration[4846]; +}; + +struct IsysWithCvOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[4]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[3]; + StaticGraphKernelRes resolutionHistories[4]; + StaticGraphKernelBppConfiguration bppInfos[4]; + uint8_t systemApiConfiguration[54]; +}; + +struct SwSegnetOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + uint32_t streamId = 0; + uint8_t tuningMode = 0; +}; + +struct LbffBayerNoGmvNoTnrWithSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[31]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[25]; + StaticGraphKernelRes resolutionHistories[24]; + StaticGraphKernelBppConfiguration bppInfos[42]; + uint8_t systemApiConfiguration[3024]; +}; + +struct LbffBayerWithGmvNoTnrWithSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[35]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[29]; + StaticGraphKernelRes resolutionHistories[28]; + StaticGraphKernelBppConfiguration bppInfos[46]; + uint8_t systemApiConfiguration[3704]; +}; + +struct LbffBayerNoGmvWithTnrWithSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[47]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[37]; + StaticGraphKernelRes resolutionHistories[35]; + StaticGraphKernelBppConfiguration bppInfos[58]; + uint8_t systemApiConfiguration[4794]; +}; + +struct LbffBayerWithGmvWithTnrWithSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[51]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[41]; + StaticGraphKernelRes resolutionHistories[39]; + StaticGraphKernelBppConfiguration bppInfos[62]; + uint8_t systemApiConfiguration[5474]; +}; + +struct IsysPdaf2WithCvOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[5]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[4]; + StaticGraphKernelRes resolutionHistories[5]; + StaticGraphKernelBppConfiguration bppInfos[5]; + uint8_t systemApiConfiguration[54]; +}; + +struct LbffBayerPdaf2NoGmvNoTnrWithSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[35]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[29]; + StaticGraphKernelRes resolutionHistories[28]; + StaticGraphKernelBppConfiguration bppInfos[46]; + uint8_t systemApiConfiguration[3496]; +}; + +struct LbffBayerPdaf2WithGmvNoTnrWithSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[39]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[33]; + StaticGraphKernelRes resolutionHistories[32]; + StaticGraphKernelBppConfiguration bppInfos[50]; + uint8_t systemApiConfiguration[4176]; +}; + +struct LbffBayerPdaf2NoGmvWithTnrWithSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[51]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[41]; + StaticGraphKernelRes resolutionHistories[39]; + StaticGraphKernelBppConfiguration bppInfos[62]; + uint8_t systemApiConfiguration[5266]; +}; + +struct LbffBayerPdaf2WithGmvWithTnrWithSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[55]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[45]; + StaticGraphKernelRes resolutionHistories[43]; + StaticGraphKernelBppConfiguration bppInfos[66]; + uint8_t systemApiConfiguration[5946]; +}; + +struct LbffBayerPdaf3NoGmvNoTnrWithSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[34]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[28]; + StaticGraphKernelRes resolutionHistories[26]; + StaticGraphKernelBppConfiguration bppInfos[45]; + uint8_t systemApiConfiguration[3276]; +}; + +struct LbffBayerPdaf3WithGmvNoTnrWithSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[38]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[32]; + StaticGraphKernelRes resolutionHistories[30]; + StaticGraphKernelBppConfiguration bppInfos[49]; + uint8_t systemApiConfiguration[3956]; +}; + +struct LbffBayerPdaf3NoGmvWithTnrWithSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[50]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[40]; + StaticGraphKernelRes resolutionHistories[37]; + StaticGraphKernelBppConfiguration bppInfos[61]; + uint8_t systemApiConfiguration[5046]; +}; + +struct LbffBayerPdaf3WithGmvWithTnrWithSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[54]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[44]; + StaticGraphKernelRes resolutionHistories[41]; + StaticGraphKernelBppConfiguration bppInfos[65]; + uint8_t systemApiConfiguration[5726]; +}; + +struct IsysDolWithCvOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[5]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[4]; + StaticGraphKernelRes resolutionHistories[5]; + StaticGraphKernelBppConfiguration bppInfos[5]; + uint8_t systemApiConfiguration[54]; +}; + +struct LbffDol2InputsNoGmvNoTnrWithSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[33]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[27]; + StaticGraphKernelRes resolutionHistories[26]; + StaticGraphKernelBppConfiguration bppInfos[45]; + uint8_t systemApiConfiguration[3469]; +}; + +struct LbffDol2InputsWithGmvNoTnrWithSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[37]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[31]; + StaticGraphKernelRes resolutionHistories[30]; + StaticGraphKernelBppConfiguration bppInfos[49]; + uint8_t systemApiConfiguration[4149]; +}; + +struct LbffDol2InputsNoGmvWithTnrWithSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[49]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[39]; + StaticGraphKernelRes resolutionHistories[37]; + StaticGraphKernelBppConfiguration bppInfos[61]; + uint8_t systemApiConfiguration[5239]; +}; + +struct LbffDol2InputsWithGmvWithTnrWithSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[53]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[43]; + StaticGraphKernelRes resolutionHistories[41]; + StaticGraphKernelBppConfiguration bppInfos[65]; + uint8_t systemApiConfiguration[5919]; +}; + +struct LbffDol3InputsNoGmvNoTnrWithSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[34]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[28]; + StaticGraphKernelRes resolutionHistories[27]; + StaticGraphKernelBppConfiguration bppInfos[46]; + uint8_t systemApiConfiguration[3689]; +}; + +struct LbffDol3InputsWithGmvNoTnrWithSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[38]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[32]; + StaticGraphKernelRes resolutionHistories[31]; + StaticGraphKernelBppConfiguration bppInfos[50]; + uint8_t systemApiConfiguration[4369]; +}; + +struct LbffDol3InputsNoGmvWithTnrWithSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[50]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[40]; + StaticGraphKernelRes resolutionHistories[38]; + StaticGraphKernelBppConfiguration bppInfos[62]; + uint8_t systemApiConfiguration[5459]; +}; + +struct LbffDol3InputsWithGmvWithTnrWithSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[54]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[44]; + StaticGraphKernelRes resolutionHistories[42]; + StaticGraphKernelBppConfiguration bppInfos[66]; + uint8_t systemApiConfiguration[6139]; +}; + +struct LbffRgbIrNoGmvNoTnrWithSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[33]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[27]; + StaticGraphKernelRes resolutionHistories[26]; + StaticGraphKernelBppConfiguration bppInfos[44]; + uint8_t systemApiConfiguration[3464]; +}; + +struct LbffRgbIrWithGmvNoTnrWithSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[37]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[31]; + StaticGraphKernelRes resolutionHistories[30]; + StaticGraphKernelBppConfiguration bppInfos[48]; + uint8_t systemApiConfiguration[4144]; +}; + +struct LbffRgbIrNoGmvWithTnrWithSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[49]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[39]; + StaticGraphKernelRes resolutionHistories[37]; + StaticGraphKernelBppConfiguration bppInfos[60]; + uint8_t systemApiConfiguration[5234]; +}; + +struct LbffRgbIrWithGmvWithTnrWithSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[53]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[43]; + StaticGraphKernelRes resolutionHistories[41]; + StaticGraphKernelBppConfiguration bppInfos[64]; + uint8_t systemApiConfiguration[5914]; +}; + +struct LbffIrNoGmvNoTnrWithSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[30]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[24]; + StaticGraphKernelRes resolutionHistories[24]; + StaticGraphKernelBppConfiguration bppInfos[41]; + uint8_t systemApiConfiguration[3024]; +}; + +struct LbffIrWithGmvNoTnrWithSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[34]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[28]; + StaticGraphKernelRes resolutionHistories[28]; + StaticGraphKernelBppConfiguration bppInfos[45]; + uint8_t systemApiConfiguration[3704]; +}; + +struct LbffIrNoGmvWithTnrWithSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[46]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[36]; + StaticGraphKernelRes resolutionHistories[35]; + StaticGraphKernelBppConfiguration bppInfos[57]; + uint8_t systemApiConfiguration[4794]; +}; + +struct LbffIrWithGmvWithTnrWithSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[50]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[40]; + StaticGraphKernelRes resolutionHistories[39]; + StaticGraphKernelBppConfiguration bppInfos[61]; + uint8_t systemApiConfiguration[5474]; +}; + +struct LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[36]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[30]; + StaticGraphKernelRes resolutionHistories[28]; + StaticGraphKernelBppConfiguration bppInfos[47]; + uint8_t systemApiConfiguration[3716]; +}; + +struct LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[40]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[34]; + StaticGraphKernelRes resolutionHistories[32]; + StaticGraphKernelBppConfiguration bppInfos[51]; + uint8_t systemApiConfiguration[4396]; +}; + +struct LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[52]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[42]; + StaticGraphKernelRes resolutionHistories[39]; + StaticGraphKernelBppConfiguration bppInfos[63]; + uint8_t systemApiConfiguration[5486]; +}; + +struct LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNodeConfiguration { + uint8_t numberOfFragments = 0; + KernelFragments fragmentConfigurations[56]; + uint32_t streamId = 0; + uint8_t tuningMode = 0; + StaticGraphKernelRes resolutionInfos[46]; + StaticGraphKernelRes resolutionHistories[43]; + StaticGraphKernelBppConfiguration bppInfos[67]; + uint8_t systemApiConfiguration[6166]; +}; + +struct GraphConfiguration100000 { + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffBayerNoGmvNoTnrNoSapOuterNodeConfiguration lbffBayerNoGmvNoTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[9]; +}; + +struct GraphConfiguration100001 { + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffBayerWithGmvNoTnrNoSapOuterNodeConfiguration + lbffBayerWithGmvNoTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[14]; +}; + +struct GraphConfiguration100002 { + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffBayerNoGmvWithTnrNoSapOuterNodeConfiguration + lbffBayerNoGmvWithTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[12]; +}; + +struct GraphConfiguration100003 { + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffBayerWithGmvWithTnrNoSapOuterNodeConfiguration + lbffBayerWithGmvWithTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[17]; +}; + +struct GraphConfiguration100079 { + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffBayerNoGmvWithTnrNoSapOuterNodeConfiguration + lbffBayerNoGmvWithTnrNoSapOuterNodeConfiguration; + SwNntmOuterNodeConfiguration swNntmOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[17]; +}; + +struct GraphConfiguration100080 { + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffBayerNoGmvWithTnrNoSapOuterNodeConfiguration + lbffBayerNoGmvWithTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[17]; +}; + +struct GraphConfiguration100081 { + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffBayerWithGmvWithTnrNoSapOuterNodeConfiguration + lbffBayerWithGmvWithTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[19]; +}; + +struct GraphConfiguration100004 { + VirtualSinkMapping sinkMappingConfiguration; + IsysPdaf2OuterNodeConfiguration isysPdaf2OuterNodeConfiguration; + LbffBayerPdaf2NoGmvNoTnrNoSapOuterNodeConfiguration + lbffBayerPdaf2NoGmvNoTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[12]; +}; + +struct GraphConfiguration100005 { + VirtualSinkMapping sinkMappingConfiguration; + IsysPdaf2OuterNodeConfiguration isysPdaf2OuterNodeConfiguration; + LbffBayerPdaf2WithGmvNoTnrNoSapOuterNodeConfiguration + lbffBayerPdaf2WithGmvNoTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[17]; +}; + +struct GraphConfiguration100006 { + VirtualSinkMapping sinkMappingConfiguration; + IsysPdaf2OuterNodeConfiguration isysPdaf2OuterNodeConfiguration; + LbffBayerPdaf2NoGmvWithTnrNoSapOuterNodeConfiguration + lbffBayerPdaf2NoGmvWithTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[15]; +}; + +struct GraphConfiguration100007 { + VirtualSinkMapping sinkMappingConfiguration; + IsysPdaf2OuterNodeConfiguration isysPdaf2OuterNodeConfiguration; + LbffBayerPdaf2WithGmvWithTnrNoSapOuterNodeConfiguration + lbffBayerPdaf2WithGmvWithTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[20]; +}; + +struct GraphConfiguration100008 { + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffBayerPdaf3NoGmvNoTnrNoSapOuterNodeConfiguration + lbffBayerPdaf3NoGmvNoTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[10]; +}; + +struct GraphConfiguration100009 { + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffBayerPdaf3WithGmvNoTnrNoSapOuterNodeConfiguration + lbffBayerPdaf3WithGmvNoTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[15]; +}; + +struct GraphConfiguration100010 { + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffBayerPdaf3NoGmvWithTnrNoSapOuterNodeConfiguration + lbffBayerPdaf3NoGmvWithTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[13]; +}; + +struct GraphConfiguration100011 { + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffBayerPdaf3WithGmvWithTnrNoSapOuterNodeConfiguration + lbffBayerPdaf3WithGmvWithTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[18]; +}; + +struct GraphConfiguration100045 { + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffBayerPdaf3NoGmvWithTnrNoSapOuterNodeConfiguration + lbffBayerPdaf3NoGmvWithTnrNoSapOuterNodeConfiguration; + SwNntmOuterNodeConfiguration swNntmOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[18]; +}; + +struct GraphConfiguration100012 { + VirtualSinkMapping sinkMappingConfiguration; + IsysDolOuterNodeConfiguration isysDolOuterNodeConfiguration; + LbffDol2InputsNoGmvNoTnrNoSapOuterNodeConfiguration + lbffDol2InputsNoGmvNoTnrNoSapOuterNodeConfiguration; + SwNntmOuterNodeConfiguration swNntmOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[17]; +}; + +struct GraphConfiguration100013 { + VirtualSinkMapping sinkMappingConfiguration; + IsysDolOuterNodeConfiguration isysDolOuterNodeConfiguration; + LbffDol2InputsWithGmvNoTnrNoSapOuterNodeConfiguration + lbffDol2InputsWithGmvNoTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[17]; +}; + +struct GraphConfiguration100014 { + VirtualSinkMapping sinkMappingConfiguration; + IsysDolOuterNodeConfiguration isysDolOuterNodeConfiguration; + LbffDol2InputsNoGmvWithTnrNoSapOuterNodeConfiguration + lbffDol2InputsNoGmvWithTnrNoSapOuterNodeConfiguration; + SwNntmOuterNodeConfiguration swNntmOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[20]; +}; + +struct GraphConfiguration100015 { + VirtualSinkMapping sinkMappingConfiguration; + IsysDolOuterNodeConfiguration isysDolOuterNodeConfiguration; + LbffDol2InputsWithGmvWithTnrNoSapOuterNodeConfiguration + lbffDol2InputsWithGmvWithTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[20]; +}; + +struct GraphConfiguration100016 { + VirtualSinkMapping sinkMappingConfiguration; + IsysDolOuterNodeConfiguration isysDolOuterNodeConfiguration; + LbffDolSmoothOuterNodeConfiguration lbffDolSmoothOuterNodeConfiguration; + LbffDol3InputsNoGmvNoTnrNoSapOuterNodeConfiguration + lbffDol3InputsNoGmvNoTnrNoSapOuterNodeConfiguration; + SwNntmOuterNodeConfiguration swNntmOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[19]; +}; + +struct GraphConfiguration100017 { + VirtualSinkMapping sinkMappingConfiguration; + IsysDolOuterNodeConfiguration isysDolOuterNodeConfiguration; + LbffDolSmoothOuterNodeConfiguration lbffDolSmoothOuterNodeConfiguration; + LbffDol3InputsWithGmvNoTnrNoSapOuterNodeConfiguration + lbffDol3InputsWithGmvNoTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[19]; +}; + +struct GraphConfiguration100018 { + VirtualSinkMapping sinkMappingConfiguration; + IsysDolOuterNodeConfiguration isysDolOuterNodeConfiguration; + LbffDolSmoothOuterNodeConfiguration lbffDolSmoothOuterNodeConfiguration; + LbffDol3InputsNoGmvWithTnrNoSapOuterNodeConfiguration + lbffDol3InputsNoGmvWithTnrNoSapOuterNodeConfiguration; + SwNntmOuterNodeConfiguration swNntmOuterNodeConfiguration; + SwScalerOuterNodeConfiguration swScalerOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[22]; +}; + +struct GraphConfiguration100019 { + VirtualSinkMapping sinkMappingConfiguration; + IsysDolOuterNodeConfiguration isysDolOuterNodeConfiguration; + LbffDolSmoothOuterNodeConfiguration lbffDolSmoothOuterNodeConfiguration; + LbffDol3InputsWithGmvWithTnrNoSapOuterNodeConfiguration + lbffDol3InputsWithGmvWithTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[22]; +}; + +struct GraphConfiguration100020 { + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffRgbIrNoGmvNoTnrNoSapOuterNodeConfiguration lbffRgbIrNoGmvNoTnrNoSapOuterNodeConfiguration; + LbffRgbIrIrNoGmvNoTnrNoSapOuterNodeConfiguration + lbffRgbIrIrNoGmvNoTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[17]; +}; + +struct GraphConfiguration100021 { + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffRgbIrWithGmvNoTnrNoSapOuterNodeConfiguration + lbffRgbIrWithGmvNoTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + LbffRgbIrIrNoGmvNoTnrNoSapOuterNodeConfiguration + lbffRgbIrIrNoGmvNoTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[22]; +}; + +struct GraphConfiguration100022 { + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffRgbIrNoGmvWithTnrNoSapOuterNodeConfiguration + lbffRgbIrNoGmvWithTnrNoSapOuterNodeConfiguration; + LbffRgbIrIrNoGmvWithTnrNoSapOuterNodeConfiguration + lbffRgbIrIrNoGmvWithTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[23]; +}; + +struct GraphConfiguration100023 { + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffRgbIrWithGmvWithTnrNoSapOuterNodeConfiguration + lbffRgbIrWithGmvWithTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + LbffRgbIrIrNoGmvWithTnrNoSapOuterNodeConfiguration + lbffRgbIrIrNoGmvWithTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[28]; +}; + +struct GraphConfiguration100024 { + VirtualSinkMapping sinkMappingConfiguration; + LbffBayerNoGmvNoTnrNoSapOuterNodeConfiguration lbffBayerNoGmvNoTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[8]; +}; + +struct GraphConfiguration100040 { + VirtualSinkMapping sinkMappingConfiguration; + LbffBayerWithGmvNoTnrNoSapOuterNodeConfiguration + lbffBayerWithGmvNoTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[13]; +}; + +struct GraphConfiguration100041 { + VirtualSinkMapping sinkMappingConfiguration; + LbffBayerWithGmvWithTnrNoSapOuterNodeConfiguration + lbffBayerWithGmvWithTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[16]; +}; + +struct GraphConfiguration100042 { + VirtualSinkMapping sinkMappingConfiguration; + LbffBayerNoGmvWithTnrNoSapOuterNodeConfiguration + lbffBayerNoGmvWithTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[11]; +}; + +struct GraphConfiguration100027 { + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffIrNoGmvNoTnrNoSapOuterNodeConfiguration lbffIrNoGmvNoTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[9]; +}; + +struct GraphConfiguration100028 { + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffIrWithGmvNoTnrNoSapOuterNodeConfiguration lbffIrWithGmvNoTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[14]; +}; + +struct GraphConfiguration100029 { + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffIrNoGmvWithTnrNoSapOuterNodeConfiguration lbffIrNoGmvWithTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[12]; +}; + +struct GraphConfiguration100030 { + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffIrWithGmvWithTnrNoSapOuterNodeConfiguration lbffIrWithGmvWithTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[17]; +}; + +struct GraphConfiguration100031 { + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNodeConfiguration + lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[11]; +}; + +struct GraphConfiguration100032 { + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNodeConfiguration + lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[16]; +}; + +struct GraphConfiguration100033 { + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNodeConfiguration + lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[14]; +}; + +struct GraphConfiguration100034 { + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNodeConfiguration + lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[19]; +}; + +struct GraphConfiguration100100 { + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffBayerNoGmvNoTnrWithSapOuterNodeConfiguration + lbffBayerNoGmvNoTnrWithSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[15]; +}; + +struct GraphConfiguration100101 { + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffBayerWithGmvNoTnrWithSapOuterNodeConfiguration + lbffBayerWithGmvNoTnrWithSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[20]; +}; + +struct GraphConfiguration100102 { + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffBayerNoGmvWithTnrWithSapOuterNodeConfiguration + lbffBayerNoGmvWithTnrWithSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[20]; +}; + +struct GraphConfiguration100103 { + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffBayerWithGmvWithTnrWithSapOuterNodeConfiguration + lbffBayerWithGmvWithTnrWithSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[25]; +}; + +struct GraphConfiguration100104 { + VirtualSinkMapping sinkMappingConfiguration; + IsysPdaf2WithCvOuterNodeConfiguration isysPdaf2WithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffBayerPdaf2NoGmvNoTnrWithSapOuterNodeConfiguration + lbffBayerPdaf2NoGmvNoTnrWithSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[18]; +}; + +struct GraphConfiguration100105 { + VirtualSinkMapping sinkMappingConfiguration; + IsysPdaf2WithCvOuterNodeConfiguration isysPdaf2WithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffBayerPdaf2WithGmvNoTnrWithSapOuterNodeConfiguration + lbffBayerPdaf2WithGmvNoTnrWithSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[23]; +}; + +struct GraphConfiguration100106 { + VirtualSinkMapping sinkMappingConfiguration; + IsysPdaf2WithCvOuterNodeConfiguration isysPdaf2WithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffBayerPdaf2NoGmvWithTnrWithSapOuterNodeConfiguration + lbffBayerPdaf2NoGmvWithTnrWithSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[23]; +}; + +struct GraphConfiguration100107 { + VirtualSinkMapping sinkMappingConfiguration; + IsysPdaf2WithCvOuterNodeConfiguration isysPdaf2WithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffBayerPdaf2WithGmvWithTnrWithSapOuterNodeConfiguration + lbffBayerPdaf2WithGmvWithTnrWithSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[28]; +}; + +struct GraphConfiguration100108 { + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + LbffBayerPdaf3NoGmvNoTnrWithSapOuterNodeConfiguration + lbffBayerPdaf3NoGmvNoTnrWithSapOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[16]; +}; + +struct GraphConfiguration100109 { + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + LbffBayerPdaf3WithGmvNoTnrWithSapOuterNodeConfiguration + lbffBayerPdaf3WithGmvNoTnrWithSapOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[21]; +}; + +struct GraphConfiguration100110 { + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + LbffBayerPdaf3NoGmvWithTnrWithSapOuterNodeConfiguration + lbffBayerPdaf3NoGmvWithTnrWithSapOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[21]; +}; + +struct GraphConfiguration100111 { + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + LbffBayerPdaf3WithGmvWithTnrWithSapOuterNodeConfiguration + lbffBayerPdaf3WithGmvWithTnrWithSapOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[26]; +}; + +struct GraphConfiguration100112 { + VirtualSinkMapping sinkMappingConfiguration; + IsysDolWithCvOuterNodeConfiguration isysDolWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffDol2InputsNoGmvNoTnrWithSapOuterNodeConfiguration + lbffDol2InputsNoGmvNoTnrWithSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[19]; +}; + +struct GraphConfiguration100113 { + VirtualSinkMapping sinkMappingConfiguration; + IsysDolWithCvOuterNodeConfiguration isysDolWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffDol2InputsWithGmvNoTnrWithSapOuterNodeConfiguration + lbffDol2InputsWithGmvNoTnrWithSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[24]; +}; + +struct GraphConfiguration100114 { + VirtualSinkMapping sinkMappingConfiguration; + IsysDolWithCvOuterNodeConfiguration isysDolWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffDol2InputsNoGmvWithTnrWithSapOuterNodeConfiguration + lbffDol2InputsNoGmvWithTnrWithSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[24]; +}; + +struct GraphConfiguration100115 { + VirtualSinkMapping sinkMappingConfiguration; + IsysDolWithCvOuterNodeConfiguration isysDolWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffDol2InputsWithGmvWithTnrWithSapOuterNodeConfiguration + lbffDol2InputsWithGmvWithTnrWithSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[29]; +}; + +struct GraphConfiguration100116 { + VirtualSinkMapping sinkMappingConfiguration; + IsysDolWithCvOuterNodeConfiguration isysDolWithCvOuterNodeConfiguration; + LbffDolSmoothOuterNodeConfiguration lbffDolSmoothOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffDol3InputsNoGmvNoTnrWithSapOuterNodeConfiguration + lbffDol3InputsNoGmvNoTnrWithSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[21]; +}; + +struct GraphConfiguration100117 { + VirtualSinkMapping sinkMappingConfiguration; + IsysDolWithCvOuterNodeConfiguration isysDolWithCvOuterNodeConfiguration; + LbffDolSmoothOuterNodeConfiguration lbffDolSmoothOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffDol3InputsWithGmvNoTnrWithSapOuterNodeConfiguration + lbffDol3InputsWithGmvNoTnrWithSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[26]; +}; + +struct GraphConfiguration100118 { + VirtualSinkMapping sinkMappingConfiguration; + IsysDolWithCvOuterNodeConfiguration isysDolWithCvOuterNodeConfiguration; + LbffDolSmoothOuterNodeConfiguration lbffDolSmoothOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffDol3InputsNoGmvWithTnrWithSapOuterNodeConfiguration + lbffDol3InputsNoGmvWithTnrWithSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[26]; +}; + +struct GraphConfiguration100119 { + VirtualSinkMapping sinkMappingConfiguration; + IsysDolWithCvOuterNodeConfiguration isysDolWithCvOuterNodeConfiguration; + LbffDolSmoothOuterNodeConfiguration lbffDolSmoothOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffDol3InputsWithGmvWithTnrWithSapOuterNodeConfiguration + lbffDol3InputsWithGmvWithTnrWithSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[31]; +}; + +struct GraphConfiguration100120 { + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffRgbIrNoGmvNoTnrWithSapOuterNodeConfiguration + lbffRgbIrNoGmvNoTnrWithSapOuterNodeConfiguration; + LbffRgbIrIrNoGmvNoTnrNoSapOuterNodeConfiguration + lbffRgbIrIrNoGmvNoTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[23]; +}; + +struct GraphConfiguration100121 { + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffRgbIrWithGmvNoTnrWithSapOuterNodeConfiguration + lbffRgbIrWithGmvNoTnrWithSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + LbffRgbIrIrNoGmvNoTnrNoSapOuterNodeConfiguration + lbffRgbIrIrNoGmvNoTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[28]; +}; + +struct GraphConfiguration100122 { + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffRgbIrNoGmvWithTnrWithSapOuterNodeConfiguration + lbffRgbIrNoGmvWithTnrWithSapOuterNodeConfiguration; + LbffRgbIrIrNoGmvWithTnrNoSapOuterNodeConfiguration + lbffRgbIrIrNoGmvWithTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[31]; +}; + +struct GraphConfiguration100123 { + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffRgbIrWithGmvWithTnrWithSapOuterNodeConfiguration + lbffRgbIrWithGmvWithTnrWithSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + LbffRgbIrIrNoGmvWithTnrNoSapOuterNodeConfiguration + lbffRgbIrIrNoGmvWithTnrNoSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[36]; +}; + +struct GraphConfiguration100127 { + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffIrNoGmvNoTnrWithSapOuterNodeConfiguration lbffIrNoGmvNoTnrWithSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[15]; +}; + +struct GraphConfiguration100128 { + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffIrWithGmvNoTnrWithSapOuterNodeConfiguration lbffIrWithGmvNoTnrWithSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[20]; +}; + +struct GraphConfiguration100129 { + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffIrNoGmvWithTnrWithSapOuterNodeConfiguration lbffIrNoGmvWithTnrWithSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[20]; +}; + +struct GraphConfiguration100130 { + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffIrWithGmvWithTnrWithSapOuterNodeConfiguration + lbffIrWithGmvWithTnrWithSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[25]; +}; + +struct GraphConfiguration100131 { + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNodeConfiguration + lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[17]; +}; + +struct GraphConfiguration100132 { + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNodeConfiguration + lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[22]; +}; + +struct GraphConfiguration100133 { + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNodeConfiguration + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[22]; +}; + +struct GraphConfiguration100134 { + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + SwSegnetOuterNodeConfiguration swSegnetOuterNodeConfiguration; + LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNodeConfiguration + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNodeConfiguration; + SwGdcOuterNodeConfiguration swGdcOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[27]; +}; + +struct GraphConfiguration100026 { + VirtualSinkMapping sinkMappingConfiguration; + IsysOuterNodeConfiguration isysOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[2]; +}; + +struct GraphConfiguration100035 { + VirtualSinkMapping sinkMappingConfiguration; + IsysDolOuterNodeConfiguration isysDolOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[4]; +}; + +struct GraphConfiguration100036 { + VirtualSinkMapping sinkMappingConfiguration; + IsysPdaf2OuterNodeConfiguration isysPdaf2OuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[4]; +}; + +struct GraphConfiguration100037 { + VirtualSinkMapping sinkMappingConfiguration; + IsysWithCvOuterNodeConfiguration isysWithCvOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[4]; +}; + +struct GraphConfiguration100038 { + VirtualSinkMapping sinkMappingConfiguration; + IsysDolWithCvOuterNodeConfiguration isysDolWithCvOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[6]; +}; + +struct GraphConfiguration100039 { + VirtualSinkMapping sinkMappingConfiguration; + IsysPdaf2WithCvOuterNodeConfiguration isysPdaf2WithCvOuterNodeConfiguration; + StaticGraphLinkConfiguration linkConfigurations[6]; +}; +#pragma pack(pop) + +class IsysOuterNode : public OuterNode { + public: + IsysOuterNode() : OuterNode() {} + void Init(IsysOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffBayerNoGmvNoTnrNoSapOuterNode : public OuterNode { + public: + LbffBayerNoGmvNoTnrNoSapOuterNode() : OuterNode() {} + void Init(LbffBayerNoGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffBayerWithGmvNoTnrNoSapOuterNode : public OuterNode { + public: + LbffBayerWithGmvNoTnrNoSapOuterNode() : OuterNode() {} + void Init(LbffBayerWithGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class SwGdcOuterNode : public OuterNode { + public: + SwGdcOuterNode() : OuterNode() {} + void Init(SwGdcOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffBayerNoGmvWithTnrNoSapOuterNode : public OuterNode { + public: + LbffBayerNoGmvWithTnrNoSapOuterNode() : OuterNode() {} + void Init(LbffBayerNoGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffBayerWithGmvWithTnrNoSapOuterNode : public OuterNode { + public: + LbffBayerWithGmvWithTnrNoSapOuterNode() : OuterNode() {} + void Init(LbffBayerWithGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class SwNntmOuterNode : public OuterNode { + public: + SwNntmOuterNode() : OuterNode() {} + void Init(SwNntmOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class SwScalerOuterNode : public OuterNode { + public: + SwScalerOuterNode() : OuterNode() {} + void Init(SwScalerOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class IsysPdaf2OuterNode : public OuterNode { + public: + IsysPdaf2OuterNode() : OuterNode() {} + void Init(IsysPdaf2OuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffBayerPdaf2NoGmvNoTnrNoSapOuterNode : public OuterNode { + public: + LbffBayerPdaf2NoGmvNoTnrNoSapOuterNode() : OuterNode() {} + void Init(LbffBayerPdaf2NoGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffBayerPdaf2WithGmvNoTnrNoSapOuterNode : public OuterNode { + public: + LbffBayerPdaf2WithGmvNoTnrNoSapOuterNode() : OuterNode() {} + void Init(LbffBayerPdaf2WithGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffBayerPdaf2NoGmvWithTnrNoSapOuterNode : public OuterNode { + public: + LbffBayerPdaf2NoGmvWithTnrNoSapOuterNode() : OuterNode() {} + void Init(LbffBayerPdaf2NoGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffBayerPdaf2WithGmvWithTnrNoSapOuterNode : public OuterNode { + public: + LbffBayerPdaf2WithGmvWithTnrNoSapOuterNode() : OuterNode() {} + void Init(LbffBayerPdaf2WithGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffBayerPdaf3NoGmvNoTnrNoSapOuterNode : public OuterNode { + public: + LbffBayerPdaf3NoGmvNoTnrNoSapOuterNode() : OuterNode() {} + void Init(LbffBayerPdaf3NoGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffBayerPdaf3WithGmvNoTnrNoSapOuterNode : public OuterNode { + public: + LbffBayerPdaf3WithGmvNoTnrNoSapOuterNode() : OuterNode() {} + void Init(LbffBayerPdaf3WithGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffBayerPdaf3NoGmvWithTnrNoSapOuterNode : public OuterNode { + public: + LbffBayerPdaf3NoGmvWithTnrNoSapOuterNode() : OuterNode() {} + void Init(LbffBayerPdaf3NoGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffBayerPdaf3WithGmvWithTnrNoSapOuterNode : public OuterNode { + public: + LbffBayerPdaf3WithGmvWithTnrNoSapOuterNode() : OuterNode() {} + void Init(LbffBayerPdaf3WithGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class IsysDolOuterNode : public OuterNode { + public: + IsysDolOuterNode() : OuterNode() {} + void Init(IsysDolOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffDol2InputsNoGmvNoTnrNoSapOuterNode : public OuterNode { + public: + LbffDol2InputsNoGmvNoTnrNoSapOuterNode() : OuterNode() {} + void Init(LbffDol2InputsNoGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffDol2InputsWithGmvNoTnrNoSapOuterNode : public OuterNode { + public: + LbffDol2InputsWithGmvNoTnrNoSapOuterNode() : OuterNode() {} + void Init(LbffDol2InputsWithGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffDol2InputsNoGmvWithTnrNoSapOuterNode : public OuterNode { + public: + LbffDol2InputsNoGmvWithTnrNoSapOuterNode() : OuterNode() {} + void Init(LbffDol2InputsNoGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffDol2InputsWithGmvWithTnrNoSapOuterNode : public OuterNode { + public: + LbffDol2InputsWithGmvWithTnrNoSapOuterNode() : OuterNode() {} + void Init(LbffDol2InputsWithGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffDolSmoothOuterNode : public OuterNode { + public: + LbffDolSmoothOuterNode() : OuterNode() {} + void Init(LbffDolSmoothOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffDol3InputsNoGmvNoTnrNoSapOuterNode : public OuterNode { + public: + LbffDol3InputsNoGmvNoTnrNoSapOuterNode() : OuterNode() {} + void Init(LbffDol3InputsNoGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffDol3InputsWithGmvNoTnrNoSapOuterNode : public OuterNode { + public: + LbffDol3InputsWithGmvNoTnrNoSapOuterNode() : OuterNode() {} + void Init(LbffDol3InputsWithGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffDol3InputsNoGmvWithTnrNoSapOuterNode : public OuterNode { + public: + LbffDol3InputsNoGmvWithTnrNoSapOuterNode() : OuterNode() {} + void Init(LbffDol3InputsNoGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffDol3InputsWithGmvWithTnrNoSapOuterNode : public OuterNode { + public: + LbffDol3InputsWithGmvWithTnrNoSapOuterNode() : OuterNode() {} + void Init(LbffDol3InputsWithGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffRgbIrNoGmvNoTnrNoSapOuterNode : public OuterNode { + public: + LbffRgbIrNoGmvNoTnrNoSapOuterNode() : OuterNode() {} + void Init(LbffRgbIrNoGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffRgbIrIrNoGmvNoTnrNoSapOuterNode : public OuterNode { + public: + LbffRgbIrIrNoGmvNoTnrNoSapOuterNode() : OuterNode() {} + void Init(LbffRgbIrIrNoGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffRgbIrWithGmvNoTnrNoSapOuterNode : public OuterNode { + public: + LbffRgbIrWithGmvNoTnrNoSapOuterNode() : OuterNode() {} + void Init(LbffRgbIrWithGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffRgbIrNoGmvWithTnrNoSapOuterNode : public OuterNode { + public: + LbffRgbIrNoGmvWithTnrNoSapOuterNode() : OuterNode() {} + void Init(LbffRgbIrNoGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffRgbIrIrNoGmvWithTnrNoSapOuterNode : public OuterNode { + public: + LbffRgbIrIrNoGmvWithTnrNoSapOuterNode() : OuterNode() {} + void Init(LbffRgbIrIrNoGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffRgbIrWithGmvWithTnrNoSapOuterNode : public OuterNode { + public: + LbffRgbIrWithGmvWithTnrNoSapOuterNode() : OuterNode() {} + void Init(LbffRgbIrWithGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffIrNoGmvNoTnrNoSapOuterNode : public OuterNode { + public: + LbffIrNoGmvNoTnrNoSapOuterNode() : OuterNode() {} + void Init(LbffIrNoGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffIrWithGmvNoTnrNoSapOuterNode : public OuterNode { + public: + LbffIrWithGmvNoTnrNoSapOuterNode() : OuterNode() {} + void Init(LbffIrWithGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffIrNoGmvWithTnrNoSapOuterNode : public OuterNode { + public: + LbffIrNoGmvWithTnrNoSapOuterNode() : OuterNode() {} + void Init(LbffIrNoGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffIrWithGmvWithTnrNoSapOuterNode : public OuterNode { + public: + LbffIrWithGmvWithTnrNoSapOuterNode() : OuterNode() {} + void Init(LbffIrWithGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode : public OuterNode { + public: + LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode() : OuterNode() {} + void Init( + LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode : public OuterNode { + public: + LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode() : OuterNode() {} + void Init( + LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode : public OuterNode { + public: + LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode() : OuterNode() {} + void Init( + LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode : public OuterNode { + public: + LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode() : OuterNode() {} + void Init( + LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class IsysWithCvOuterNode : public OuterNode { + public: + IsysWithCvOuterNode() : OuterNode() {} + void Init(IsysWithCvOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class SwSegnetOuterNode : public OuterNode { + public: + SwSegnetOuterNode() : OuterNode() {} + void Init(SwSegnetOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffBayerNoGmvNoTnrWithSapOuterNode : public OuterNode { + public: + LbffBayerNoGmvNoTnrWithSapOuterNode() : OuterNode() {} + void Init(LbffBayerNoGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffBayerWithGmvNoTnrWithSapOuterNode : public OuterNode { + public: + LbffBayerWithGmvNoTnrWithSapOuterNode() : OuterNode() {} + void Init(LbffBayerWithGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffBayerNoGmvWithTnrWithSapOuterNode : public OuterNode { + public: + LbffBayerNoGmvWithTnrWithSapOuterNode() : OuterNode() {} + void Init(LbffBayerNoGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffBayerWithGmvWithTnrWithSapOuterNode : public OuterNode { + public: + LbffBayerWithGmvWithTnrWithSapOuterNode() : OuterNode() {} + void Init(LbffBayerWithGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class IsysPdaf2WithCvOuterNode : public OuterNode { + public: + IsysPdaf2WithCvOuterNode() : OuterNode() {} + void Init(IsysPdaf2WithCvOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffBayerPdaf2NoGmvNoTnrWithSapOuterNode : public OuterNode { + public: + LbffBayerPdaf2NoGmvNoTnrWithSapOuterNode() : OuterNode() {} + void Init(LbffBayerPdaf2NoGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffBayerPdaf2WithGmvNoTnrWithSapOuterNode : public OuterNode { + public: + LbffBayerPdaf2WithGmvNoTnrWithSapOuterNode() : OuterNode() {} + void Init(LbffBayerPdaf2WithGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffBayerPdaf2NoGmvWithTnrWithSapOuterNode : public OuterNode { + public: + LbffBayerPdaf2NoGmvWithTnrWithSapOuterNode() : OuterNode() {} + void Init(LbffBayerPdaf2NoGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffBayerPdaf2WithGmvWithTnrWithSapOuterNode : public OuterNode { + public: + LbffBayerPdaf2WithGmvWithTnrWithSapOuterNode() : OuterNode() {} + void Init( + LbffBayerPdaf2WithGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffBayerPdaf3NoGmvNoTnrWithSapOuterNode : public OuterNode { + public: + LbffBayerPdaf3NoGmvNoTnrWithSapOuterNode() : OuterNode() {} + void Init(LbffBayerPdaf3NoGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffBayerPdaf3WithGmvNoTnrWithSapOuterNode : public OuterNode { + public: + LbffBayerPdaf3WithGmvNoTnrWithSapOuterNode() : OuterNode() {} + void Init(LbffBayerPdaf3WithGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffBayerPdaf3NoGmvWithTnrWithSapOuterNode : public OuterNode { + public: + LbffBayerPdaf3NoGmvWithTnrWithSapOuterNode() : OuterNode() {} + void Init(LbffBayerPdaf3NoGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffBayerPdaf3WithGmvWithTnrWithSapOuterNode : public OuterNode { + public: + LbffBayerPdaf3WithGmvWithTnrWithSapOuterNode() : OuterNode() {} + void Init( + LbffBayerPdaf3WithGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class IsysDolWithCvOuterNode : public OuterNode { + public: + IsysDolWithCvOuterNode() : OuterNode() {} + void Init(IsysDolWithCvOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffDol2InputsNoGmvNoTnrWithSapOuterNode : public OuterNode { + public: + LbffDol2InputsNoGmvNoTnrWithSapOuterNode() : OuterNode() {} + void Init(LbffDol2InputsNoGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffDol2InputsWithGmvNoTnrWithSapOuterNode : public OuterNode { + public: + LbffDol2InputsWithGmvNoTnrWithSapOuterNode() : OuterNode() {} + void Init(LbffDol2InputsWithGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffDol2InputsNoGmvWithTnrWithSapOuterNode : public OuterNode { + public: + LbffDol2InputsNoGmvWithTnrWithSapOuterNode() : OuterNode() {} + void Init(LbffDol2InputsNoGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffDol2InputsWithGmvWithTnrWithSapOuterNode : public OuterNode { + public: + LbffDol2InputsWithGmvWithTnrWithSapOuterNode() : OuterNode() {} + void Init( + LbffDol2InputsWithGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffDol3InputsNoGmvNoTnrWithSapOuterNode : public OuterNode { + public: + LbffDol3InputsNoGmvNoTnrWithSapOuterNode() : OuterNode() {} + void Init(LbffDol3InputsNoGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffDol3InputsWithGmvNoTnrWithSapOuterNode : public OuterNode { + public: + LbffDol3InputsWithGmvNoTnrWithSapOuterNode() : OuterNode() {} + void Init(LbffDol3InputsWithGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffDol3InputsNoGmvWithTnrWithSapOuterNode : public OuterNode { + public: + LbffDol3InputsNoGmvWithTnrWithSapOuterNode() : OuterNode() {} + void Init(LbffDol3InputsNoGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffDol3InputsWithGmvWithTnrWithSapOuterNode : public OuterNode { + public: + LbffDol3InputsWithGmvWithTnrWithSapOuterNode() : OuterNode() {} + void Init( + LbffDol3InputsWithGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffRgbIrNoGmvNoTnrWithSapOuterNode : public OuterNode { + public: + LbffRgbIrNoGmvNoTnrWithSapOuterNode() : OuterNode() {} + void Init(LbffRgbIrNoGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffRgbIrWithGmvNoTnrWithSapOuterNode : public OuterNode { + public: + LbffRgbIrWithGmvNoTnrWithSapOuterNode() : OuterNode() {} + void Init(LbffRgbIrWithGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffRgbIrNoGmvWithTnrWithSapOuterNode : public OuterNode { + public: + LbffRgbIrNoGmvWithTnrWithSapOuterNode() : OuterNode() {} + void Init(LbffRgbIrNoGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffRgbIrWithGmvWithTnrWithSapOuterNode : public OuterNode { + public: + LbffRgbIrWithGmvWithTnrWithSapOuterNode() : OuterNode() {} + void Init(LbffRgbIrWithGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffIrNoGmvNoTnrWithSapOuterNode : public OuterNode { + public: + LbffIrNoGmvNoTnrWithSapOuterNode() : OuterNode() {} + void Init(LbffIrNoGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffIrWithGmvNoTnrWithSapOuterNode : public OuterNode { + public: + LbffIrWithGmvNoTnrWithSapOuterNode() : OuterNode() {} + void Init(LbffIrWithGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffIrNoGmvWithTnrWithSapOuterNode : public OuterNode { + public: + LbffIrNoGmvWithTnrWithSapOuterNode() : OuterNode() {} + void Init(LbffIrNoGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffIrWithGmvWithTnrWithSapOuterNode : public OuterNode { + public: + LbffIrWithGmvWithTnrWithSapOuterNode() : OuterNode() {} + void Init(LbffIrWithGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode : public OuterNode { + public: + LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode() : OuterNode() {} + void Init( + LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode : public OuterNode { + public: + LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode() : OuterNode() {} + void Init( + LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode : public OuterNode { + public: + LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode() : OuterNode() {} + void Init( + LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNodeConfiguration* selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; +class LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode : public OuterNode { + public: + LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode() : OuterNode() {} + void Init(LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNodeConfiguration* + selectedGraphConfiguration); + + void setInnerNode(InnerNodeOptionsFlags nodeInnerOptions); +}; + +class imageSubGraphTopology100000 : public GraphTopology { + public: + imageSubGraphTopology100000(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 9, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffBayerNoGmvNoTnrNoSapOuterNode* lbffBayerNoGmvNoTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[9]; +}; + +class StaticGraph100000 : public IStaticGraphConfig { + public: + StaticGraph100000(GraphConfiguration100000* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100000(); + static const uint32_t hashCode = 2914817427; // autogenerated + + private: + // Configuration + GraphConfiguration100000 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffBayerNoGmvNoTnrNoSapOuterNode _lbffBayerNoGmvNoTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100000 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[9]; +}; + +class imageSubGraphTopology100001 : public GraphTopology { + public: + imageSubGraphTopology100001(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 14, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffBayerWithGmvNoTnrNoSapOuterNode* lbffBayerWithGmvNoTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[14]; +}; + +class StaticGraph100001 : public IStaticGraphConfig { + public: + StaticGraph100001(GraphConfiguration100001* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100001(); + static const uint32_t hashCode = 2722821038; // autogenerated + + private: + // Configuration + GraphConfiguration100001 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffBayerWithGmvNoTnrNoSapOuterNode _lbffBayerWithGmvNoTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100001 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[14]; +}; + +class imageSubGraphTopology100002 : public GraphTopology { + public: + imageSubGraphTopology100002(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 12, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffBayerNoGmvWithTnrNoSapOuterNode* lbffBayerNoGmvWithTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[12]; +}; + +class StaticGraph100002 : public IStaticGraphConfig { + public: + StaticGraph100002(GraphConfiguration100002* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100002(); + static const uint32_t hashCode = 3480542691; // autogenerated + + private: + // Configuration + GraphConfiguration100002 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffBayerNoGmvWithTnrNoSapOuterNode _lbffBayerNoGmvWithTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100002 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[12]; +}; + +class imageSubGraphTopology100003 : public GraphTopology { + public: + imageSubGraphTopology100003(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 17, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffBayerWithGmvWithTnrNoSapOuterNode* lbffBayerWithGmvWithTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[17]; +}; + +class StaticGraph100003 : public IStaticGraphConfig { + public: + StaticGraph100003(GraphConfiguration100003* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100003(); + static const uint32_t hashCode = 552482330; // autogenerated + + private: + // Configuration + GraphConfiguration100003 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffBayerWithGmvWithTnrNoSapOuterNode _lbffBayerWithGmvWithTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100003 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[17]; +}; + +class imageSubGraphTopology100079 : public GraphTopology { + public: + imageSubGraphTopology100079(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 17, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffBayerNoGmvWithTnrNoSapOuterNode* lbffBayerNoGmvWithTnrNoSapOuterNode = nullptr; + SwNntmOuterNode* swNntmOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[17]; +}; + +class StaticGraph100079 : public IStaticGraphConfig { + public: + StaticGraph100079(GraphConfiguration100079* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100079(); + static const uint32_t hashCode = 4082826981; // autogenerated + + private: + // Configuration + GraphConfiguration100079 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffBayerNoGmvWithTnrNoSapOuterNode _lbffBayerNoGmvWithTnrNoSapOuterNode; + SwNntmOuterNode _swNntmOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100079 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[17]; +}; + +class imageSubGraphTopology100080 : public GraphTopology { + public: + imageSubGraphTopology100080(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 17, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffBayerNoGmvWithTnrNoSapOuterNode* lbffBayerNoGmvWithTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[17]; +}; + +class StaticGraph100080 : public IStaticGraphConfig { + public: + StaticGraph100080(GraphConfiguration100080* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100080(); + static const uint32_t hashCode = 4275052487; // autogenerated + + private: + // Configuration + GraphConfiguration100080 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffBayerNoGmvWithTnrNoSapOuterNode _lbffBayerNoGmvWithTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100080 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[17]; +}; + +class imageSubGraphTopology100081 : public GraphTopology { + public: + imageSubGraphTopology100081(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 19, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffBayerWithGmvWithTnrNoSapOuterNode* lbffBayerWithGmvWithTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[19]; +}; + +class StaticGraph100081 : public IStaticGraphConfig { + public: + StaticGraph100081(GraphConfiguration100081* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100081(); + static const uint32_t hashCode = 6885079; // autogenerated + + private: + // Configuration + GraphConfiguration100081 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffBayerWithGmvWithTnrNoSapOuterNode _lbffBayerWithGmvWithTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100081 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[19]; +}; + +class imageSubGraphTopology100004 : public GraphTopology { + public: + imageSubGraphTopology100004(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 12, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysPdaf2OuterNode* isysPdaf2OuterNode = nullptr; + LbffBayerPdaf2NoGmvNoTnrNoSapOuterNode* lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[12]; +}; + +class StaticGraph100004 : public IStaticGraphConfig { + public: + StaticGraph100004(GraphConfiguration100004* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100004(); + static const uint32_t hashCode = 678910205; // autogenerated + + private: + // Configuration + GraphConfiguration100004 _graphConfiguration; + + /* Outer Nodes */ + IsysPdaf2OuterNode _isysPdaf2OuterNode; + LbffBayerPdaf2NoGmvNoTnrNoSapOuterNode _lbffBayerPdaf2NoGmvNoTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100004 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[12]; +}; + +class imageSubGraphTopology100005 : public GraphTopology { + public: + imageSubGraphTopology100005(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 17, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysPdaf2OuterNode* isysPdaf2OuterNode = nullptr; + LbffBayerPdaf2WithGmvNoTnrNoSapOuterNode* lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[17]; +}; + +class StaticGraph100005 : public IStaticGraphConfig { + public: + StaticGraph100005(GraphConfiguration100005* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100005(); + static const uint32_t hashCode = 1129599756; // autogenerated + + private: + // Configuration + GraphConfiguration100005 _graphConfiguration; + + /* Outer Nodes */ + IsysPdaf2OuterNode _isysPdaf2OuterNode; + LbffBayerPdaf2WithGmvNoTnrNoSapOuterNode _lbffBayerPdaf2WithGmvNoTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100005 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[17]; +}; + +class imageSubGraphTopology100006 : public GraphTopology { + public: + imageSubGraphTopology100006(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 15, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysPdaf2OuterNode* isysPdaf2OuterNode = nullptr; + LbffBayerPdaf2NoGmvWithTnrNoSapOuterNode* lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[15]; +}; + +class StaticGraph100006 : public IStaticGraphConfig { + public: + StaticGraph100006(GraphConfiguration100006* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100006(); + static const uint32_t hashCode = 1649128389; // autogenerated + + private: + // Configuration + GraphConfiguration100006 _graphConfiguration; + + /* Outer Nodes */ + IsysPdaf2OuterNode _isysPdaf2OuterNode; + LbffBayerPdaf2NoGmvWithTnrNoSapOuterNode _lbffBayerPdaf2NoGmvWithTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100006 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[15]; +}; + +class imageSubGraphTopology100007 : public GraphTopology { + public: + imageSubGraphTopology100007(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 20, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysPdaf2OuterNode* isysPdaf2OuterNode = nullptr; + LbffBayerPdaf2WithGmvWithTnrNoSapOuterNode* lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode = + nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[20]; +}; + +class StaticGraph100007 : public IStaticGraphConfig { + public: + StaticGraph100007(GraphConfiguration100007* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100007(); + static const uint32_t hashCode = 3800731584; // autogenerated + + private: + // Configuration + GraphConfiguration100007 _graphConfiguration; + + /* Outer Nodes */ + IsysPdaf2OuterNode _isysPdaf2OuterNode; + LbffBayerPdaf2WithGmvWithTnrNoSapOuterNode _lbffBayerPdaf2WithGmvWithTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100007 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[20]; +}; + +class imageSubGraphTopology100008 : public GraphTopology { + public: + imageSubGraphTopology100008(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 10, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffBayerPdaf3NoGmvNoTnrNoSapOuterNode* lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[10]; +}; + +class StaticGraph100008 : public IStaticGraphConfig { + public: + StaticGraph100008(GraphConfiguration100008* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100008(); + static const uint32_t hashCode = 4109353079; // autogenerated + + private: + // Configuration + GraphConfiguration100008 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffBayerPdaf3NoGmvNoTnrNoSapOuterNode _lbffBayerPdaf3NoGmvNoTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100008 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[10]; +}; + +class imageSubGraphTopology100009 : public GraphTopology { + public: + imageSubGraphTopology100009(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 15, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffBayerPdaf3WithGmvNoTnrNoSapOuterNode* lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[15]; +}; + +class StaticGraph100009 : public IStaticGraphConfig { + public: + StaticGraph100009(GraphConfiguration100009* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100009(); + static const uint32_t hashCode = 3119139422; // autogenerated + + private: + // Configuration + GraphConfiguration100009 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffBayerPdaf3WithGmvNoTnrNoSapOuterNode _lbffBayerPdaf3WithGmvNoTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100009 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[15]; +}; + +class imageSubGraphTopology100010 : public GraphTopology { + public: + imageSubGraphTopology100010(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 13, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffBayerPdaf3NoGmvWithTnrNoSapOuterNode* lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[13]; +}; + +class StaticGraph100010 : public IStaticGraphConfig { + public: + StaticGraph100010(GraphConfiguration100010* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100010(); + static const uint32_t hashCode = 3783435687; // autogenerated + + private: + // Configuration + GraphConfiguration100010 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffBayerPdaf3NoGmvWithTnrNoSapOuterNode _lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100010 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[13]; +}; + +class imageSubGraphTopology100011 : public GraphTopology { + public: + imageSubGraphTopology100011(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 18, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffBayerPdaf3WithGmvWithTnrNoSapOuterNode* lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode = + nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[18]; +}; + +class StaticGraph100011 : public IStaticGraphConfig { + public: + StaticGraph100011(GraphConfiguration100011* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100011(); + static const uint32_t hashCode = 3398140634; // autogenerated + + private: + // Configuration + GraphConfiguration100011 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffBayerPdaf3WithGmvWithTnrNoSapOuterNode _lbffBayerPdaf3WithGmvWithTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100011 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[18]; +}; + +class imageSubGraphTopology100045 : public GraphTopology { + public: + imageSubGraphTopology100045(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 18, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffBayerPdaf3NoGmvWithTnrNoSapOuterNode* lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode = nullptr; + SwNntmOuterNode* swNntmOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[18]; +}; + +class StaticGraph100045 : public IStaticGraphConfig { + public: + StaticGraph100045(GraphConfiguration100045* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100045(); + static const uint32_t hashCode = 176907841; // autogenerated + + private: + // Configuration + GraphConfiguration100045 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffBayerPdaf3NoGmvWithTnrNoSapOuterNode _lbffBayerPdaf3NoGmvWithTnrNoSapOuterNode; + SwNntmOuterNode _swNntmOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100045 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[18]; +}; + +class imageSubGraphTopology100012 : public GraphTopology { + public: + imageSubGraphTopology100012(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 17, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysDolOuterNode* isysDolOuterNode = nullptr; + LbffDol2InputsNoGmvNoTnrNoSapOuterNode* lbffDol2InputsNoGmvNoTnrNoSapOuterNode = nullptr; + SwNntmOuterNode* swNntmOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[17]; +}; + +class StaticGraph100012 : public IStaticGraphConfig { + public: + StaticGraph100012(GraphConfiguration100012* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100012(); + static const uint32_t hashCode = 144014565; // autogenerated + + private: + // Configuration + GraphConfiguration100012 _graphConfiguration; + + /* Outer Nodes */ + IsysDolOuterNode _isysDolOuterNode; + LbffDol2InputsNoGmvNoTnrNoSapOuterNode _lbffDol2InputsNoGmvNoTnrNoSapOuterNode; + SwNntmOuterNode _swNntmOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100012 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[17]; +}; + +class imageSubGraphTopology100013 : public GraphTopology { + public: + imageSubGraphTopology100013(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 17, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysDolOuterNode* isysDolOuterNode = nullptr; + LbffDol2InputsWithGmvNoTnrNoSapOuterNode* lbffDol2InputsWithGmvNoTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[17]; +}; + +class StaticGraph100013 : public IStaticGraphConfig { + public: + StaticGraph100013(GraphConfiguration100013* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100013(); + static const uint32_t hashCode = 1202051034; // autogenerated + + private: + // Configuration + GraphConfiguration100013 _graphConfiguration; + + /* Outer Nodes */ + IsysDolOuterNode _isysDolOuterNode; + LbffDol2InputsWithGmvNoTnrNoSapOuterNode _lbffDol2InputsWithGmvNoTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100013 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[17]; +}; + +class imageSubGraphTopology100014 : public GraphTopology { + public: + imageSubGraphTopology100014(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 20, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysDolOuterNode* isysDolOuterNode = nullptr; + LbffDol2InputsNoGmvWithTnrNoSapOuterNode* lbffDol2InputsNoGmvWithTnrNoSapOuterNode = nullptr; + SwNntmOuterNode* swNntmOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[20]; +}; + +class StaticGraph100014 : public IStaticGraphConfig { + public: + StaticGraph100014(GraphConfiguration100014* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100014(); + static const uint32_t hashCode = 3377348061; // autogenerated + + private: + // Configuration + GraphConfiguration100014 _graphConfiguration; + + /* Outer Nodes */ + IsysDolOuterNode _isysDolOuterNode; + LbffDol2InputsNoGmvWithTnrNoSapOuterNode _lbffDol2InputsNoGmvWithTnrNoSapOuterNode; + SwNntmOuterNode _swNntmOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100014 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[20]; +}; + +class imageSubGraphTopology100015 : public GraphTopology { + public: + imageSubGraphTopology100015(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 20, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysDolOuterNode* isysDolOuterNode = nullptr; + LbffDol2InputsWithGmvWithTnrNoSapOuterNode* lbffDol2InputsWithGmvWithTnrNoSapOuterNode = + nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[20]; +}; + +class StaticGraph100015 : public IStaticGraphConfig { + public: + StaticGraph100015(GraphConfiguration100015* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100015(); + static const uint32_t hashCode = 2846893190; // autogenerated + + private: + // Configuration + GraphConfiguration100015 _graphConfiguration; + + /* Outer Nodes */ + IsysDolOuterNode _isysDolOuterNode; + LbffDol2InputsWithGmvWithTnrNoSapOuterNode _lbffDol2InputsWithGmvWithTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100015 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[20]; +}; + +class imageSubGraphTopology100016 : public GraphTopology { + public: + imageSubGraphTopology100016(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 19, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysDolOuterNode* isysDolOuterNode = nullptr; + LbffDolSmoothOuterNode* lbffDolSmoothOuterNode = nullptr; + LbffDol3InputsNoGmvNoTnrNoSapOuterNode* lbffDol3InputsNoGmvNoTnrNoSapOuterNode = nullptr; + SwNntmOuterNode* swNntmOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[19]; +}; + +class StaticGraph100016 : public IStaticGraphConfig { + public: + StaticGraph100016(GraphConfiguration100016* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100016(); + static const uint32_t hashCode = 2137187788; // autogenerated + + private: + // Configuration + GraphConfiguration100016 _graphConfiguration; + + /* Outer Nodes */ + IsysDolOuterNode _isysDolOuterNode; + LbffDolSmoothOuterNode _lbffDolSmoothOuterNode; + LbffDol3InputsNoGmvNoTnrNoSapOuterNode _lbffDol3InputsNoGmvNoTnrNoSapOuterNode; + SwNntmOuterNode _swNntmOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100016 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[19]; +}; + +class imageSubGraphTopology100017 : public GraphTopology { + public: + imageSubGraphTopology100017(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 19, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysDolOuterNode* isysDolOuterNode = nullptr; + LbffDolSmoothOuterNode* lbffDolSmoothOuterNode = nullptr; + LbffDol3InputsWithGmvNoTnrNoSapOuterNode* lbffDol3InputsWithGmvNoTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[19]; +}; + +class StaticGraph100017 : public IStaticGraphConfig { + public: + StaticGraph100017(GraphConfiguration100017* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100017(); + static const uint32_t hashCode = 3238724207; // autogenerated + + private: + // Configuration + GraphConfiguration100017 _graphConfiguration; + + /* Outer Nodes */ + IsysDolOuterNode _isysDolOuterNode; + LbffDolSmoothOuterNode _lbffDolSmoothOuterNode; + LbffDol3InputsWithGmvNoTnrNoSapOuterNode _lbffDol3InputsWithGmvNoTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100017 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[19]; +}; + +class imageSubGraphTopology100018 : public GraphTopology { + public: + imageSubGraphTopology100018(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 22, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysDolOuterNode* isysDolOuterNode = nullptr; + LbffDolSmoothOuterNode* lbffDolSmoothOuterNode = nullptr; + LbffDol3InputsNoGmvWithTnrNoSapOuterNode* lbffDol3InputsNoGmvWithTnrNoSapOuterNode = nullptr; + SwNntmOuterNode* swNntmOuterNode = nullptr; + SwScalerOuterNode* swScalerOuterNode = nullptr; + GraphLink* subGraphLinks[22]; +}; + +class StaticGraph100018 : public IStaticGraphConfig { + public: + StaticGraph100018(GraphConfiguration100018* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100018(); + static const uint32_t hashCode = 3471629776; // autogenerated + + private: + // Configuration + GraphConfiguration100018 _graphConfiguration; + + /* Outer Nodes */ + IsysDolOuterNode _isysDolOuterNode; + LbffDolSmoothOuterNode _lbffDolSmoothOuterNode; + LbffDol3InputsNoGmvWithTnrNoSapOuterNode _lbffDol3InputsNoGmvWithTnrNoSapOuterNode; + SwNntmOuterNode _swNntmOuterNode; + SwScalerOuterNode _swScalerOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100018 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[22]; +}; + +class imageSubGraphTopology100019 : public GraphTopology { + public: + imageSubGraphTopology100019(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 22, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysDolOuterNode* isysDolOuterNode = nullptr; + LbffDolSmoothOuterNode* lbffDolSmoothOuterNode = nullptr; + LbffDol3InputsWithGmvWithTnrNoSapOuterNode* lbffDol3InputsWithGmvWithTnrNoSapOuterNode = + nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[22]; +}; + +class StaticGraph100019 : public IStaticGraphConfig { + public: + StaticGraph100019(GraphConfiguration100019* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100019(); + static const uint32_t hashCode = 349008703; // autogenerated + + private: + // Configuration + GraphConfiguration100019 _graphConfiguration; + + /* Outer Nodes */ + IsysDolOuterNode _isysDolOuterNode; + LbffDolSmoothOuterNode _lbffDolSmoothOuterNode; + LbffDol3InputsWithGmvWithTnrNoSapOuterNode _lbffDol3InputsWithGmvWithTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100019 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[22]; +}; + +class imageSubGraphTopology100020 : public GraphTopology { + public: + imageSubGraphTopology100020(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 10, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffRgbIrNoGmvNoTnrNoSapOuterNode* lbffRgbIrNoGmvNoTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[10]; +}; + +class irSubGraphTopology100020 : public GraphTopology { + public: + irSubGraphTopology100020(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 17, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffRgbIrNoGmvNoTnrNoSapOuterNode* lbffRgbIrNoGmvNoTnrNoSapOuterNode = nullptr; + LbffRgbIrIrNoGmvNoTnrNoSapOuterNode* lbffRgbIrIrNoGmvNoTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[17]; +}; + +class image_irSubGraphTopology100020 : public GraphTopology { + public: + image_irSubGraphTopology100020(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 17, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffRgbIrNoGmvNoTnrNoSapOuterNode* lbffRgbIrNoGmvNoTnrNoSapOuterNode = nullptr; + LbffRgbIrIrNoGmvNoTnrNoSapOuterNode* lbffRgbIrIrNoGmvNoTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[17]; +}; + +class StaticGraph100020 : public IStaticGraphConfig { + public: + StaticGraph100020(GraphConfiguration100020* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100020(); + static const uint32_t hashCode = 3438564774; // autogenerated + + private: + // Configuration + GraphConfiguration100020 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffRgbIrNoGmvNoTnrNoSapOuterNode _lbffRgbIrNoGmvNoTnrNoSapOuterNode; + LbffRgbIrIrNoGmvNoTnrNoSapOuterNode _lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100020 _imageSubGraph; + irSubGraphTopology100020 _irSubGraph; + image_irSubGraphTopology100020 _image_irSubGraph; + + // All graph links + GraphLink _graphLinks[17]; +}; + +class imageSubGraphTopology100021 : public GraphTopology { + public: + imageSubGraphTopology100021(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 15, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffRgbIrWithGmvNoTnrNoSapOuterNode* lbffRgbIrWithGmvNoTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[15]; +}; + +class irSubGraphTopology100021 : public GraphTopology { + public: + irSubGraphTopology100021(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 19, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffRgbIrWithGmvNoTnrNoSapOuterNode* lbffRgbIrWithGmvNoTnrNoSapOuterNode = nullptr; + LbffRgbIrIrNoGmvNoTnrNoSapOuterNode* lbffRgbIrIrNoGmvNoTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[19]; +}; + +class image_irSubGraphTopology100021 : public GraphTopology { + public: + image_irSubGraphTopology100021(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 22, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffRgbIrWithGmvNoTnrNoSapOuterNode* lbffRgbIrWithGmvNoTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + LbffRgbIrIrNoGmvNoTnrNoSapOuterNode* lbffRgbIrIrNoGmvNoTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[22]; +}; + +class StaticGraph100021 : public IStaticGraphConfig { + public: + StaticGraph100021(GraphConfiguration100021* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100021(); + static const uint32_t hashCode = 4276022635; // autogenerated + + private: + // Configuration + GraphConfiguration100021 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffRgbIrWithGmvNoTnrNoSapOuterNode _lbffRgbIrWithGmvNoTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + LbffRgbIrIrNoGmvNoTnrNoSapOuterNode _lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100021 _imageSubGraph; + irSubGraphTopology100021 _irSubGraph; + image_irSubGraphTopology100021 _image_irSubGraph; + + // All graph links + GraphLink _graphLinks[22]; +}; + +class imageSubGraphTopology100022 : public GraphTopology { + public: + imageSubGraphTopology100022(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 13, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffRgbIrNoGmvWithTnrNoSapOuterNode* lbffRgbIrNoGmvWithTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[13]; +}; + +class irSubGraphTopology100022 : public GraphTopology { + public: + irSubGraphTopology100022(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 23, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffRgbIrNoGmvWithTnrNoSapOuterNode* lbffRgbIrNoGmvWithTnrNoSapOuterNode = nullptr; + LbffRgbIrIrNoGmvWithTnrNoSapOuterNode* lbffRgbIrIrNoGmvWithTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[23]; +}; + +class image_irSubGraphTopology100022 : public GraphTopology { + public: + image_irSubGraphTopology100022(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 23, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffRgbIrNoGmvWithTnrNoSapOuterNode* lbffRgbIrNoGmvWithTnrNoSapOuterNode = nullptr; + LbffRgbIrIrNoGmvWithTnrNoSapOuterNode* lbffRgbIrIrNoGmvWithTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[23]; +}; + +class StaticGraph100022 : public IStaticGraphConfig { + public: + StaticGraph100022(GraphConfiguration100022* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100022(); + static const uint32_t hashCode = 2177181214; // autogenerated + + private: + // Configuration + GraphConfiguration100022 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffRgbIrNoGmvWithTnrNoSapOuterNode _lbffRgbIrNoGmvWithTnrNoSapOuterNode; + LbffRgbIrIrNoGmvWithTnrNoSapOuterNode _lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100022 _imageSubGraph; + irSubGraphTopology100022 _irSubGraph; + image_irSubGraphTopology100022 _image_irSubGraph; + + // All graph links + GraphLink _graphLinks[23]; +}; + +class imageSubGraphTopology100023 : public GraphTopology { + public: + imageSubGraphTopology100023(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 18, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffRgbIrWithGmvWithTnrNoSapOuterNode* lbffRgbIrWithGmvWithTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[18]; +}; + +class irSubGraphTopology100023 : public GraphTopology { + public: + irSubGraphTopology100023(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 25, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffRgbIrWithGmvWithTnrNoSapOuterNode* lbffRgbIrWithGmvWithTnrNoSapOuterNode = nullptr; + LbffRgbIrIrNoGmvWithTnrNoSapOuterNode* lbffRgbIrIrNoGmvWithTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[25]; +}; + +class image_irSubGraphTopology100023 : public GraphTopology { + public: + image_irSubGraphTopology100023(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 28, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffRgbIrWithGmvWithTnrNoSapOuterNode* lbffRgbIrWithGmvWithTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + LbffRgbIrIrNoGmvWithTnrNoSapOuterNode* lbffRgbIrIrNoGmvWithTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[28]; +}; + +class StaticGraph100023 : public IStaticGraphConfig { + public: + StaticGraph100023(GraphConfiguration100023* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100023(); + static const uint32_t hashCode = 4112854315; // autogenerated + + private: + // Configuration + GraphConfiguration100023 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffRgbIrWithGmvWithTnrNoSapOuterNode _lbffRgbIrWithGmvWithTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + LbffRgbIrIrNoGmvWithTnrNoSapOuterNode _lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100023 _imageSubGraph; + irSubGraphTopology100023 _irSubGraph; + image_irSubGraphTopology100023 _image_irSubGraph; + + // All graph links + GraphLink _graphLinks[28]; +}; + +class imageSubGraphTopology100024 : public GraphTopology { + public: + imageSubGraphTopology100024(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 8, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + LbffBayerNoGmvNoTnrNoSapOuterNode* lbffBayerNoGmvNoTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[8]; +}; + +class StaticGraph100024 : public IStaticGraphConfig { + public: + StaticGraph100024(GraphConfiguration100024* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100024(); + static const uint32_t hashCode = 844284306; // autogenerated + + private: + // Configuration + GraphConfiguration100024 _graphConfiguration; + + /* Outer Nodes */ + LbffBayerNoGmvNoTnrNoSapOuterNode _lbffBayerNoGmvNoTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100024 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[8]; +}; + +class imageSubGraphTopology100040 : public GraphTopology { + public: + imageSubGraphTopology100040(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 13, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + LbffBayerWithGmvNoTnrNoSapOuterNode* lbffBayerWithGmvNoTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[13]; +}; + +class StaticGraph100040 : public IStaticGraphConfig { + public: + StaticGraph100040(GraphConfiguration100040* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100040(); + static const uint32_t hashCode = 874730067; // autogenerated + + private: + // Configuration + GraphConfiguration100040 _graphConfiguration; + + /* Outer Nodes */ + LbffBayerWithGmvNoTnrNoSapOuterNode _lbffBayerWithGmvNoTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100040 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[13]; +}; + +class imageSubGraphTopology100041 : public GraphTopology { + public: + imageSubGraphTopology100041(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 16, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + LbffBayerWithGmvWithTnrNoSapOuterNode* lbffBayerWithGmvWithTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[16]; +}; + +class StaticGraph100041 : public IStaticGraphConfig { + public: + StaticGraph100041(GraphConfiguration100041* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100041(); + static const uint32_t hashCode = 2147300611; // autogenerated + + private: + // Configuration + GraphConfiguration100041 _graphConfiguration; + + /* Outer Nodes */ + LbffBayerWithGmvWithTnrNoSapOuterNode _lbffBayerWithGmvWithTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100041 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[16]; +}; + +class imageSubGraphTopology100042 : public GraphTopology { + public: + imageSubGraphTopology100042(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 11, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + LbffBayerNoGmvWithTnrNoSapOuterNode* lbffBayerNoGmvWithTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[11]; +}; + +class StaticGraph100042 : public IStaticGraphConfig { + public: + StaticGraph100042(GraphConfiguration100042* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100042(); + static const uint32_t hashCode = 3491144622; // autogenerated + + private: + // Configuration + GraphConfiguration100042 _graphConfiguration; + + /* Outer Nodes */ + LbffBayerNoGmvWithTnrNoSapOuterNode _lbffBayerNoGmvWithTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100042 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[11]; +}; + +class imageSubGraphTopology100027 : public GraphTopology { + public: + imageSubGraphTopology100027(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 9, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffIrNoGmvNoTnrNoSapOuterNode* lbffIrNoGmvNoTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[9]; +}; + +class StaticGraph100027 : public IStaticGraphConfig { + public: + StaticGraph100027(GraphConfiguration100027* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100027(); + static const uint32_t hashCode = 189755735; // autogenerated + + private: + // Configuration + GraphConfiguration100027 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffIrNoGmvNoTnrNoSapOuterNode _lbffIrNoGmvNoTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100027 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[9]; +}; + +class imageSubGraphTopology100028 : public GraphTopology { + public: + imageSubGraphTopology100028(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 14, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffIrWithGmvNoTnrNoSapOuterNode* lbffIrWithGmvNoTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[14]; +}; + +class StaticGraph100028 : public IStaticGraphConfig { + public: + StaticGraph100028(GraphConfiguration100028* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100028(); + static const uint32_t hashCode = 616830362; // autogenerated + + private: + // Configuration + GraphConfiguration100028 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffIrWithGmvNoTnrNoSapOuterNode _lbffIrWithGmvNoTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100028 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[14]; +}; + +class imageSubGraphTopology100029 : public GraphTopology { + public: + imageSubGraphTopology100029(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 12, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffIrNoGmvWithTnrNoSapOuterNode* lbffIrNoGmvWithTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[12]; +}; + +class StaticGraph100029 : public IStaticGraphConfig { + public: + StaticGraph100029(GraphConfiguration100029* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100029(); + static const uint32_t hashCode = 3970859463; // autogenerated + + private: + // Configuration + GraphConfiguration100029 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffIrNoGmvWithTnrNoSapOuterNode _lbffIrNoGmvWithTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100029 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[12]; +}; + +class imageSubGraphTopology100030 : public GraphTopology { + public: + imageSubGraphTopology100030(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 17, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffIrWithGmvWithTnrNoSapOuterNode* lbffIrWithGmvWithTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[17]; +}; + +class StaticGraph100030 : public IStaticGraphConfig { + public: + StaticGraph100030(GraphConfiguration100030* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100030(); + static const uint32_t hashCode = 3349357766; // autogenerated + + private: + // Configuration + GraphConfiguration100030 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffIrWithGmvWithTnrNoSapOuterNode _lbffIrWithGmvWithTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100030 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[17]; +}; + +class imageSubGraphTopology100031 : public GraphTopology { + public: + imageSubGraphTopology100031(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 11, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode* lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode = + nullptr; + GraphLink* subGraphLinks[11]; +}; + +class StaticGraph100031 : public IStaticGraphConfig { + public: + StaticGraph100031(GraphConfiguration100031* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100031(); + static const uint32_t hashCode = 2685553439; // autogenerated + + private: + // Configuration + GraphConfiguration100031 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode _lbffBayerPdaf3asPdaf2NoGmvNoTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100031 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[11]; +}; + +class imageSubGraphTopology100032 : public GraphTopology { + public: + imageSubGraphTopology100032(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 16, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode* + lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[16]; +}; + +class StaticGraph100032 : public IStaticGraphConfig { + public: + StaticGraph100032(GraphConfiguration100032* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100032(); + static const uint32_t hashCode = 637249946; // autogenerated + + private: + // Configuration + GraphConfiguration100032 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode + _lbffBayerPdaf3asPdaf2WithGmvNoTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100032 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[16]; +}; + +class imageSubGraphTopology100033 : public GraphTopology { + public: + imageSubGraphTopology100033(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 14, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode* + lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[14]; +}; + +class StaticGraph100033 : public IStaticGraphConfig { + public: + StaticGraph100033(GraphConfiguration100033* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100033(); + static const uint32_t hashCode = 3946150383; // autogenerated + + private: + // Configuration + GraphConfiguration100033 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode + _lbffBayerPdaf3asPdaf2NoGmvWithTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100033 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[14]; +}; + +class imageSubGraphTopology100034 : public GraphTopology { + public: + imageSubGraphTopology100034(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 19, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysOuterNode* isysOuterNode = nullptr; + LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode* + lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[19]; +}; + +class StaticGraph100034 : public IStaticGraphConfig { + public: + StaticGraph100034(GraphConfiguration100034* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100034(); + static const uint32_t hashCode = 4100007686; // autogenerated + + private: + // Configuration + GraphConfiguration100034 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode + _lbffBayerPdaf3asPdaf2WithGmvWithTnrNoSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100034 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[19]; +}; + +class imageSubGraphTopology100100 : public GraphTopology { + public: + imageSubGraphTopology100100(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 15, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerNoGmvNoTnrWithSapOuterNode* lbffBayerNoGmvNoTnrWithSapOuterNode = nullptr; + GraphLink* subGraphLinks[15]; + + private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100100 : public IStaticGraphConfig { + public: + StaticGraph100100(GraphConfiguration100100* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100100(); + static const uint32_t hashCode = 3814212434; // autogenerated + + private: + // Configuration + GraphConfiguration100100 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffBayerNoGmvNoTnrWithSapOuterNode _lbffBayerNoGmvNoTnrWithSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100100 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[15]; +}; + +class imageSubGraphTopology100101 : public GraphTopology { + public: + imageSubGraphTopology100101(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 20, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerWithGmvNoTnrWithSapOuterNode* lbffBayerWithGmvNoTnrWithSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[20]; + + private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100101 : public IStaticGraphConfig { + public: + StaticGraph100101(GraphConfiguration100101* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100101(); + static const uint32_t hashCode = 3190898911; // autogenerated + + private: + // Configuration + GraphConfiguration100101 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffBayerWithGmvNoTnrWithSapOuterNode _lbffBayerWithGmvNoTnrWithSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100101 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[20]; +}; + +class imageSubGraphTopology100102 : public GraphTopology { + public: + imageSubGraphTopology100102(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 20, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerNoGmvWithTnrWithSapOuterNode* lbffBayerNoGmvWithTnrWithSapOuterNode = nullptr; + GraphLink* subGraphLinks[20]; + + private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100102 : public IStaticGraphConfig { + public: + StaticGraph100102(GraphConfiguration100102* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100102(); + static const uint32_t hashCode = 3712859908; // autogenerated + + private: + // Configuration + GraphConfiguration100102 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffBayerNoGmvWithTnrWithSapOuterNode _lbffBayerNoGmvWithTnrWithSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100102 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[20]; +}; + +class imageSubGraphTopology100103 : public GraphTopology { + public: + imageSubGraphTopology100103(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 25, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerWithGmvWithTnrWithSapOuterNode* lbffBayerWithGmvWithTnrWithSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[25]; + + private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100103 : public IStaticGraphConfig { + public: + StaticGraph100103(GraphConfiguration100103* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100103(); + static const uint32_t hashCode = 619377997; // autogenerated + + private: + // Configuration + GraphConfiguration100103 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffBayerWithGmvWithTnrWithSapOuterNode _lbffBayerWithGmvWithTnrWithSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100103 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[25]; +}; + +class imageSubGraphTopology100104 : public GraphTopology { + public: + imageSubGraphTopology100104(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 18, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysPdaf2WithCvOuterNode* isysPdaf2WithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerPdaf2NoGmvNoTnrWithSapOuterNode* lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode = nullptr; + GraphLink* subGraphLinks[18]; + + private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100104 : public IStaticGraphConfig { + public: + StaticGraph100104(GraphConfiguration100104* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100104(); + static const uint32_t hashCode = 2770355904; // autogenerated + + private: + // Configuration + GraphConfiguration100104 _graphConfiguration; + + /* Outer Nodes */ + IsysPdaf2WithCvOuterNode _isysPdaf2WithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffBayerPdaf2NoGmvNoTnrWithSapOuterNode _lbffBayerPdaf2NoGmvNoTnrWithSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100104 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[18]; +}; + +class imageSubGraphTopology100105 : public GraphTopology { + public: + imageSubGraphTopology100105(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 23, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysPdaf2WithCvOuterNode* isysPdaf2WithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerPdaf2WithGmvNoTnrWithSapOuterNode* lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode = + nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[23]; + + private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100105 : public IStaticGraphConfig { + public: + StaticGraph100105(GraphConfiguration100105* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100105(); + static const uint32_t hashCode = 1951006425; // autogenerated + + private: + // Configuration + GraphConfiguration100105 _graphConfiguration; + + /* Outer Nodes */ + IsysPdaf2WithCvOuterNode _isysPdaf2WithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffBayerPdaf2WithGmvNoTnrWithSapOuterNode _lbffBayerPdaf2WithGmvNoTnrWithSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100105 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[23]; +}; + +class imageSubGraphTopology100106 : public GraphTopology { + public: + imageSubGraphTopology100106(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 23, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysPdaf2WithCvOuterNode* isysPdaf2WithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerPdaf2NoGmvWithTnrWithSapOuterNode* lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode = + nullptr; + GraphLink* subGraphLinks[23]; + + private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100106 : public IStaticGraphConfig { + public: + StaticGraph100106(GraphConfiguration100106* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100106(); + static const uint32_t hashCode = 290732550; // autogenerated + + private: + // Configuration + GraphConfiguration100106 _graphConfiguration; + + /* Outer Nodes */ + IsysPdaf2WithCvOuterNode _isysPdaf2WithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffBayerPdaf2NoGmvWithTnrWithSapOuterNode _lbffBayerPdaf2NoGmvWithTnrWithSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100106 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[23]; +}; + +class imageSubGraphTopology100107 : public GraphTopology { + public: + imageSubGraphTopology100107(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 28, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysPdaf2WithCvOuterNode* isysPdaf2WithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerPdaf2WithGmvWithTnrWithSapOuterNode* lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode = + nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[28]; + + private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100107 : public IStaticGraphConfig { + public: + StaticGraph100107(GraphConfiguration100107* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100107(); + static const uint32_t hashCode = 1727023371; // autogenerated + + private: + // Configuration + GraphConfiguration100107 _graphConfiguration; + + /* Outer Nodes */ + IsysPdaf2WithCvOuterNode _isysPdaf2WithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffBayerPdaf2WithGmvWithTnrWithSapOuterNode _lbffBayerPdaf2WithGmvWithTnrWithSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100107 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[28]; +}; + +class imageSubGraphTopology100108 : public GraphTopology { + public: + imageSubGraphTopology100108(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 16, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerPdaf3NoGmvNoTnrWithSapOuterNode* lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode = nullptr; + GraphLink* subGraphLinks[16]; + + private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100108 : public IStaticGraphConfig { + public: + StaticGraph100108(GraphConfiguration100108* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100108(); + static const uint32_t hashCode = 173440394; // autogenerated + + private: + // Configuration + GraphConfiguration100108 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + LbffBayerPdaf3NoGmvNoTnrWithSapOuterNode _lbffBayerPdaf3NoGmvNoTnrWithSapOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100108 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[16]; +}; + +class imageSubGraphTopology100109 : public GraphTopology { + public: + imageSubGraphTopology100109(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 21, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerPdaf3WithGmvNoTnrWithSapOuterNode* lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode = + nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[21]; + + private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100109 : public IStaticGraphConfig { + public: + StaticGraph100109(GraphConfiguration100109* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100109(); + static const uint32_t hashCode = 1543340907; // autogenerated + + private: + // Configuration + GraphConfiguration100109 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + LbffBayerPdaf3WithGmvNoTnrWithSapOuterNode _lbffBayerPdaf3WithGmvNoTnrWithSapOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100109 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[21]; +}; + +class imageSubGraphTopology100110 : public GraphTopology { + public: + imageSubGraphTopology100110(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 21, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerPdaf3NoGmvWithTnrWithSapOuterNode* lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode = + nullptr; + GraphLink* subGraphLinks[21]; + + private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100110 : public IStaticGraphConfig { + public: + StaticGraph100110(GraphConfiguration100110* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100110(); + static const uint32_t hashCode = 3102705644; // autogenerated + + private: + // Configuration + GraphConfiguration100110 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + LbffBayerPdaf3NoGmvWithTnrWithSapOuterNode _lbffBayerPdaf3NoGmvWithTnrWithSapOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100110 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[21]; +}; + +class imageSubGraphTopology100111 : public GraphTopology { + public: + imageSubGraphTopology100111(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 26, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerPdaf3WithGmvWithTnrWithSapOuterNode* lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode = + nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[26]; + + private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100111 : public IStaticGraphConfig { + public: + StaticGraph100111(GraphConfiguration100111* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100111(); + static const uint32_t hashCode = 66338681; // autogenerated + + private: + // Configuration + GraphConfiguration100111 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + LbffBayerPdaf3WithGmvWithTnrWithSapOuterNode _lbffBayerPdaf3WithGmvWithTnrWithSapOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100111 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[26]; +}; + +class imageSubGraphTopology100112 : public GraphTopology { + public: + imageSubGraphTopology100112(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 19, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysDolWithCvOuterNode* isysDolWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffDol2InputsNoGmvNoTnrWithSapOuterNode* lbffDol2InputsNoGmvNoTnrWithSapOuterNode = nullptr; + GraphLink* subGraphLinks[19]; + + private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100112 : public IStaticGraphConfig { + public: + StaticGraph100112(GraphConfiguration100112* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100112(); + static const uint32_t hashCode = 1108287162; // autogenerated + + private: + // Configuration + GraphConfiguration100112 _graphConfiguration; + + /* Outer Nodes */ + IsysDolWithCvOuterNode _isysDolWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffDol2InputsNoGmvNoTnrWithSapOuterNode _lbffDol2InputsNoGmvNoTnrWithSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100112 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[19]; +}; + +class imageSubGraphTopology100113 : public GraphTopology { + public: + imageSubGraphTopology100113(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 24, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysDolWithCvOuterNode* isysDolWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffDol2InputsWithGmvNoTnrWithSapOuterNode* lbffDol2InputsWithGmvNoTnrWithSapOuterNode = + nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[24]; + + private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100113 : public IStaticGraphConfig { + public: + StaticGraph100113(GraphConfiguration100113* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100113(); + static const uint32_t hashCode = 1560693719; // autogenerated + + private: + // Configuration + GraphConfiguration100113 _graphConfiguration; + + /* Outer Nodes */ + IsysDolWithCvOuterNode _isysDolWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffDol2InputsWithGmvNoTnrWithSapOuterNode _lbffDol2InputsWithGmvNoTnrWithSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100113 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[24]; +}; + +class imageSubGraphTopology100114 : public GraphTopology { + public: + imageSubGraphTopology100114(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 24, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysDolWithCvOuterNode* isysDolWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffDol2InputsNoGmvWithTnrWithSapOuterNode* lbffDol2InputsNoGmvWithTnrWithSapOuterNode = + nullptr; + GraphLink* subGraphLinks[24]; + + private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100114 : public IStaticGraphConfig { + public: + StaticGraph100114(GraphConfiguration100114* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100114(); + static const uint32_t hashCode = 62382684; // autogenerated + + private: + // Configuration + GraphConfiguration100114 _graphConfiguration; + + /* Outer Nodes */ + IsysDolWithCvOuterNode _isysDolWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffDol2InputsNoGmvWithTnrWithSapOuterNode _lbffDol2InputsNoGmvWithTnrWithSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100114 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[24]; +}; + +class imageSubGraphTopology100115 : public GraphTopology { + public: + imageSubGraphTopology100115(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 29, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysDolWithCvOuterNode* isysDolWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffDol2InputsWithGmvWithTnrWithSapOuterNode* lbffDol2InputsWithGmvWithTnrWithSapOuterNode = + nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[29]; + + private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100115 : public IStaticGraphConfig { + public: + StaticGraph100115(GraphConfiguration100115* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100115(); + static const uint32_t hashCode = 2994847221; // autogenerated + + private: + // Configuration + GraphConfiguration100115 _graphConfiguration; + + /* Outer Nodes */ + IsysDolWithCvOuterNode _isysDolWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffDol2InputsWithGmvWithTnrWithSapOuterNode _lbffDol2InputsWithGmvWithTnrWithSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100115 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[29]; +}; + +class imageSubGraphTopology100116 : public GraphTopology { + public: + imageSubGraphTopology100116(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 21, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysDolWithCvOuterNode* isysDolWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffDolSmoothOuterNode* lbffDolSmoothOuterNode = nullptr; + LbffDol3InputsNoGmvNoTnrWithSapOuterNode* lbffDol3InputsNoGmvNoTnrWithSapOuterNode = nullptr; + GraphLink* subGraphLinks[21]; + + private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100116 : public IStaticGraphConfig { + public: + StaticGraph100116(GraphConfiguration100116* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100116(); + static const uint32_t hashCode = 141943583; // autogenerated + + private: + // Configuration + GraphConfiguration100116 _graphConfiguration; + + /* Outer Nodes */ + IsysDolWithCvOuterNode _isysDolWithCvOuterNode; + LbffDolSmoothOuterNode _lbffDolSmoothOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffDol3InputsNoGmvNoTnrWithSapOuterNode _lbffDol3InputsNoGmvNoTnrWithSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100116 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[21]; +}; + +class imageSubGraphTopology100117 : public GraphTopology { + public: + imageSubGraphTopology100117(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 26, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysDolWithCvOuterNode* isysDolWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffDolSmoothOuterNode* lbffDolSmoothOuterNode = nullptr; + LbffDol3InputsWithGmvNoTnrWithSapOuterNode* lbffDol3InputsWithGmvNoTnrWithSapOuterNode = + nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[26]; + + private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100117 : public IStaticGraphConfig { + public: + StaticGraph100117(GraphConfiguration100117* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100117(); + static const uint32_t hashCode = 235579058; // autogenerated + + private: + // Configuration + GraphConfiguration100117 _graphConfiguration; + + /* Outer Nodes */ + IsysDolWithCvOuterNode _isysDolWithCvOuterNode; + LbffDolSmoothOuterNode _lbffDolSmoothOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffDol3InputsWithGmvNoTnrWithSapOuterNode _lbffDol3InputsWithGmvNoTnrWithSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100117 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[26]; +}; + +class imageSubGraphTopology100118 : public GraphTopology { + public: + imageSubGraphTopology100118(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 26, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysDolWithCvOuterNode* isysDolWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffDolSmoothOuterNode* lbffDolSmoothOuterNode = nullptr; + LbffDol3InputsNoGmvWithTnrWithSapOuterNode* lbffDol3InputsNoGmvWithTnrWithSapOuterNode = + nullptr; + GraphLink* subGraphLinks[26]; + + private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100118 : public IStaticGraphConfig { + public: + StaticGraph100118(GraphConfiguration100118* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100118(); + static const uint32_t hashCode = 3835533685; // autogenerated + + private: + // Configuration + GraphConfiguration100118 _graphConfiguration; + + /* Outer Nodes */ + IsysDolWithCvOuterNode _isysDolWithCvOuterNode; + LbffDolSmoothOuterNode _lbffDolSmoothOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffDol3InputsNoGmvWithTnrWithSapOuterNode _lbffDol3InputsNoGmvWithTnrWithSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100118 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[26]; +}; + +class imageSubGraphTopology100119 : public GraphTopology { + public: + imageSubGraphTopology100119(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 31, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysDolWithCvOuterNode* isysDolWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffDolSmoothOuterNode* lbffDolSmoothOuterNode = nullptr; + LbffDol3InputsWithGmvWithTnrWithSapOuterNode* lbffDol3InputsWithGmvWithTnrWithSapOuterNode = + nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[31]; + + private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100119 : public IStaticGraphConfig { + public: + StaticGraph100119(GraphConfiguration100119* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100119(); + static const uint32_t hashCode = 2100145004; // autogenerated + + private: + // Configuration + GraphConfiguration100119 _graphConfiguration; + + /* Outer Nodes */ + IsysDolWithCvOuterNode _isysDolWithCvOuterNode; + LbffDolSmoothOuterNode _lbffDolSmoothOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffDol3InputsWithGmvWithTnrWithSapOuterNode _lbffDol3InputsWithGmvWithTnrWithSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100119 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[31]; +}; + +class imageSubGraphTopology100120 : public GraphTopology { + public: + imageSubGraphTopology100120(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 16, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffRgbIrNoGmvNoTnrWithSapOuterNode* lbffRgbIrNoGmvNoTnrWithSapOuterNode = nullptr; + GraphLink* subGraphLinks[16]; + + private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class irSubGraphTopology100120 : public GraphTopology { + public: + irSubGraphTopology100120(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 23, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffRgbIrNoGmvNoTnrWithSapOuterNode* lbffRgbIrNoGmvNoTnrWithSapOuterNode = nullptr; + LbffRgbIrIrNoGmvNoTnrNoSapOuterNode* lbffRgbIrIrNoGmvNoTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[23]; + + private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class image_irSubGraphTopology100120 : public GraphTopology { + public: + image_irSubGraphTopology100120(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 23, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffRgbIrNoGmvNoTnrWithSapOuterNode* lbffRgbIrNoGmvNoTnrWithSapOuterNode = nullptr; + LbffRgbIrIrNoGmvNoTnrNoSapOuterNode* lbffRgbIrIrNoGmvNoTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[23]; + + private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100120 : public IStaticGraphConfig { + public: + StaticGraph100120(GraphConfiguration100120* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100120(); + static const uint32_t hashCode = 971823595; // autogenerated + + private: + // Configuration + GraphConfiguration100120 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffRgbIrNoGmvNoTnrWithSapOuterNode _lbffRgbIrNoGmvNoTnrWithSapOuterNode; + LbffRgbIrIrNoGmvNoTnrNoSapOuterNode _lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100120 _imageSubGraph; + irSubGraphTopology100120 _irSubGraph; + image_irSubGraphTopology100120 _image_irSubGraph; + + // All graph links + GraphLink _graphLinks[23]; +}; + +class imageSubGraphTopology100121 : public GraphTopology { + public: + imageSubGraphTopology100121(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 21, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffRgbIrWithGmvNoTnrWithSapOuterNode* lbffRgbIrWithGmvNoTnrWithSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[21]; + + private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class irSubGraphTopology100121 : public GraphTopology { + public: + irSubGraphTopology100121(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 25, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffRgbIrWithGmvNoTnrWithSapOuterNode* lbffRgbIrWithGmvNoTnrWithSapOuterNode = nullptr; + LbffRgbIrIrNoGmvNoTnrNoSapOuterNode* lbffRgbIrIrNoGmvNoTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[25]; + + private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class image_irSubGraphTopology100121 : public GraphTopology { + public: + image_irSubGraphTopology100121(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 28, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffRgbIrWithGmvNoTnrWithSapOuterNode* lbffRgbIrWithGmvNoTnrWithSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + LbffRgbIrIrNoGmvNoTnrNoSapOuterNode* lbffRgbIrIrNoGmvNoTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[28]; + + private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100121 : public IStaticGraphConfig { + public: + StaticGraph100121(GraphConfiguration100121* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100121(); + static const uint32_t hashCode = 760104734; // autogenerated + + private: + // Configuration + GraphConfiguration100121 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffRgbIrWithGmvNoTnrWithSapOuterNode _lbffRgbIrWithGmvNoTnrWithSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + LbffRgbIrIrNoGmvNoTnrNoSapOuterNode _lbffRgbIrIrNoGmvNoTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100121 _imageSubGraph; + irSubGraphTopology100121 _irSubGraph; + image_irSubGraphTopology100121 _image_irSubGraph; + + // All graph links + GraphLink _graphLinks[28]; +}; + +class imageSubGraphTopology100122 : public GraphTopology { + public: + imageSubGraphTopology100122(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 21, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffRgbIrNoGmvWithTnrWithSapOuterNode* lbffRgbIrNoGmvWithTnrWithSapOuterNode = nullptr; + GraphLink* subGraphLinks[21]; + + private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class irSubGraphTopology100122 : public GraphTopology { + public: + irSubGraphTopology100122(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 31, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffRgbIrNoGmvWithTnrWithSapOuterNode* lbffRgbIrNoGmvWithTnrWithSapOuterNode = nullptr; + LbffRgbIrIrNoGmvWithTnrNoSapOuterNode* lbffRgbIrIrNoGmvWithTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[31]; + + private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class image_irSubGraphTopology100122 : public GraphTopology { + public: + image_irSubGraphTopology100122(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 31, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffRgbIrNoGmvWithTnrWithSapOuterNode* lbffRgbIrNoGmvWithTnrWithSapOuterNode = nullptr; + LbffRgbIrIrNoGmvWithTnrNoSapOuterNode* lbffRgbIrIrNoGmvWithTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[31]; + + private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100122 : public IStaticGraphConfig { + public: + StaticGraph100122(GraphConfiguration100122* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100122(); + static const uint32_t hashCode = 2835173097; // autogenerated + + private: + // Configuration + GraphConfiguration100122 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffRgbIrNoGmvWithTnrWithSapOuterNode _lbffRgbIrNoGmvWithTnrWithSapOuterNode; + LbffRgbIrIrNoGmvWithTnrNoSapOuterNode _lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100122 _imageSubGraph; + irSubGraphTopology100122 _irSubGraph; + image_irSubGraphTopology100122 _image_irSubGraph; + + // All graph links + GraphLink _graphLinks[31]; +}; + +class imageSubGraphTopology100123 : public GraphTopology { + public: + imageSubGraphTopology100123(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 26, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffRgbIrWithGmvWithTnrWithSapOuterNode* lbffRgbIrWithGmvWithTnrWithSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[26]; + + private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class irSubGraphTopology100123 : public GraphTopology { + public: + irSubGraphTopology100123(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 33, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffRgbIrWithGmvWithTnrWithSapOuterNode* lbffRgbIrWithGmvWithTnrWithSapOuterNode = nullptr; + LbffRgbIrIrNoGmvWithTnrNoSapOuterNode* lbffRgbIrIrNoGmvWithTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[33]; + + private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class image_irSubGraphTopology100123 : public GraphTopology { + public: + image_irSubGraphTopology100123(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 36, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffRgbIrWithGmvWithTnrWithSapOuterNode* lbffRgbIrWithGmvWithTnrWithSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + LbffRgbIrIrNoGmvWithTnrNoSapOuterNode* lbffRgbIrIrNoGmvWithTnrNoSapOuterNode = nullptr; + GraphLink* subGraphLinks[36]; + + private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100123 : public IStaticGraphConfig { + public: + StaticGraph100123(GraphConfiguration100123* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100123(); + static const uint32_t hashCode = 1906732972; // autogenerated + + private: + // Configuration + GraphConfiguration100123 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffRgbIrWithGmvWithTnrWithSapOuterNode _lbffRgbIrWithGmvWithTnrWithSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + LbffRgbIrIrNoGmvWithTnrNoSapOuterNode _lbffRgbIrIrNoGmvWithTnrNoSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100123 _imageSubGraph; + irSubGraphTopology100123 _irSubGraph; + image_irSubGraphTopology100123 _image_irSubGraph; + + // All graph links + GraphLink _graphLinks[36]; +}; + +class imageSubGraphTopology100127 : public GraphTopology { + public: + imageSubGraphTopology100127(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 15, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffIrNoGmvNoTnrWithSapOuterNode* lbffIrNoGmvNoTnrWithSapOuterNode = nullptr; + GraphLink* subGraphLinks[15]; + + private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100127 : public IStaticGraphConfig { + public: + StaticGraph100127(GraphConfiguration100127* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100127(); + static const uint32_t hashCode = 1889144206; // autogenerated + + private: + // Configuration + GraphConfiguration100127 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffIrNoGmvNoTnrWithSapOuterNode _lbffIrNoGmvNoTnrWithSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100127 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[15]; +}; + +class imageSubGraphTopology100128 : public GraphTopology { + public: + imageSubGraphTopology100128(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 20, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffIrWithGmvNoTnrWithSapOuterNode* lbffIrWithGmvNoTnrWithSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[20]; + + private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100128 : public IStaticGraphConfig { + public: + StaticGraph100128(GraphConfiguration100128* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100128(); + static const uint32_t hashCode = 2596417523; // autogenerated + + private: + // Configuration + GraphConfiguration100128 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffIrWithGmvNoTnrWithSapOuterNode _lbffIrWithGmvNoTnrWithSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100128 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[20]; +}; + +class imageSubGraphTopology100129 : public GraphTopology { + public: + imageSubGraphTopology100129(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 20, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffIrNoGmvWithTnrWithSapOuterNode* lbffIrNoGmvWithTnrWithSapOuterNode = nullptr; + GraphLink* subGraphLinks[20]; + + private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100129 : public IStaticGraphConfig { + public: + StaticGraph100129(GraphConfiguration100129* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100129(); + static const uint32_t hashCode = 3199590544; // autogenerated + + private: + // Configuration + GraphConfiguration100129 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffIrNoGmvWithTnrWithSapOuterNode _lbffIrNoGmvWithTnrWithSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100129 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[20]; +}; + +class imageSubGraphTopology100130 : public GraphTopology { + public: + imageSubGraphTopology100130(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 25, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffIrWithGmvWithTnrWithSapOuterNode* lbffIrWithGmvWithTnrWithSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[25]; + + private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100130 : public IStaticGraphConfig { + public: + StaticGraph100130(GraphConfiguration100130* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100130(); + static const uint32_t hashCode = 2452021393; // autogenerated + + private: + // Configuration + GraphConfiguration100130 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffIrWithGmvWithTnrWithSapOuterNode _lbffIrWithGmvWithTnrWithSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100130 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[25]; +}; + +class imageSubGraphTopology100131 : public GraphTopology { + public: + imageSubGraphTopology100131(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 17, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode* + lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode = nullptr; + GraphLink* subGraphLinks[17]; + + private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100131 : public IStaticGraphConfig { + public: + StaticGraph100131(GraphConfiguration100131* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100131(); + static const uint32_t hashCode = 150427038; // autogenerated + + private: + // Configuration + GraphConfiguration100131 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode + _lbffBayerPdaf3asPdaf2NoGmvNoTnrWithSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100131 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[17]; +}; + +class imageSubGraphTopology100132 : public GraphTopology { + public: + imageSubGraphTopology100132(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 22, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode* + lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[22]; + + private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100132 : public IStaticGraphConfig { + public: + StaticGraph100132(GraphConfiguration100132* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100132(); + static const uint32_t hashCode = 2229860427; // autogenerated + + private: + // Configuration + GraphConfiguration100132 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode + _lbffBayerPdaf3asPdaf2WithGmvNoTnrWithSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100132 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[22]; +}; + +class imageSubGraphTopology100133 : public GraphTopology { + public: + imageSubGraphTopology100133(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 22, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode* + lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode = nullptr; + GraphLink* subGraphLinks[22]; + + private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100133 : public IStaticGraphConfig { + public: + StaticGraph100133(GraphConfiguration100133* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100133(); + static const uint32_t hashCode = 3332109776; // autogenerated + + private: + // Configuration + GraphConfiguration100133 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode + _lbffBayerPdaf3asPdaf2NoGmvWithTnrWithSapOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100133 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[22]; +}; + +class imageSubGraphTopology100134 : public GraphTopology { + public: + imageSubGraphTopology100134(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 27, sinkMappingConfiguration) {} + StaticGraphStatus configInnerNodes( + SubGraphInnerNodeConfiguration& subGraphInnerNodeConfiguration) override; + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + SwSegnetOuterNode* swSegnetOuterNode = nullptr; + LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode* + lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode = nullptr; + SwGdcOuterNode* swGdcOuterNode = nullptr; + GraphLink* subGraphLinks[27]; + + private: + StaticGraphStatus updateSegmentAwareKernels(); +}; + +class StaticGraph100134 : public IStaticGraphConfig { + public: + StaticGraph100134(GraphConfiguration100134* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100134(); + static const uint32_t hashCode = 2469377657; // autogenerated + + private: + // Configuration + GraphConfiguration100134 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + SwSegnetOuterNode _swSegnetOuterNode; + LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode + _lbffBayerPdaf3asPdaf2WithGmvWithTnrWithSapOuterNode; + SwGdcOuterNode _swGdcOuterNode; + + /* + Topology + */ + // Sub Graphs definition + imageSubGraphTopology100134 _imageSubGraph; + + // All graph links + GraphLink _graphLinks[27]; +}; + +class rawSubGraphTopology100026 : public GraphTopology { + public: + rawSubGraphTopology100026(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 2, sinkMappingConfiguration) {} + + IsysOuterNode* isysOuterNode = nullptr; + GraphLink* subGraphLinks[2]; +}; + +class StaticGraph100026 : public IStaticGraphConfig { + public: + StaticGraph100026(GraphConfiguration100026* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100026(); + static const uint32_t hashCode = 1006964276; // autogenerated + + private: + // Configuration + GraphConfiguration100026 _graphConfiguration; + + /* Outer Nodes */ + IsysOuterNode _isysOuterNode; + + /* + Topology + */ + // Sub Graphs definition + rawSubGraphTopology100026 _rawSubGraph; + + // All graph links + GraphLink _graphLinks[2]; +}; + +class rawSubGraphTopology100035 : public GraphTopology { + public: + rawSubGraphTopology100035(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 4, sinkMappingConfiguration) {} + + IsysDolOuterNode* isysDolOuterNode = nullptr; + GraphLink* subGraphLinks[4]; +}; + +class StaticGraph100035 : public IStaticGraphConfig { + public: + StaticGraph100035(GraphConfiguration100035* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100035(); + static const uint32_t hashCode = 1685721370; // autogenerated + + private: + // Configuration + GraphConfiguration100035 _graphConfiguration; + + /* Outer Nodes */ + IsysDolOuterNode _isysDolOuterNode; + + /* + Topology + */ + // Sub Graphs definition + rawSubGraphTopology100035 _rawSubGraph; + + // All graph links + GraphLink _graphLinks[4]; +}; + +class rawSubGraphTopology100036 : public GraphTopology { + public: + rawSubGraphTopology100036(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 4, sinkMappingConfiguration) {} + + IsysPdaf2OuterNode* isysPdaf2OuterNode = nullptr; + GraphLink* subGraphLinks[4]; +}; + +class StaticGraph100036 : public IStaticGraphConfig { + public: + StaticGraph100036(GraphConfiguration100036* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100036(); + static const uint32_t hashCode = 1685721370; // autogenerated + + private: + // Configuration + GraphConfiguration100036 _graphConfiguration; + + /* Outer Nodes */ + IsysPdaf2OuterNode _isysPdaf2OuterNode; + + /* + Topology + */ + // Sub Graphs definition + rawSubGraphTopology100036 _rawSubGraph; + + // All graph links + GraphLink _graphLinks[4]; +}; + +class rawSubGraphTopology100037 : public GraphTopology { + public: + rawSubGraphTopology100037(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 4, sinkMappingConfiguration) {} + + IsysWithCvOuterNode* isysWithCvOuterNode = nullptr; + GraphLink* subGraphLinks[4]; +}; + +class StaticGraph100037 : public IStaticGraphConfig { + public: + StaticGraph100037(GraphConfiguration100037* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100037(); + static const uint32_t hashCode = 3835365160; // autogenerated + + private: + // Configuration + GraphConfiguration100037 _graphConfiguration; + + /* Outer Nodes */ + IsysWithCvOuterNode _isysWithCvOuterNode; + + /* + Topology + */ + // Sub Graphs definition + rawSubGraphTopology100037 _rawSubGraph; + + // All graph links + GraphLink _graphLinks[4]; +}; + +class rawSubGraphTopology100038 : public GraphTopology { + public: + rawSubGraphTopology100038(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 6, sinkMappingConfiguration) {} + + IsysDolWithCvOuterNode* isysDolWithCvOuterNode = nullptr; + GraphLink* subGraphLinks[6]; +}; + +class StaticGraph100038 : public IStaticGraphConfig { + public: + StaticGraph100038(GraphConfiguration100038* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100038(); + static const uint32_t hashCode = 963983022; // autogenerated + + private: + // Configuration + GraphConfiguration100038 _graphConfiguration; + + /* Outer Nodes */ + IsysDolWithCvOuterNode _isysDolWithCvOuterNode; + + /* + Topology + */ + // Sub Graphs definition + rawSubGraphTopology100038 _rawSubGraph; + + // All graph links + GraphLink _graphLinks[6]; +}; + +class rawSubGraphTopology100039 : public GraphTopology { + public: + rawSubGraphTopology100039(VirtualSinkMapping* sinkMappingConfiguration) + : GraphTopology(subGraphLinks, 6, sinkMappingConfiguration) {} + + IsysPdaf2WithCvOuterNode* isysPdaf2WithCvOuterNode = nullptr; + GraphLink* subGraphLinks[6]; +}; + +class StaticGraph100039 : public IStaticGraphConfig { + public: + StaticGraph100039(GraphConfiguration100039* selectedGraphConfiguration, + VirtualSinkMapping* sinkMappingConfiguration, SensorMode* selectedSensorMode, + int32_t selectedSettingsId); + ~StaticGraph100039(); + static const uint32_t hashCode = 963983022; // autogenerated + + private: + // Configuration + GraphConfiguration100039 _graphConfiguration; + + /* Outer Nodes */ + IsysPdaf2WithCvOuterNode _isysPdaf2WithCvOuterNode; + + /* + Topology + */ + // Sub Graphs definition + rawSubGraphTopology100039 _rawSubGraph; + + // All graph links + GraphLink _graphLinks[6]; +}; diff --git a/modules/ipu_desc/ipu8/StaticGraphBinaryAutogen.h b/modules/ipu_desc/ipu8/StaticGraphBinaryAutogen.h new file mode 100644 index 0000000..a3554c9 --- /dev/null +++ b/modules/ipu_desc/ipu8/StaticGraphBinaryAutogen.h @@ -0,0 +1,86 @@ +/* + * Copyright (C) 2025 Intel Corporation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#pragma once + +#include + +#pragma pack(push, 4) +struct SensorMode { + uint16_t horizontalCropOffset = 0; + uint16_t verticalCropOffset = 0; + uint16_t croppedImageWidth = 0; + uint16_t croppedImageHeight = 0; + uint16_t horizontalScalingNumerator = 0; + uint16_t horizontalScalingDenominator = 0; + uint16_t verticalScalingNumerator = 0; + uint16_t verticalScalingDenominator = 0; +}; + +struct StreamConfig { + uint32_t width = 0; + uint32_t height = 0; + uint32_t bpp = 0; +}; + +struct AutoCalibrationStreamConfig { + uint32_t depthOutputWidth = 0; + uint32_t depthOutputHeight = 0; + uint32_t sliceNumber = 0; +}; + +enum class GraphConfigurationKeyAttributes : uint32_t { + None = 0x00000000, + PdafType1 = 0x00000001, + PdafType2 = 0x00000002, + PdafType3 = 0x00000004, + Dol2Inputs = 0x00000008, + Dol3Inputs = 0x00000010, + DvsActive = 0x00000020, + PipelineLowLight = 0x00000040, + PipelineNormalLight = 0x00000080, + LowPowerActive = 0x00000100, +}; + +struct GraphConfigurationKey { + uint32_t fps = 0; + uint32_t attributes = 0; + StreamConfig preview; + StreamConfig video; + StreamConfig postProcessingVideo; + StreamConfig stills; + StreamConfig raw; + StreamConfig videoIr; + StreamConfig previewIr; +}; + +struct GraphConfigurationHeader { + GraphConfigurationKey settingsKey; + uint16_t settingId = 0; + int32_t graphId = 0; + uint8_t sensorModeIndex = 0; + int32_t resConfigDataOffset = 0; + uint32_t graphHashCode = 0; +}; + +struct BinaryHeader { + uint32_t isSapEnable = 0; + uint32_t binaryCommonHashCode = 0; + uint32_t numberOfResolutions = 0; + uint32_t numberOfSensorModes = 0; +}; + +#pragma pack(pop) diff --git a/modules/ipu_desc/ipu8/StaticGraphReaderAutogen.cpp b/modules/ipu_desc/ipu8/StaticGraphReaderAutogen.cpp new file mode 100644 index 0000000..768f699 --- /dev/null +++ b/modules/ipu_desc/ipu8/StaticGraphReaderAutogen.cpp @@ -0,0 +1,1295 @@ +/* + * Copyright (C) 2025 Intel Corporation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "StaticGraphReaderAutogen.h" + +#include + +StaticGraphStatus StaticGraphReader::Init(StaticReaderBinaryData& binaryGraphSettings) { + if (!binaryGraphSettings.data) { + STATIC_GRAPH_LOG("Binary settings is empty."); + return StaticGraphStatus::SG_ERROR; + } + + int8_t* currOffset = static_cast(binaryGraphSettings.data); + _binaryHeader = *reinterpret_cast(currOffset); + + if (_binaryHeader.binaryCommonHashCode != staticGraphCommonHashCode) { + STATIC_GRAPH_LOG( + "Binary hash code is not matching the static graph structure hash code. Binary should " + "be re-created."); + return StaticGraphStatus::SG_ERROR; + } + + // Skipping BinaryHeader + + currOffset += sizeof(BinaryHeader); + + uint32_t numOfAvailablePins = 0; + DataRangeHeader dataRangeHeader = *(DataRangeHeader*)currOffset; + + for (int j = 0; j < enNumOfOutPins; j++) + numOfAvailablePins += dataRangeHeader.NumberOfPinResolutions[j]; + + currOffset += sizeof(DataRangeHeader) + sizeof(DriverDesc) * numOfAvailablePins; + + uint32_t numOfGraphs = *(uint32_t*)currOffset; + currOffset += sizeof(numOfGraphs) + numOfGraphs * sizeof(GraphHashCode); + + _graphConfigurationHeaders = reinterpret_cast(currOffset); + currOffset += sizeof(GraphConfigurationHeader) * _binaryHeader.numberOfResolutions; + _sensorModes = reinterpret_cast(currOffset); + currOffset += sizeof(SensorMode) * _binaryHeader.numberOfSensorModes; + _configurationData = currOffset; + + return StaticGraphStatus::SG_OK; +} + +StaticGraphStatus StaticGraphReader::GetStaticGraphConfig(GraphConfigurationKey& settingsKey, + IStaticGraphConfig** graph) { + if (!_graphConfigurationHeaders || !_sensorModes || !_configurationData) { + STATIC_GRAPH_LOG("Static graph reader was not initialized properly."); + return StaticGraphStatus::SG_ERROR; + } + + if (!graph) { + STATIC_GRAPH_LOG("Cannot get graph configuration into null parameter"); + return StaticGraphStatus::SG_ERROR; + } + + GraphConfigurationHeader* selectedGraphConfigurationHeader = nullptr; + + for (uint32_t i = 0; i < _binaryHeader.numberOfResolutions; i++) { + if (memcmp(&_graphConfigurationHeaders[i].settingsKey, &settingsKey, + sizeof(GraphConfigurationKey)) == 0) { + selectedGraphConfigurationHeader = &_graphConfigurationHeaders[i]; + STATIC_GRAPH_LOG("Static graph selected setting id - %d", + selectedGraphConfigurationHeader->settingId); + + break; + } + } + + if (!selectedGraphConfigurationHeader) { + STATIC_GRAPH_LOG("Resolution settings was not found for the given key."); + return StaticGraphStatus::SG_ERROR; + } + + int8_t* selectedConfigurationData = + _configurationData + selectedGraphConfigurationHeader->resConfigDataOffset; + + GraphConfigurationHeader* baseGraphConfigurationHeader = nullptr; + + for (uint32_t i = 0; i < _binaryHeader.numberOfResolutions; i++) { + if (_graphConfigurationHeaders[i].resConfigDataOffset == + selectedGraphConfigurationHeader->resConfigDataOffset) { + if (selectedGraphConfigurationHeader != &_graphConfigurationHeaders[i]) { + baseGraphConfigurationHeader = &_graphConfigurationHeaders[i]; + } + break; + } + } + + VirtualSinkMapping* baseSinkMappingConfiguration = + reinterpret_cast(selectedConfigurationData); + + VirtualSinkMapping selectedSinkMappingConfiguration; + GetSinkMappingConfiguration(baseGraphConfigurationHeader, baseSinkMappingConfiguration, + selectedGraphConfigurationHeader, + &selectedSinkMappingConfiguration); + + // fetching the graph + switch (selectedGraphConfigurationHeader->graphId) { + case 100000: + if (StaticGraph100000::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100000( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100001: + if (StaticGraph100001::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100001( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100002: + if (StaticGraph100002::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100002( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100003: + if (StaticGraph100003::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100003( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100079: + if (StaticGraph100079::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100079( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100080: + if (StaticGraph100080::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100080( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100081: + if (StaticGraph100081::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100081( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100004: + if (StaticGraph100004::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100004( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100005: + if (StaticGraph100005::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100005( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100006: + if (StaticGraph100006::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100006( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100007: + if (StaticGraph100007::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100007( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100008: + if (StaticGraph100008::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100008( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100009: + if (StaticGraph100009::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100009( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100010: + if (StaticGraph100010::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100010( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100011: + if (StaticGraph100011::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100011( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100045: + if (StaticGraph100045::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100045( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100012: + if (StaticGraph100012::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100012( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100013: + if (StaticGraph100013::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100013( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100014: + if (StaticGraph100014::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100014( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100015: + if (StaticGraph100015::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100015( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100016: + if (StaticGraph100016::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100016( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100017: + if (StaticGraph100017::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100017( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100018: + if (StaticGraph100018::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100018( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100019: + if (StaticGraph100019::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100019( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100020: + if (StaticGraph100020::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100020( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100021: + if (StaticGraph100021::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100021( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100022: + if (StaticGraph100022::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100022( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100023: + if (StaticGraph100023::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100023( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100024: + if (StaticGraph100024::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100024( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100040: + if (StaticGraph100040::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100040( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100041: + if (StaticGraph100041::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100041( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100042: + if (StaticGraph100042::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100042( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100027: + if (StaticGraph100027::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100027( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100028: + if (StaticGraph100028::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100028( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100029: + if (StaticGraph100029::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100029( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100030: + if (StaticGraph100030::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100030( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100031: + if (StaticGraph100031::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100031( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100032: + if (StaticGraph100032::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100032( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100033: + if (StaticGraph100033::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100033( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100034: + if (StaticGraph100034::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100034( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100100: + if (StaticGraph100100::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100100( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100101: + if (StaticGraph100101::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100101( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100102: + if (StaticGraph100102::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100102( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100103: + if (StaticGraph100103::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100103( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100104: + if (StaticGraph100104::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100104( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100105: + if (StaticGraph100105::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100105( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100106: + if (StaticGraph100106::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100106( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100107: + if (StaticGraph100107::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100107( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100108: + if (StaticGraph100108::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100108( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100109: + if (StaticGraph100109::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100109( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100110: + if (StaticGraph100110::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100110( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100111: + if (StaticGraph100111::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100111( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100112: + if (StaticGraph100112::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100112( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100113: + if (StaticGraph100113::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100113( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100114: + if (StaticGraph100114::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100114( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100115: + if (StaticGraph100115::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100115( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100116: + if (StaticGraph100116::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100116( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100117: + if (StaticGraph100117::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100117( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100118: + if (StaticGraph100118::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100118( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100119: + if (StaticGraph100119::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100119( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100120: + if (StaticGraph100120::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100120( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100121: + if (StaticGraph100121::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100121( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100122: + if (StaticGraph100122::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100122( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100123: + if (StaticGraph100123::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100123( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100127: + if (StaticGraph100127::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100127( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100128: + if (StaticGraph100128::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100128( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100129: + if (StaticGraph100129::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100129( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100130: + if (StaticGraph100130::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100130( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100131: + if (StaticGraph100131::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100131( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100132: + if (StaticGraph100132::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100132( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100133: + if (StaticGraph100133::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100133( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100134: + if (StaticGraph100134::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100134( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100026: + if (StaticGraph100026::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100026( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100035: + if (StaticGraph100035::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100035( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100036: + if (StaticGraph100036::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100036( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100037: + if (StaticGraph100037::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100037( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100038: + if (StaticGraph100038::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100038( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + case 100039: + if (StaticGraph100039::hashCode != selectedGraphConfigurationHeader->graphHashCode) { + STATIC_GRAPH_LOG( + "Graph %d hash code is not matching the settings. Binary should be re-created.", + selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + *graph = new StaticGraph100039( + reinterpret_cast(selectedConfigurationData), + &selectedSinkMappingConfiguration, + &_sensorModes[selectedGraphConfigurationHeader->sensorModeIndex], + selectedGraphConfigurationHeader->settingId); + break; + default: + STATIC_GRAPH_LOG("Graph %d was not found", selectedGraphConfigurationHeader->graphId); + return StaticGraphStatus::SG_ERROR; + } + + return StaticGraphStatus::SG_OK; +} + +void StaticGraphReader::GetSinkMappingConfiguration( + GraphConfigurationHeader* baseGraphConfigurationHeader, + VirtualSinkMapping* baseSinkMappingConfiguration, + GraphConfigurationHeader* selectedGraphConfigurationHeader, + VirtualSinkMapping* selectedSinkMappingConfiguration) { + if (baseGraphConfigurationHeader == nullptr) { + memcpy(selectedSinkMappingConfiguration, baseSinkMappingConfiguration, + sizeof(VirtualSinkMapping)); + } else { + if (selectedGraphConfigurationHeader->settingsKey.preview.bpp == + baseGraphConfigurationHeader->settingsKey.preview.bpp && + selectedGraphConfigurationHeader->settingsKey.preview.width == + baseGraphConfigurationHeader->settingsKey.preview.width && + selectedGraphConfigurationHeader->settingsKey.preview.height == + baseGraphConfigurationHeader->settingsKey.preview.height) { + selectedSinkMappingConfiguration->preview = baseSinkMappingConfiguration->preview; + } else if (selectedGraphConfigurationHeader->settingsKey.preview.bpp == + baseGraphConfigurationHeader->settingsKey.video.bpp && + selectedGraphConfigurationHeader->settingsKey.preview.width == + baseGraphConfigurationHeader->settingsKey.video.width && + selectedGraphConfigurationHeader->settingsKey.preview.height == + baseGraphConfigurationHeader->settingsKey.video.height) { + selectedSinkMappingConfiguration->preview = baseSinkMappingConfiguration->video; + } else if (selectedGraphConfigurationHeader->settingsKey.preview.bpp == + baseGraphConfigurationHeader->settingsKey.postProcessingVideo.bpp && + selectedGraphConfigurationHeader->settingsKey.preview.width == + baseGraphConfigurationHeader->settingsKey.postProcessingVideo.width && + selectedGraphConfigurationHeader->settingsKey.preview.height == + baseGraphConfigurationHeader->settingsKey.postProcessingVideo.height) { + selectedSinkMappingConfiguration->preview = + baseSinkMappingConfiguration->postProcessingVideo; + } else { + STATIC_GRAPH_LOG("Did not find correct mapping for preview sink."); + } + + if (selectedGraphConfigurationHeader->settingsKey.video.bpp == + baseGraphConfigurationHeader->settingsKey.preview.bpp && + selectedGraphConfigurationHeader->settingsKey.video.width == + baseGraphConfigurationHeader->settingsKey.preview.width && + selectedGraphConfigurationHeader->settingsKey.video.height == + baseGraphConfigurationHeader->settingsKey.preview.height && + selectedSinkMappingConfiguration->preview != baseSinkMappingConfiguration->preview) { + selectedSinkMappingConfiguration->video = baseSinkMappingConfiguration->preview; + } else if (selectedGraphConfigurationHeader->settingsKey.video.bpp == + baseGraphConfigurationHeader->settingsKey.video.bpp && + selectedGraphConfigurationHeader->settingsKey.video.width == + baseGraphConfigurationHeader->settingsKey.video.width && + selectedGraphConfigurationHeader->settingsKey.video.height == + baseGraphConfigurationHeader->settingsKey.video.height && + selectedSinkMappingConfiguration->preview != + baseSinkMappingConfiguration->video) { + selectedSinkMappingConfiguration->video = baseSinkMappingConfiguration->video; + } else if (selectedGraphConfigurationHeader->settingsKey.video.bpp == + baseGraphConfigurationHeader->settingsKey.postProcessingVideo.bpp && + selectedGraphConfigurationHeader->settingsKey.video.width == + baseGraphConfigurationHeader->settingsKey.postProcessingVideo.width && + selectedGraphConfigurationHeader->settingsKey.video.height == + baseGraphConfigurationHeader->settingsKey.postProcessingVideo.height && + selectedSinkMappingConfiguration->preview != + baseSinkMappingConfiguration->postProcessingVideo) { + selectedSinkMappingConfiguration->video = + baseSinkMappingConfiguration->postProcessingVideo; + } else { + STATIC_GRAPH_LOG("Did not find correct mapping for video sink."); + } + + if (selectedGraphConfigurationHeader->settingsKey.postProcessingVideo.bpp == + baseGraphConfigurationHeader->settingsKey.preview.bpp && + selectedGraphConfigurationHeader->settingsKey.postProcessingVideo.width == + baseGraphConfigurationHeader->settingsKey.preview.width && + selectedGraphConfigurationHeader->settingsKey.postProcessingVideo.height == + baseGraphConfigurationHeader->settingsKey.preview.height && + selectedSinkMappingConfiguration->preview != baseSinkMappingConfiguration->preview && + selectedSinkMappingConfiguration->video != baseSinkMappingConfiguration->preview) { + selectedSinkMappingConfiguration->postProcessingVideo = + baseSinkMappingConfiguration->preview; + } else if (selectedGraphConfigurationHeader->settingsKey.postProcessingVideo.bpp == + baseGraphConfigurationHeader->settingsKey.video.bpp && + selectedGraphConfigurationHeader->settingsKey.postProcessingVideo.width == + baseGraphConfigurationHeader->settingsKey.video.width && + selectedGraphConfigurationHeader->settingsKey.postProcessingVideo.height == + baseGraphConfigurationHeader->settingsKey.video.height && + selectedSinkMappingConfiguration->preview != + baseSinkMappingConfiguration->video && + selectedSinkMappingConfiguration->video != baseSinkMappingConfiguration->video) { + selectedSinkMappingConfiguration->postProcessingVideo = + baseSinkMappingConfiguration->video; + } else if (selectedGraphConfigurationHeader->settingsKey.postProcessingVideo.bpp == + baseGraphConfigurationHeader->settingsKey.postProcessingVideo.bpp && + selectedGraphConfigurationHeader->settingsKey.postProcessingVideo.width == + baseGraphConfigurationHeader->settingsKey.postProcessingVideo.width && + selectedGraphConfigurationHeader->settingsKey.postProcessingVideo.height == + baseGraphConfigurationHeader->settingsKey.postProcessingVideo.height && + selectedSinkMappingConfiguration->preview != + baseSinkMappingConfiguration->postProcessingVideo && + selectedSinkMappingConfiguration->video != + baseSinkMappingConfiguration->postProcessingVideo) { + selectedSinkMappingConfiguration->postProcessingVideo = + baseSinkMappingConfiguration->postProcessingVideo; + } else { + STATIC_GRAPH_LOG("Did not find correct mapping for postProcessingVideo sink."); + } + + if (selectedGraphConfigurationHeader->settingsKey.stills.bpp == + baseGraphConfigurationHeader->settingsKey.stills.bpp && + selectedGraphConfigurationHeader->settingsKey.stills.width == + baseGraphConfigurationHeader->settingsKey.stills.width && + selectedGraphConfigurationHeader->settingsKey.stills.height == + baseGraphConfigurationHeader->settingsKey.stills.height && + selectedSinkMappingConfiguration->preview != baseSinkMappingConfiguration->stills && + selectedSinkMappingConfiguration->video != baseSinkMappingConfiguration->stills && + selectedSinkMappingConfiguration->postProcessingVideo != + baseSinkMappingConfiguration->stills) { + selectedSinkMappingConfiguration->stills = baseSinkMappingConfiguration->stills; + } else { + STATIC_GRAPH_LOG("Did not find correct mapping for stills sink."); + } + + if (selectedGraphConfigurationHeader->settingsKey.videoIr.bpp == + baseGraphConfigurationHeader->settingsKey.videoIr.bpp && + selectedGraphConfigurationHeader->settingsKey.videoIr.width == + baseGraphConfigurationHeader->settingsKey.videoIr.width && + selectedGraphConfigurationHeader->settingsKey.videoIr.height == + baseGraphConfigurationHeader->settingsKey.videoIr.height) { + selectedSinkMappingConfiguration->videoIr = baseSinkMappingConfiguration->videoIr; + } else if (selectedGraphConfigurationHeader->settingsKey.videoIr.bpp == + baseGraphConfigurationHeader->settingsKey.previewIr.bpp && + selectedGraphConfigurationHeader->settingsKey.videoIr.width == + baseGraphConfigurationHeader->settingsKey.previewIr.width && + selectedGraphConfigurationHeader->settingsKey.videoIr.height == + baseGraphConfigurationHeader->settingsKey.previewIr.height) { + selectedSinkMappingConfiguration->videoIr = baseSinkMappingConfiguration->previewIr; + } else { + STATIC_GRAPH_LOG("Did not find correct mapping for videoIr sink."); + } + + if (selectedGraphConfigurationHeader->settingsKey.previewIr.bpp == + baseGraphConfigurationHeader->settingsKey.videoIr.bpp && + selectedGraphConfigurationHeader->settingsKey.previewIr.width == + baseGraphConfigurationHeader->settingsKey.videoIr.width && + selectedGraphConfigurationHeader->settingsKey.previewIr.height == + baseGraphConfigurationHeader->settingsKey.videoIr.height && + selectedSinkMappingConfiguration->videoIr != baseSinkMappingConfiguration->videoIr) { + selectedSinkMappingConfiguration->previewIr = baseSinkMappingConfiguration->videoIr; + } else if (selectedGraphConfigurationHeader->settingsKey.previewIr.bpp == + baseGraphConfigurationHeader->settingsKey.previewIr.bpp && + selectedGraphConfigurationHeader->settingsKey.previewIr.width == + baseGraphConfigurationHeader->settingsKey.previewIr.width && + selectedGraphConfigurationHeader->settingsKey.previewIr.height == + baseGraphConfigurationHeader->settingsKey.previewIr.height && + selectedSinkMappingConfiguration->videoIr != + baseSinkMappingConfiguration->previewIr) { + selectedSinkMappingConfiguration->previewIr = baseSinkMappingConfiguration->previewIr; + } else { + STATIC_GRAPH_LOG("Did not find correct mapping for previewIr sink."); + } + } +} diff --git a/modules/ipu_desc/ipu8/StaticGraphReaderAutogen.h b/modules/ipu_desc/ipu8/StaticGraphReaderAutogen.h new file mode 100644 index 0000000..73336c7 --- /dev/null +++ b/modules/ipu_desc/ipu8/StaticGraphReaderAutogen.h @@ -0,0 +1,75 @@ +/* + * Copyright (C) 2025 Intel Corporation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#pragma once +#include "StaticGraphAutogen.h" +#include "StaticGraphBinaryAutogen.h" + +struct StaticReaderBinaryData { + void* data = nullptr; + uint32_t size = 0; +}; + +typedef enum { + enPreview, + enVideo, + enStills, + enRaw, + enIr, + enNumOfOutPins + +} DataRangePins; + +typedef struct DriverDesc { + uint32_t format; + uint32_t width; + uint32_t height; + uint32_t fps; + +} DriverDesc; + +typedef struct DataRangeHeader { + uint32_t NumberOfPinResolutions[enNumOfOutPins]; + +} DataRangeHeader; + +typedef struct { + uint32_t key; + uint32_t value; +} GraphHashCode; + +typedef struct { + uint32_t numOfGraphs; + GraphHashCode* hashCodes; +} GraphHashCodesTable; + +class StaticGraphReader { + public: + StaticGraphReader() = default; + StaticGraphStatus Init(StaticReaderBinaryData& binaryGraphSettings); + StaticGraphStatus GetStaticGraphConfig(GraphConfigurationKey& settingsKey, + IStaticGraphConfig** graph); + static const uint32_t staticGraphCommonHashCode = 361789904; // autogenerated + private: + void GetSinkMappingConfiguration(GraphConfigurationHeader* baseGraphConfigurationHeader, + VirtualSinkMapping* baseSinkMappingConfiguration, + GraphConfigurationHeader* selectedGraphConfigurationHeader, + VirtualSinkMapping* selectedSinkMappingConfiguration); + BinaryHeader _binaryHeader; + GraphConfigurationHeader* _graphConfigurationHeaders = nullptr; + SensorMode* _sensorModes = nullptr; + int8_t* _configurationData = nullptr; +}; diff --git a/modules/ipu_desc/ipu8/StaticGraphTypesAutogen.h b/modules/ipu_desc/ipu8/StaticGraphTypesAutogen.h new file mode 100644 index 0000000..11d3515 --- /dev/null +++ b/modules/ipu_desc/ipu8/StaticGraphTypesAutogen.h @@ -0,0 +1,437 @@ +/* + * Copyright (C) 2025 Intel Corporation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#pragma once + +#ifdef STATIC_GRAPH_USE_IA_AIC_TYPES +#define STATIC_GRAPH_USE_IA_LEGACY_TYPES +#include "ia_aic_types.h" +typedef aic::ImagingKernelGroup StaticGraphNodeKernels; +typedef aic::ia_pac_kernel_info StaticGraphPacRunKernel; +typedef aic::IaAicFragmentDesc StaticGraphFragmentDesc; +#endif + +#ifdef STATIC_GRAPH_USE_IA_LEGACY_TYPES +#include "ia_isp_bxt_types.h" +#include "ia_pal_types_isp_parameters_autogen.h" +#if (IA_RESOLUTION_STATIC_GRAPH_PACK != 4) +#error "Static graph resulution structs packing alignment is defferent than defined in ia_types.h" +#endif +typedef ia_binary_data StaticGraphKernelSystemApi; +typedef ia_rectangle StaticGraphKernelResCrop; +typedef ia_isp_bxt_resolution_info StaticGraphKernelRes; +typedef ia_isp_bxt_bpp_info_t StaticGraphCompKernelBpp; +typedef ia_isp_bxt_run_kernels StaticGraphRunKernel; +typedef ia_pal_system_api_io_buffer_1_4_t StaticGraphKernelSystemApiIoBuffer1_4; +#endif + +#ifdef STATIC_GRAPH_LOG +#define SG_PRINTF(fmt, ...) \ + do { \ + printf(fmt, ##__VA_ARGS__); \ + printf("\n"); \ + } while ((void)0, 0) +#define STATIC_GRAPH_LOG(...) SG_PRINTF(__VA_ARGS__) +#else +#define STATIC_GRAPH_LOG(...) ((void)0) +#endif + +enum class NodeResourceId : uint8_t { + Lbff = 0, + SwIsys = 2, + SwSegnet = 3, + SwGdc = 4, + SwScaler = 5, + SwNntm = 6, +}; + +enum class StaticGraphStatus : uint8_t { SG_OK = 0, SG_ERROR = 1 }; + +enum class VirtualSink : uint8_t { + PreviewSink, + VideoSink, + PostProcessingVideoSink, + StillsSink, + ThumbnailSink, + RawSink, + RawPdafSink, + RawDolLongSink, + RawCvSink, + VideoIrSink, + PreviewIrSink, +}; + +enum class HwSink : uint8_t { + Disconnected, + AeOutSink, + AfStdOutSink, + AwbStdOutSink, + AwbSatOutSink, + ImageMpSink, + ImageDpSink, + GmvMatchOutSink, + ProcessedMainSink, + ProcessedSecondarySink, + PdafOutSink, + AwbSveOutSink, + IrAeOutSink, + IrAfStdOutSink, + IrAwbStdOutSink, + IrAwbSatOutSink, + IrMpSink, + RawIsysSink, + RawIsysDolLongSink, + RawIsysPdafSink, + RawIsysCvSink, +}; + +#pragma pack(push, 4) + +#ifndef STATIC_GRAPH_USE_IA_LEGACY_TYPES +// ia_isp_bxt_bpp_info_t +struct StaticGraphCompKernelBpp { + uint8_t input_bpp = 0; + uint8_t output_bpp = 0; +}; + +// ia_rectangle +struct StaticGraphKernelResCrop { + int32_t left = 0; + int32_t top = 0; + int32_t right = 0; + int32_t bottom = 0; +}; + +// ia_isp_bxt_resolution_info +struct StaticGraphKernelRes { + int32_t input_width = 0; + int32_t input_height = 0; + StaticGraphKernelResCrop input_crop; + int32_t output_width = 0; + int32_t output_height = 0; + StaticGraphKernelResCrop output_crop; +}; + +// ia_pal_system_api_io_buffer_1_4_t; +// We add only the fields that are used by tests +struct StaticGraphKernelSystemApiIoBuffer1_4 { + uint32_t x_output_offset_per_stripe[4]; +}; + +#endif +struct StaticGraphKernelBppConfiguration { + uint8_t input_bpp = 0; + uint8_t output_bpp = 0; +}; + +struct StaticGraphPlaneCompressionConfiguration { + uint8_t isEnabled = 0; + uint8_t tsAlignInterval = 0; + uint16_t rowsOfTiles = 0; + uint32_t pixelsOffset = 0; + uint32_t tsOffset = 0; + uint32_t rowOfTilesStride = 0; + uint8_t bpp = 0; + uint8_t encoderPlaneId = 0; + uint8_t decoderPlaneId = 0; + uint8_t isLossy = 0; + uint8_t isFootprint = 0; + uint8_t footprintCompressionRatio = 0; + uint8_t lossyRatioPlus = 0; + uint8_t lossyRatioMins = 0; + uint8_t lossyInstUpper = 0; + uint8_t lossyInstLower = 0; + uint8_t initHistory = 0; + uint8_t initQp = 0; + uint8_t maxQp = 0; + uint8_t minQp = 0; + uint8_t windowSize = 0; + uint8_t maxQpInc = 0; + uint8_t maxQpDec = 0; + uint8_t qpIncReset = 0; + uint8_t logFootprintGuardBand = 0; +}; + +struct StaticGraphLinkCompressionConfiguration { + uint8_t isEnabled = 0; + StaticGraphPlaneCompressionConfiguration lumaCompressionConfiguration; + StaticGraphPlaneCompressionConfiguration chromaCompressionConfiguration; +}; + +struct StaticGraphLinkConfiguration { + uint32_t bufferSize = 0; + uint8_t streamingMode = 0; +}; + +struct VirtualSinkMapping { + uint8_t preview = 0; + uint8_t video = 0; + uint8_t postProcessingVideo = 0; + uint8_t stills = 0; + uint8_t thumbnail = 0; + uint8_t raw = 0; + uint8_t rawPdaf = 0; + uint8_t rawDolLong = 0; + uint8_t rawCv = 0; + uint8_t videoIr = 0; + uint8_t previewIr = 0; +}; + +struct SystemApiRecordHeader { + uint16_t systemApiUuid = 0; +}; + +#pragma pack(pop) + +#ifndef STATIC_GRAPH_USE_IA_LEGACY_TYPES + +// ia_binary_data +struct StaticGraphKernelSystemApi { + void* data; + uint32_t size; +}; + +// ia_isp_bxt_run_kernels +struct StaticGraphRunKernel { + uint32_t stream_id; + uint32_t kernel_uuid; + int32_t enable; + StaticGraphKernelRes* resolution_info; + StaticGraphKernelRes* resolution_history; + uint32_t metadata[4]; + StaticGraphCompKernelBpp bpp_info; + uint32_t output_count; + StaticGraphKernelSystemApi system_api; +}; +#endif + +#ifndef STATIC_GRAPH_USE_IA_AIC_TYPES + +struct StaticGraphFragmentDesc { + uint16_t inputWidth = 0; + uint16_t outputWidth = 0; + uint16_t left = 0; +}; + +// ia_pac_kernel_info +struct StaticGraphPacRunKernel { + StaticGraphRunKernel run_kernel; + StaticGraphFragmentDesc* fragment_descs; + bool fragments_defined; +}; + +// ImagingKernelGroup +struct StaticGraphNodeKernels { + uint32_t kernelCount; + StaticGraphPacRunKernel* kernelList; + uint32_t operationMode; + uint32_t streamId; +}; + +#endif +struct HwBitmaps { + uint32_t rbm[4] = {}; + uint32_t deb[4] = {}; + uint32_t teb[2] = {}; + uint32_t reb[4] = {}; +}; + +enum class NodeTypes : uint8_t { + Isys, + Cb, + Sw, +}; + +enum class GraphElementType : uint8_t { + // Sources + Sensor, + LscBuffer, + PdafBuffer, + SensorDolLongExposure, + LscBufferIr, + // Sinks + AeOut, + AfStdOut, + AwbStdOut, + AwbSatOut, + ImageMp, + ImageDp, + GmvMatchOut, + ProcessedMain, + ProcessedSecondary, + PdafOut, + AwbSveOut, + IrAeOut, + IrAfStdOut, + IrAwbStdOut, + IrAwbSatOut, + IrMp, + RawIsys, + RawIsysDolLong, + RawIsysPdaf, + RawIsysCv, + // Outer Nodes + Isys, + LbffBayerNoGmvNoTnrNoSap, + LbffBayerWithGmvNoTnrNoSap, + SwGdc, + LbffBayerNoGmvWithTnrNoSap, + LbffBayerWithGmvWithTnrNoSap, + SwNntm, + SwScaler, + IsysPdaf2, + LbffBayerPdaf2NoGmvNoTnrNoSap, + LbffBayerPdaf2WithGmvNoTnrNoSap, + LbffBayerPdaf2NoGmvWithTnrNoSap, + LbffBayerPdaf2WithGmvWithTnrNoSap, + LbffBayerPdaf3NoGmvNoTnrNoSap, + LbffBayerPdaf3WithGmvNoTnrNoSap, + LbffBayerPdaf3NoGmvWithTnrNoSap, + LbffBayerPdaf3WithGmvWithTnrNoSap, + IsysDol, + LbffDol2InputsNoGmvNoTnrNoSap, + LbffDol2InputsWithGmvNoTnrNoSap, + LbffDol2InputsNoGmvWithTnrNoSap, + LbffDol2InputsWithGmvWithTnrNoSap, + LbffDolSmooth, + LbffDol3InputsNoGmvNoTnrNoSap, + LbffDol3InputsWithGmvNoTnrNoSap, + LbffDol3InputsNoGmvWithTnrNoSap, + LbffDol3InputsWithGmvWithTnrNoSap, + LbffRgbIrNoGmvNoTnrNoSap, + LbffRgbIrIrNoGmvNoTnrNoSap, + LbffRgbIrWithGmvNoTnrNoSap, + LbffRgbIrNoGmvWithTnrNoSap, + LbffRgbIrIrNoGmvWithTnrNoSap, + LbffRgbIrWithGmvWithTnrNoSap, + LbffIrNoGmvNoTnrNoSap, + LbffIrWithGmvNoTnrNoSap, + LbffIrNoGmvWithTnrNoSap, + LbffIrWithGmvWithTnrNoSap, + LbffBayerPdaf3asPdaf2NoGmvNoTnrNoSap, + LbffBayerPdaf3asPdaf2WithGmvNoTnrNoSap, + LbffBayerPdaf3asPdaf2NoGmvWithTnrNoSap, + LbffBayerPdaf3asPdaf2WithGmvWithTnrNoSap, + IsysWithCv, + SwSegnet, + LbffBayerNoGmvNoTnrWithSap, + LbffBayerWithGmvNoTnrWithSap, + LbffBayerNoGmvWithTnrWithSap, + LbffBayerWithGmvWithTnrWithSap, + IsysPdaf2WithCv, + LbffBayerPdaf2NoGmvNoTnrWithSap, + LbffBayerPdaf2WithGmvNoTnrWithSap, + LbffBayerPdaf2NoGmvWithTnrWithSap, + LbffBayerPdaf2WithGmvWithTnrWithSap, + LbffBayerPdaf3NoGmvNoTnrWithSap, + LbffBayerPdaf3WithGmvNoTnrWithSap, + LbffBayerPdaf3NoGmvWithTnrWithSap, + LbffBayerPdaf3WithGmvWithTnrWithSap, + IsysDolWithCv, + LbffDol2InputsNoGmvNoTnrWithSap, + LbffDol2InputsWithGmvNoTnrWithSap, + LbffDol2InputsNoGmvWithTnrWithSap, + LbffDol2InputsWithGmvWithTnrWithSap, + LbffDol3InputsNoGmvNoTnrWithSap, + LbffDol3InputsWithGmvNoTnrWithSap, + LbffDol3InputsNoGmvWithTnrWithSap, + LbffDol3InputsWithGmvWithTnrWithSap, + LbffRgbIrNoGmvNoTnrWithSap, + LbffRgbIrWithGmvNoTnrWithSap, + LbffRgbIrNoGmvWithTnrWithSap, + LbffRgbIrWithGmvWithTnrWithSap, + LbffIrNoGmvNoTnrWithSap, + LbffIrWithGmvNoTnrWithSap, + LbffIrNoGmvWithTnrWithSap, + LbffIrWithGmvWithTnrWithSap, + LbffBayerPdaf3asPdaf2NoGmvNoTnrWithSap, + LbffBayerPdaf3asPdaf2WithGmvNoTnrWithSap, + LbffBayerPdaf3asPdaf2NoGmvWithTnrWithSap, + LbffBayerPdaf3asPdaf2WithGmvWithTnrWithSap, +}; + +enum class LinkType : uint8_t { + Source2Node, + Node2Node, + Node2Sink, + Node2Self, +}; + +enum class FormatType : uint8_t { + SINGLE_PL_8_P, + SINGLE_PL_8, + SINGLE_PL_8_MSB, + SINGLE_PL_10_P, + SINGLE_PL_10, + SINGLE_PL_10_MSB, + SINGLE_PL_12_P, + SINGLE_PL_12, + SINGLE_PL_12_MSB, + SINGLE_PL_16, + YUV420_8_SP_P, + YUV420_8_SP_P_REV, + YUV420_8_SP_MSB, + YUV420_8_SP_REV_MSB, + YUV420_8_SP_LSB, + YUV420_8_SP_REV_LSB, + YUV420_10_SP_P, + YUV420_10_SP_P_REV, + YUV420_10_SP_MSB, + YUV420_10_SP_REV_MSB, + YUV420_10_SP_LSB, + YUV420_10_SP_REV_LSB, + YUV420_12_SP_P, + YUV420_12_SP_P_REV, + YUV420_12_SP_MSB, + YUV420_12_SP_REV_MSB, + YUV420_12_SP_LSB, + YUV420_12_SP_REV_LSB, + YUV420_16_SP, + YUV420_16_SP_REV, + YUV420_8_FP_P, + YUV420_8_FP_P_REV, + YUV420_8_FP_MSB, + YUV420_8_FP_REV_MSB, + YUV420_8_FP_LSB, + YUV420_8_FP_REV_LSB, + YUV420_10_FP_P, + YUV420_10_FP_P_REV, + YUV420_10_FP_MSB, + YUV420_10_FP_REV_MSB, + YUV420_10_FP_LSB, + YUV420_10_FP_REV_LSB, + YUV420_12_FP_P, + YUV420_12_FP_P_REV, + YUV420_12_FP_MSB, + YUV420_12_FP_REV_MSB, + YUV420_12_FP_LSB, + YUV420_12_FP_REV_LSB, + YUV420_16_FP, + YUV420_16_FP_REV, + META_16, + YUV420_8_SP_P_GFX, + YUV420_10_SP_MSB_GFX, + YUV420_8_1P_P, + YUV422_YUYV_8_1P_P, + YUV422_8_SP_P, + YUV422_8_SP_P_REV, + META_8, + SINGLE_PL_10_MP, + SINGLE_PL_12_MP, + RGBA_8_1P_P, + YUVRGB444_8_FP_P, + Y_8_1P_P, +}; diff --git a/modules/ipu_desc/ipu8/TerminalDescriptorAutogen.cpp b/modules/ipu_desc/ipu8/TerminalDescriptorAutogen.cpp new file mode 100644 index 0000000..49818d8 --- /dev/null +++ b/modules/ipu_desc/ipu8/TerminalDescriptorAutogen.cpp @@ -0,0 +1,379 @@ +/* + * Copyright (C) 2025 Intel Corporation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "TerminalDescriptorAutogen.h" + +TerminalDescriptor SW_ISYSTerminalDesc[] = { + { + SW_ISYS_TERMINAL_LOAD_ALGO_FRAME_IN, + TERMINAL_TYPE_LOAD, + "TERMINAL_LOAD_ALGO_FRAME_IN", + PAC_BUFFER_TYPE_PARAM_IN, + TERMINAL_BUFFER_TYPE_METADATA, + TERMINAL_DIR_IN, + 0, + }, + { + SW_ISYS_TERMINAL_LOAD_ALGO_STREAM_IN, + TERMINAL_TYPE_LOAD, + "TERMINAL_LOAD_ALGO_STREAM_IN", + PAC_BUFFER_TYPE_PROGRAM, + TERMINAL_BUFFER_TYPE_METADATA, + TERMINAL_DIR_IN, + 0, + }, + { + SW_ISYS_TERMINAL_CONNECT_INPUT_UPIPE, TERMINAL_TYPE_CONNECT, "TERMINAL_CONNECT_INPUT_UPIPE", + PAC_BUFFER_TYPE_NONE, TERMINAL_BUFFER_TYPE_DATA, TERMINAL_DIR_IN, + 36280, // crop_bpp_adjust_1_0 + }, + { + SW_ISYS_TERMINAL_CONNECT_OUTPUT_CV, TERMINAL_TYPE_CONNECT, "TERMINAL_CONNECT_OUTPUT_CV", + PAC_BUFFER_TYPE_NONE, TERMINAL_BUFFER_TYPE_DATA, TERMINAL_DIR_OUT, + 26150, // isys_drainer_1_0 + }, + { + SW_ISYS_TERMINAL_CONNECT_INPUT, TERMINAL_TYPE_CONNECT, "TERMINAL_CONNECT_INPUT", + PAC_BUFFER_TYPE_NONE, TERMINAL_BUFFER_TYPE_DATA, TERMINAL_DIR_IN, + 11470, // is_odr_a + }, + { + SW_ISYS_TERMINAL_CONNECT_OUTPUT, TERMINAL_TYPE_CONNECT, "TERMINAL_CONNECT_OUTPUT", + PAC_BUFFER_TYPE_NONE, TERMINAL_BUFFER_TYPE_DATA, TERMINAL_DIR_OUT, + 11470, // is_odr_a + }, + { + SW_ISYS_TERMINAL_CONNECT_INPUT_PDAF, TERMINAL_TYPE_CONNECT, "TERMINAL_CONNECT_INPUT_PDAF", + PAC_BUFFER_TYPE_NONE, TERMINAL_BUFFER_TYPE_DATA, TERMINAL_DIR_IN, + 55449, // is_odr_b + }, + { + SW_ISYS_TERMINAL_CONNECT_OUTPUT_PDAF, TERMINAL_TYPE_CONNECT, "TERMINAL_CONNECT_OUTPUT_PDAF", + PAC_BUFFER_TYPE_NONE, TERMINAL_BUFFER_TYPE_DATA, TERMINAL_DIR_OUT, + 55449, // is_odr_b + }, + { + SW_ISYS_TERMINAL_CONNECT_INPUT_DOL_LONG, TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_INPUT_DOL_LONG", PAC_BUFFER_TYPE_NONE, TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_IN, + 50407, // is_odr_c + }, + { + SW_ISYS_TERMINAL_CONNECT_OUTPUT_DOL_LONG, TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_OUTPUT_DOL_LONG", PAC_BUFFER_TYPE_NONE, TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_OUT, + 50407, // is_odr_c + }, +}; + +TerminalDescriptor LBFFTerminalDesc[] = { + { + LBFF_TERMINAL_LOAD_ALGO_CACHED, + TERMINAL_TYPE_LOAD, + "TERMINAL_LOAD_ALGO_CACHED", + PAC_BUFFER_TYPE_PARAM_IN, + TERMINAL_BUFFER_TYPE_METADATA, + TERMINAL_DIR_IN, + 0, + }, + { + LBFF_TERMINAL_LOAD_ALGO_FRAG_SEQ, + TERMINAL_TYPE_LOAD, + "TERMINAL_LOAD_ALGO_FRAG_SEQ", + PAC_BUFFER_TYPE_PROGRAM, + TERMINAL_BUFFER_TYPE_METADATA, + TERMINAL_DIR_IN, + 0, + }, + { + LBFF_TERMINAL_LOAD_SYSTEM, + TERMINAL_TYPE_LOAD, + "TERMINAL_LOAD_SYSTEM", + PAC_BUFFER_TYPE_SYS_FRAG_SEQUENCER, + TERMINAL_BUFFER_TYPE_METADATA, + TERMINAL_DIR_IN, + 0, + }, + { + LBFF_TERMINAL_LOAD_SR_FRAME_IN, + TERMINAL_TYPE_LOAD, + "TERMINAL_LOAD_SR_FRAME_IN", + PAC_BUFFER_TYPE_SR_FRAME_IN, + TERMINAL_BUFFER_TYPE_METADATA, + TERMINAL_DIR_IN_OUT, + 0, + }, + { + LBFF_TERMINAL_CONNECT_MAIN_DATA_INPUT, TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_MAIN_DATA_INPUT", PAC_BUFFER_TYPE_NONE, TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_IN, + 52446, // ifd_pipe_1_4 + }, + { + LBFF_TERMINAL_CONNECT_DOL_LONG_INPUT, TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_DOL_LONG_INPUT", PAC_BUFFER_TYPE_NONE, TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_IN, + 24678, // ifd_pipe_long_1_4 + }, + { + LBFF_TERMINAL_CONNECT_DOL_SHORT_SMTH_INPUT, TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_DOL_SHORT_SMTH_INPUT", PAC_BUFFER_TYPE_NONE, TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_IN, + 4386, // ifd_pipe_short_smth_1_4 + }, + { + LBFF_TERMINAL_CONNECT_LSC_INPUT, TERMINAL_TYPE_CONNECT, "TERMINAL_CONNECT_LSC_INPUT", + PAC_BUFFER_TYPE_SPATIAL_IN, TERMINAL_BUFFER_TYPE_METADATA, TERMINAL_DIR_IN, + 29313, // ifd_lsc_1_4 + }, + { + LBFF_TERMINAL_CONNECT_PDAF_DATA_INPUT, TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_PDAF_DATA_INPUT", PAC_BUFFER_TYPE_NONE, TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_IN, + 22427, // ifd_pdaf_1_4 + }, + { + LBFF_TERMINAL_CONNECT_AE_OUTPUT, TERMINAL_TYPE_CONNECT, "TERMINAL_CONNECT_AE_OUTPUT", + PAC_BUFFER_TYPE_SPATIAL_OUT, TERMINAL_BUFFER_TYPE_METADATA, TERMINAL_DIR_OUT, + 62556, // odr_ae_1_4 + }, + { + LBFF_TERMINAL_CONNECT_AF_STD_OUTPUT, TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_AF_STD_OUTPUT", PAC_BUFFER_TYPE_SPATIAL_OUT, + TERMINAL_BUFFER_TYPE_METADATA, TERMINAL_DIR_OUT, + 59136, // odr_af_std_1_4 + }, + { + LBFF_TERMINAL_CONNECT_AWB_STD_OUTPUT, TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_AWB_STD_OUTPUT", PAC_BUFFER_TYPE_SPATIAL_OUT, + TERMINAL_BUFFER_TYPE_METADATA, TERMINAL_DIR_OUT, + 38544, // odr_awb_std_1_4 + }, + { + LBFF_TERMINAL_CONNECT_AWB_SAT_OUTPUT, TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_AWB_SAT_OUTPUT", PAC_BUFFER_TYPE_SPATIAL_OUT, + TERMINAL_BUFFER_TYPE_METADATA, TERMINAL_DIR_OUT, + 1248, // odr_awb_sat_1_4 + }, + { + LBFF_TERMINAL_CONNECT_PDAF_OUTPUT, TERMINAL_TYPE_CONNECT, "TERMINAL_CONNECT_PDAF_OUTPUT", + PAC_BUFFER_TYPE_SPATIAL_OUT, TERMINAL_BUFFER_TYPE_METADATA, TERMINAL_DIR_OUT, + 26892, // odr_pdaf_1_4 + }, + { + LBFF_TERMINAL_CONNECT_IR_OUTPUT, TERMINAL_TYPE_CONNECT, "TERMINAL_CONNECT_IR_OUTPUT", + PAC_BUFFER_TYPE_NONE, TERMINAL_BUFFER_TYPE_DATA, TERMINAL_DIR_OUT, + 60297, // odr_ir_1_4 + }, + { + LBFF_TERMINAL_CONNECT_BURST_ISP_OUTPUT, TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_BURST_ISP_OUTPUT", PAC_BUFFER_TYPE_NONE, TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_OUT, + 0, // No graphs found + }, + { + LBFF_TERMINAL_CONNECT_BNLM_OUTPUT, TERMINAL_TYPE_CONNECT, "TERMINAL_CONNECT_BNLM_OUTPUT", + PAC_BUFFER_TYPE_NONE, TERMINAL_BUFFER_TYPE_DATA, TERMINAL_DIR_OUT, + 53535, // odr_bnlm_1_4 + }, + { + LBFF_TERMINAL_CONNECT_GMV_INPUT, TERMINAL_TYPE_CONNECT, "TERMINAL_CONNECT_GMV_INPUT", + PAC_BUFFER_TYPE_SPATIAL_IN, TERMINAL_BUFFER_TYPE_METADATA, TERMINAL_DIR_IN, + 51073, // ifd_gmv_1_4 + }, + { + LBFF_TERMINAL_CONNECT_AWB_SVE_OUTPUT, TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_AWB_SVE_OUTPUT", PAC_BUFFER_TYPE_SPATIAL_OUT, + TERMINAL_BUFFER_TYPE_METADATA, TERMINAL_DIR_OUT, + 53430, // odr_awb_sve_1_4 + }, + { + LBFF_TERMINAL_CONNECT_DPC_PDAF_OUTPUT, TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_DPC_PDAF_OUTPUT", PAC_BUFFER_TYPE_SPATIAL_OUT, + TERMINAL_BUFFER_TYPE_METADATA, TERMINAL_DIR_OUT, + 54812, // odr_dpc_pdaf_1_4 + }, + { + LBFF_TERMINAL_CONNECT_GMV_MATCH_OUTPUT, TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_GMV_MATCH_OUTPUT", PAC_BUFFER_TYPE_SPATIAL_OUT, + TERMINAL_BUFFER_TYPE_METADATA, TERMINAL_DIR_OUT, + 41148, // odr_gmv_match_1_4 + }, + { + LBFF_TERMINAL_CONNECT_GMV_FEATURE_OUTPUT, TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_GMV_FEATURE_OUTPUT", PAC_BUFFER_TYPE_SPATIAL_OUT, + TERMINAL_BUFFER_TYPE_METADATA, TERMINAL_DIR_OUT, + 7416, // odr_gmv_feature_1_4 + }, + { + LBFF_TERMINAL_CONNECT_BC_YUV_INPUT, TERMINAL_TYPE_CONNECT, "TERMINAL_CONNECT_BC_YUV_INPUT", + PAC_BUFFER_TYPE_NONE, TERMINAL_BUFFER_TYPE_DATA, TERMINAL_DIR_IN, + 7357, // ifd_tnr_sp_bc_yuv4nm1_1_4 + }, + { + LBFF_TERMINAL_CONNECT_BC_RS_INPUT, TERMINAL_TYPE_CONNECT, "TERMINAL_CONNECT_BC_RS_INPUT", + PAC_BUFFER_TYPE_SPATIAL_IN, TERMINAL_BUFFER_TYPE_METADATA, TERMINAL_DIR_IN, + 62054, // ifd_tnr_sp_bc_rs4nm1_1_4 + }, + { + LBFF_TERMINAL_CONNECT_BC_OUTPUT, TERMINAL_TYPE_CONNECT, "TERMINAL_CONNECT_BC_OUTPUT", + PAC_BUFFER_TYPE_SPATIAL_OUT, TERMINAL_BUFFER_TYPE_METADATA, TERMINAL_DIR_OUT, + 63731, // odr_tnr_sp_bc_rs4n_1_4 + }, + { + LBFF_TERMINAL_CONNECT_BLEND_YUV_INPUT, TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_BLEND_YUV_INPUT", PAC_BUFFER_TYPE_NONE, TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_IN, + 16295, // ifd_tnr_fp_blend_yuvnm1_1_4 + }, + { + LBFF_TERMINAL_CONNECT_BLEND_OUTPUT, TERMINAL_TYPE_CONNECT, "TERMINAL_CONNECT_BLEND_OUTPUT", + PAC_BUFFER_TYPE_NONE, TERMINAL_BUFFER_TYPE_DATA, TERMINAL_DIR_OUT, + 5215, // odr_tnr_fp_yuvn_1_4 + }, + { + LBFF_TERMINAL_CONNECT_TNR_SCALER_OUTPUT, TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_TNR_SCALER_OUTPUT", PAC_BUFFER_TYPE_NONE, TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_OUT, + 65437, // odr_tnr_scale_fp_yuv4n_1_4 + }, + { + LBFF_TERMINAL_CONNECT_OFS_MP_OUTPUT, TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_OFS_MP_OUTPUT", PAC_BUFFER_TYPE_NONE, TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_OUT, + 16460, // odr_ofs_mp_1_4 + }, + { + LBFF_TERMINAL_CONNECT_OFS_DP_OUTPUT, TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_OFS_DP_OUTPUT", PAC_BUFFER_TYPE_NONE, TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_OUT, + 37951, // odr_ofs_dp_1_4 + }, + { + LBFF_TERMINAL_CONNECT_BNLM_SM_INPUT, TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_BNLM_SM_INPUT", PAC_BUFFER_TYPE_SPATIAL_IN, TERMINAL_BUFFER_TYPE_METADATA, + TERMINAL_DIR_IN, + 35263, // ifd_segmap_bnlm_1_4 + }, + { + LBFF_TERMINAL_CONNECT_XNR_SM_INPUT, TERMINAL_TYPE_CONNECT, "TERMINAL_CONNECT_XNR_SM_INPUT", + PAC_BUFFER_TYPE_SPATIAL_IN, TERMINAL_BUFFER_TYPE_METADATA, TERMINAL_DIR_IN, + 9241, // ifd_segmap_xnr_1_4 + }, + { + LBFF_TERMINAL_CONNECT_ACM_SM_INPUT, TERMINAL_TYPE_CONNECT, "TERMINAL_CONNECT_ACM_SM_INPUT", + PAC_BUFFER_TYPE_SPATIAL_IN, TERMINAL_BUFFER_TYPE_METADATA, TERMINAL_DIR_IN, + 51914, // ifd_segmap_acm_1_4 + }, + { + LBFF_TERMINAL_CONNECT_BC_SM_INPUT, TERMINAL_TYPE_CONNECT, "TERMINAL_CONNECT_BC_SM_INPUT", + PAC_BUFFER_TYPE_SPATIAL_IN, TERMINAL_BUFFER_TYPE_METADATA, TERMINAL_DIR_IN, + 47873, // ifd_segmap_tnr_bc_1_4 + }, + { + LBFF_TERMINAL_CONNECT_BLEND_SM_INPUT, TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_BLEND_SM_INPUT", PAC_BUFFER_TYPE_SPATIAL_IN, + TERMINAL_BUFFER_TYPE_METADATA, TERMINAL_DIR_IN, + 14619, // ifd_segmap_tnr_blend_1_4 + }, + { + LBFF_TERMINAL_CONNECT_CAS_SM_INPUT, TERMINAL_TYPE_CONNECT, "TERMINAL_CONNECT_CAS_SM_INPUT", + PAC_BUFFER_TYPE_SPATIAL_IN, TERMINAL_BUFFER_TYPE_METADATA, TERMINAL_DIR_IN, + 20893, // ifd_segmap_cas_1_4 + }, + { + LBFF_TERMINAL_CONNECT_BGB_BM_INPUT, TERMINAL_TYPE_CONNECT, "TERMINAL_CONNECT_BGB_BM_INPUT", + PAC_BUFFER_TYPE_SPATIAL_IN, TERMINAL_BUFFER_TYPE_METADATA, TERMINAL_DIR_IN, + 0, // No graphs found + }, + { + LBFF_TERMINAL_CONNECT_BGB_YUV_INPUT, TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_BGB_YUV_INPUT", PAC_BUFFER_TYPE_NONE, TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_IN, + 0, // No graphs found + }, +}; + +TerminalDescriptor SW_SEGNETTerminalDesc[] = { + { + SW_SEGNET_TERMINAL_CONNECT_CV_DATA_INPUT, TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_CV_DATA_INPUT", PAC_BUFFER_TYPE_NONE, TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_DIR_IN, + 0, // sw_segnet + }, + { + SW_SEGNET_TERMINAL_CONNECT_CV_DATA_OUTPUT, TERMINAL_TYPE_CONNECT, + "TERMINAL_CONNECT_CV_DATA_OUTPUT", PAC_BUFFER_TYPE_SPATIAL_OUT, + TERMINAL_BUFFER_TYPE_METADATA, TERMINAL_DIR_OUT, + 0, // sw_segnet + }, +}; + +TerminalDescriptor SW_GDCTerminalDesc[] = { + { + SW_GDC_TERMINAL_CONNECT_INPUT, TERMINAL_TYPE_CONNECT, "TERMINAL_CONNECT_INPUT", + PAC_BUFFER_TYPE_NONE, TERMINAL_BUFFER_TYPE_DATA, TERMINAL_DIR_IN, + 5637, // gdc7_1 + }, + { + SW_GDC_TERMINAL_CONNECT_OUTPUT_1, TERMINAL_TYPE_CONNECT, "TERMINAL_CONNECT_OUTPUT_1", + PAC_BUFFER_TYPE_NONE, TERMINAL_BUFFER_TYPE_DATA, TERMINAL_DIR_OUT, + 0, // + }, + { + SW_GDC_TERMINAL_CONNECT_OUTPUT_2, TERMINAL_TYPE_CONNECT, "TERMINAL_CONNECT_OUTPUT_2", + PAC_BUFFER_TYPE_NONE, TERMINAL_BUFFER_TYPE_DATA, TERMINAL_DIR_OUT, + 0, // + }, +}; + +TerminalDescriptor SW_SCALERTerminalDesc[] = { + { + SW_SCALER_TERMINAL_CONNECT_INPUT, TERMINAL_TYPE_CONNECT, "TERMINAL_CONNECT_INPUT", + PAC_BUFFER_TYPE_NONE, TERMINAL_BUFFER_TYPE_DATA, TERMINAL_DIR_IN, + 19706, // sw_scaler + }, + { + SW_SCALER_TERMINAL_CONNECT_OUTPUT, TERMINAL_TYPE_CONNECT, "TERMINAL_CONNECT_OUTPUT", + PAC_BUFFER_TYPE_NONE, TERMINAL_BUFFER_TYPE_DATA, TERMINAL_DIR_OUT, + 19706, // sw_scaler + }, +}; + +TerminalDescriptor SW_NNTMTerminalDesc[] = { + { + SW_NNTM_TERMINAL_CONNECT_INPUT, TERMINAL_TYPE_CONNECT, "TERMINAL_CONNECT_INPUT", + PAC_BUFFER_TYPE_NONE, TERMINAL_BUFFER_TYPE_DATA, TERMINAL_DIR_IN, + 46539, // nntm_1_0 + }, + { + SW_NNTM_TERMINAL_CONNECT_OUTPUT_1, TERMINAL_TYPE_CONNECT, "TERMINAL_CONNECT_OUTPUT_1", + PAC_BUFFER_TYPE_NONE, TERMINAL_BUFFER_TYPE_DATA, TERMINAL_DIR_OUT, + 0, // + }, + { + SW_NNTM_TERMINAL_CONNECT_OUTPUT_2, TERMINAL_TYPE_CONNECT, "TERMINAL_CONNECT_OUTPUT_2", + PAC_BUFFER_TYPE_NONE, TERMINAL_BUFFER_TYPE_DATA, TERMINAL_DIR_OUT, + 0, // + }, +}; + +int CountOfSW_ISYSTerminalDesc = sizeof(SW_ISYSTerminalDesc) / sizeof(SW_ISYSTerminalDesc[0]); +int CountOfLBFFTerminalDesc = sizeof(LBFFTerminalDesc) / sizeof(LBFFTerminalDesc[0]); +int CountOfSW_SEGNETTerminalDesc = sizeof(SW_SEGNETTerminalDesc) / sizeof(SW_SEGNETTerminalDesc[0]); +int CountOfSW_GDCTerminalDesc = sizeof(SW_GDCTerminalDesc) / sizeof(SW_GDCTerminalDesc[0]); +int CountOfSW_SCALERTerminalDesc = sizeof(SW_SCALERTerminalDesc) / sizeof(SW_SCALERTerminalDesc[0]); +int CountOfSW_NNTMTerminalDesc = sizeof(SW_NNTMTerminalDesc) / sizeof(SW_NNTMTerminalDesc[0]); diff --git a/modules/ipu_desc/ipu8/TerminalDescriptorAutogen.h b/modules/ipu_desc/ipu8/TerminalDescriptorAutogen.h new file mode 100644 index 0000000..f19d7a1 --- /dev/null +++ b/modules/ipu_desc/ipu8/TerminalDescriptorAutogen.h @@ -0,0 +1,150 @@ +/* + * Copyright (C) 2025 Intel Corporation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#pragma once + +typedef enum _TerminalType { + TERMINAL_TYPE_LOAD, + TERMINAL_TYPE_CONNECT, + TERMINAL_TYPE_N +} TerminalType; + +typedef enum _PacBufferType { + PAC_BUFFER_TYPE_PARAM_IN, + PAC_BUFFER_TYPE_PARAM_OUT, + PAC_BUFFER_TYPE_PROGRAM, + PAC_BUFFER_TYPE_SPATIAL_IN, + PAC_BUFFER_TYPE_SPATIAL_OUT, + PAC_BUFFER_TYPE_FRAME_IN, + PAC_BUFFER_TYPE_FRAME_OUT, + PAC_BUFFER_TYPE_SYS_FRAG_SEQUENCER, + PAC_BUFFER_TYPE_SR_FRAME_IN, + PAC_BUFFER_TYPE_SR_FRAG_SEQUENCER, + PAC_BUFFER_TYPE_NONE, +} PacBufferType; + +typedef enum _TerminalBufferType { + TERMINAL_BUFFER_TYPE_DATA, + TERMINAL_BUFFER_TYPE_METADATA, + TERMINAL_BUFFER_TYPE_N +} TerminalBufferType; + +typedef enum _TerminalDirection { + TERMINAL_DIR_IN, + TERMINAL_DIR_OUT, + TERMINAL_DIR_IN_OUT, + TERMINAL_DIR_N +} TerminalDirection; + +typedef struct _TerminalDescriptor { + int TerminalId; + TerminalType TerminalType; + const char* TerminalName; + PacBufferType PacBufferType; + TerminalBufferType TerminalBufferType; + TerminalDirection TerminalDirection; + int TerminalLinkedKernel; +} TerminalDescriptor; + +enum SW_ISYSTerminalID { + SW_ISYS_TERMINAL_LOAD_ALGO_FRAME_IN, + SW_ISYS_TERMINAL_LOAD_ALGO_STREAM_IN, + SW_ISYS_TERMINAL_CONNECT_INPUT_UPIPE, + SW_ISYS_TERMINAL_CONNECT_OUTPUT_CV, + SW_ISYS_TERMINAL_CONNECT_INPUT, + SW_ISYS_TERMINAL_CONNECT_OUTPUT, + SW_ISYS_TERMINAL_CONNECT_INPUT_PDAF, + SW_ISYS_TERMINAL_CONNECT_OUTPUT_PDAF, + SW_ISYS_TERMINAL_CONNECT_INPUT_DOL_LONG, + SW_ISYS_TERMINAL_CONNECT_OUTPUT_DOL_LONG, +}; + +enum LBFFTerminalID { + LBFF_TERMINAL_LOAD_ALGO_CACHED, + LBFF_TERMINAL_LOAD_ALGO_FRAG_SEQ, + LBFF_TERMINAL_LOAD_SYSTEM, + LBFF_TERMINAL_LOAD_SR_FRAME_IN, + LBFF_TERMINAL_CONNECT_MAIN_DATA_INPUT, + LBFF_TERMINAL_CONNECT_DOL_LONG_INPUT, + LBFF_TERMINAL_CONNECT_DOL_SHORT_SMTH_INPUT, + LBFF_TERMINAL_CONNECT_LSC_INPUT, + LBFF_TERMINAL_CONNECT_PDAF_DATA_INPUT, + LBFF_TERMINAL_CONNECT_AE_OUTPUT, + LBFF_TERMINAL_CONNECT_AF_STD_OUTPUT, + LBFF_TERMINAL_CONNECT_AWB_STD_OUTPUT, + LBFF_TERMINAL_CONNECT_AWB_SAT_OUTPUT, + LBFF_TERMINAL_CONNECT_PDAF_OUTPUT, + LBFF_TERMINAL_CONNECT_IR_OUTPUT, + LBFF_TERMINAL_CONNECT_BURST_ISP_OUTPUT, + LBFF_TERMINAL_CONNECT_BNLM_OUTPUT, + LBFF_TERMINAL_CONNECT_GMV_INPUT, + LBFF_TERMINAL_CONNECT_AWB_SVE_OUTPUT, + LBFF_TERMINAL_CONNECT_DPC_PDAF_OUTPUT, + LBFF_TERMINAL_CONNECT_GMV_MATCH_OUTPUT, + LBFF_TERMINAL_CONNECT_GMV_FEATURE_OUTPUT, + LBFF_TERMINAL_CONNECT_BC_YUV_INPUT, + LBFF_TERMINAL_CONNECT_BC_RS_INPUT, + LBFF_TERMINAL_CONNECT_BC_OUTPUT, + LBFF_TERMINAL_CONNECT_BLEND_YUV_INPUT, + LBFF_TERMINAL_CONNECT_BLEND_OUTPUT, + LBFF_TERMINAL_CONNECT_TNR_SCALER_OUTPUT, + LBFF_TERMINAL_CONNECT_OFS_MP_OUTPUT, + LBFF_TERMINAL_CONNECT_OFS_DP_OUTPUT, + LBFF_TERMINAL_CONNECT_BNLM_SM_INPUT, + LBFF_TERMINAL_CONNECT_XNR_SM_INPUT, + LBFF_TERMINAL_CONNECT_ACM_SM_INPUT, + LBFF_TERMINAL_CONNECT_BC_SM_INPUT, + LBFF_TERMINAL_CONNECT_BLEND_SM_INPUT, + LBFF_TERMINAL_CONNECT_CAS_SM_INPUT, + LBFF_TERMINAL_CONNECT_BGB_BM_INPUT, + LBFF_TERMINAL_CONNECT_BGB_YUV_INPUT, +}; + +enum SW_SEGNETTerminalID { + SW_SEGNET_TERMINAL_CONNECT_CV_DATA_INPUT, + SW_SEGNET_TERMINAL_CONNECT_CV_DATA_OUTPUT, +}; + +enum SW_GDCTerminalID { + SW_GDC_TERMINAL_CONNECT_INPUT, + SW_GDC_TERMINAL_CONNECT_OUTPUT_1, + SW_GDC_TERMINAL_CONNECT_OUTPUT_2, +}; + +enum SW_SCALERTerminalID { + SW_SCALER_TERMINAL_CONNECT_INPUT, + SW_SCALER_TERMINAL_CONNECT_OUTPUT, +}; + +enum SW_NNTMTerminalID { + SW_NNTM_TERMINAL_CONNECT_INPUT, + SW_NNTM_TERMINAL_CONNECT_OUTPUT_1, + SW_NNTM_TERMINAL_CONNECT_OUTPUT_2, +}; + +extern TerminalDescriptor SW_ISYSTerminalDesc[]; +extern TerminalDescriptor LBFFTerminalDesc[]; +extern TerminalDescriptor SW_SEGNETTerminalDesc[]; +extern TerminalDescriptor SW_GDCTerminalDesc[]; +extern TerminalDescriptor SW_SCALERTerminalDesc[]; +extern TerminalDescriptor SW_NNTMTerminalDesc[]; + +extern int CountOfSW_ISYSTerminalDesc; +extern int CountOfLBFFTerminalDesc; +extern int CountOfSW_SEGNETTerminalDesc; +extern int CountOfSW_GDCTerminalDesc; +extern int CountOfSW_SCALERTerminalDesc; +extern int CountOfSW_NNTMTerminalDesc; diff --git a/modules/ipu_desc/ipu8/cb_payload_descriptor.h b/modules/ipu_desc/ipu8/cb_payload_descriptor.h new file mode 100644 index 0000000..23a7fe7 --- /dev/null +++ b/modules/ipu_desc/ipu8/cb_payload_descriptor.h @@ -0,0 +1,39 @@ +/* + * Copyright (C) 2025 Intel Corporation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#pragma once + +#include + +typedef struct _cb_payload_descriptor_t +{ + // from _dev_ids.h + uint32_t device_id; + + // Offset from Base address of the FF. Configuration should start from the HW register at this offset + uint32_t offset_in_device; + + // Size of the section in bytes + uint16_t payload_size; + + // Section start offset from location of terminal payload in DDR + uint16_t offset_in_payload; +} cb_payload_descriptor_t; + +typedef struct payload_descriptor_s +{ + uint32_t number_of_sections; + cb_payload_descriptor_t sections[128]; +} payload_descriptor_t; diff --git a/modules/ipu_desc/ipu8/ipu_manifest_db_ipu8_psys_cb_lbff_descriptors.h b/modules/ipu_desc/ipu8/ipu_manifest_db_ipu8_psys_cb_lbff_descriptors.h new file mode 100644 index 0000000..f5bff60 --- /dev/null +++ b/modules/ipu_desc/ipu8/ipu_manifest_db_ipu8_psys_cb_lbff_descriptors.h @@ -0,0 +1,242 @@ +/* + * INTEL CONFIDENTIAL + * Copyright (c) 2025 Intel Corporation + * All Rights Reserved. + * + * The source code contained or described herein and all documents related to + * the source code ("Material") are owned by Intel Corporation or its + * suppliers or licensors.Title to the Material remains with Intel + * Corporation or its suppliers and licensors.The Material may contain trade + * secrets and proprietary and confidential information of Intel Corporation + * and its suppliers and licensors, and is protected by worldwide copyright + * and trade secret laws and treaty provisions.No part of the Material may be + * used, copied, reproduced, modified, published, uploaded, posted, + * transmitted, distributed, or disclosed in any way without Intel's prior + * express written permission. + * + * No license under any patent, copyright, trade secret or other intellectual + * property right is granted to or conferred upon you by disclosure or + * delivery of the Materials, either expressly, by implication, inducement, + * estoppel or otherwise. Any license under such intellectual property rights + * must be express and approved by Intel in writing. + * + * Unless otherwise agreed by Intel in writing, you may not remove or alter + * this notice or any other notice embedded in Materials by Intel or Intels + * suppliers or licensors in any way. + */ + +#ifndef IPU_MANIFEST_DB_IPU8_PSYS_CB_LBFF_DESCRIPTORS_H +#define IPU_MANIFEST_DB_IPU8_PSYS_CB_LBFF_DESCRIPTORS_H + +#include +#include "cb_payload_descriptor.h" + +static payload_descriptor_t lbff_0_descriptors = { + 91, + { + {LBFF_DEVICE_ID_DOL_lite_1_2, 0x0U, 0x30U, 0x0U}, + {LBFF_DEVICE_ID_DOL_lite_1_2, 0x100U, 0xacU, 0x30U}, + {LBFF_DEVICE_ID_BXT_BLC, 0x0U, 0x24U, 0xdcU}, + {LBFF_DEVICE_ID_Linearization2_0, 0x0U, 0x2174U, 0x100U}, + {LBFF_DEVICE_ID_LSC_1_2, 0x8U, 0x134U, 0x2274U}, + {LBFF_DEVICE_ID_DPC_2_2, 0x0U, 0x200U, 0x23a8U}, + {LBFF_DEVICE_ID_DPC_2_2, 0x278U, 0xb4U, 0x25a8U}, + {LBFF_DEVICE_ID_DPC_2_2, 0x330U, 0x4U, 0x265cU}, + {LBFF_DEVICE_ID_DPC_2_2, 0x43cU, 0x44U, 0x2660U}, + {LBFF_DEVICE_ID_DPC_2_2, 0x4bcU, 0x88U, 0x26a4U}, + {LBFF_DEVICE_ID_DPC_2_2, 0x3000U, 0x4U, 0x272cU}, + {LBFF_DEVICE_ID_PEXT_1_0, 0x0U, 0x4U, 0x2730U}, + {LBFF_DEVICE_ID_PEXT_1_0, 0xcU, 0x8U, 0x2734U}, + {LBFF_DEVICE_ID_PAFStatistics_1_2, 0x0U, 0x19cU, 0x273cU}, + {LBFF_DEVICE_ID_RGBS_Grid_1_1, 0x0U, 0x38U, 0x28d8U}, + {LBFF_DEVICE_ID_CCM_3A_2_0, 0x0U, 0x44U, 0x2910U}, + {LBFF_DEVICE_ID_AEStatistics_2_1, 0x0U, 0x20U, 0x2954U}, + {LBFF_DEVICE_ID_FR_Grid_1_0, 0x0U, 0x2cU, 0x2974U}, + {LBFF_DEVICE_ID_FR_Grid_1_0, 0x30U, 0x8U, 0x29a0U}, + {LBFF_DEVICE_ID_FR_Grid_1_0, 0x3cU, 0x30U, 0x29a8U}, + {LBFF_DEVICE_ID_RGB_IR_2_0, 0x0U, 0x1cU, 0x29d8U}, + {LBFF_DEVICE_ID_RGB_IR_2_0, 0x24U, 0x1dcU, 0x29f4U}, + {LBFF_DEVICE_ID_RGB_IR_2_0, 0x204U, 0x2c8U, 0x2bd0U}, + {LBFF_DEVICE_ID_RGB_IR_2_0, 0x4d0U, 0x14U, 0x2e98U}, + {LBFF_DEVICE_ID_GD_2_2, 0x0U, 0x78U, 0x2eacU}, + {LBFF_DEVICE_ID_GD_2_2, 0x100U, 0x4U, 0x2f24U}, + {LBFF_DEVICE_ID_GD_2_2, 0x20cU, 0x4U, 0x2f28U}, + {LBFF_DEVICE_ID_WB_1_1, 0x0U, 0x30U, 0x2f2cU}, + {LBFF_DEVICE_ID_Smurf_bnlm_1_0, 0x0U, 0x8U, 0x2f5cU}, + {LBFF_DEVICE_ID_BNLM_3_4, 0x0U, 0x188U, 0x2f64U}, + {LBFF_DEVICE_ID_BNLM_3_4, 0x18cU, 0x43cU, 0x30ecU}, + {LBFF_DEVICE_ID_BNLM_3_4, 0x5dcU, 0x104U, 0x3528U}, + {LBFF_DEVICE_ID_BXT_Demosaic, 0x0U, 0x34U, 0x362cU}, + {LBFF_DEVICE_ID_VCSC_2_0_b, 0x0U, 0x24U, 0x3660U}, + {LBFF_DEVICE_ID_GLTM_2_0, 0x0U, 0x33cU, 0x3684U}, + {LBFF_DEVICE_ID_Smurf_xnr_1_0, 0x0U, 0x8U, 0x39c0U}, + {LBFF_DEVICE_ID_XNR_5_4, 0x4U, 0xcU, 0x39c8U}, + {LBFF_DEVICE_ID_XNR_5_4, 0x20U, 0x5cU, 0x39d4U}, + {LBFF_DEVICE_ID_XNR_5_4, 0x1004U, 0x18U, 0x3a30U}, + {LBFF_DEVICE_ID_XNR_5_4, 0x102cU, 0x1ccU, 0x3a48U}, + {LBFF_DEVICE_ID_XNR_5_4, 0x2000U, 0x180U, 0x3c14U}, + {LBFF_DEVICE_ID_XNR_5_4, 0x3004U, 0x38U, 0x3d94U}, + {LBFF_DEVICE_ID_XNR_5_4, 0x304cU, 0x1e4U, 0x3dccU}, + {LBFF_DEVICE_ID_XNR_5_4, 0x4000U, 0x180U, 0x3fb0U}, + {LBFF_DEVICE_ID_XNR_5_4, 0x5004U, 0x4U, 0x4130U}, + {LBFF_DEVICE_ID_XNR_5_4, 0x5020U, 0x1cU, 0x4134U}, + {LBFF_DEVICE_ID_XNR_5_4, 0x504cU, 0x1c8U, 0x4150U}, + {LBFF_DEVICE_ID_XNR_5_4, 0x6000U, 0x180U, 0x4318U}, + {LBFF_DEVICE_ID_XNR_5_4, 0x7004U, 0x1cU, 0x4498U}, + {LBFF_DEVICE_ID_XNR_5_4, 0x7024U, 0x20U, 0x44b4U}, + {LBFF_DEVICE_ID_XNR_5_4, 0x8004U, 0x48U, 0x44d4U}, + {LBFF_DEVICE_ID_XNR_5_4, 0x805cU, 0x190U, 0x451cU}, + {LBFF_DEVICE_ID_XNR_5_4, 0x9000U, 0x180U, 0x46acU}, + {LBFF_DEVICE_ID_VCR_3_1, 0x0U, 0x4U, 0x482cU}, + {LBFF_DEVICE_ID_VCR_3_1, 0x40U, 0x20U, 0x4830U}, + {LBFF_DEVICE_ID_GLIM_2_0, 0x0U, 0x328U, 0x4850U}, + {LBFF_DEVICE_ID_Smurf_acm_1_0, 0x0U, 0x8U, 0x4b78U}, + {LBFF_DEVICE_ID_ACM_1_2, 0x0U, 0x444U, 0x4b80U}, + {LBFF_DEVICE_ID_ACM_1_2, 0x470U, 0x2b0U, 0x4fc4U}, + {LBFF_DEVICE_ID_GammaTM_V4, 0x0U, 0x1c74U, 0x5274U}, + {LBFF_DEVICE_ID_CSC_1_1, 0x0U, 0x24U, 0x6ee8U}, + {LBFF_DEVICE_ID_B2I_DS_1_1, 0x0U, 0x8U, 0x6f0cU}, + {LBFF_DEVICE_ID_B2I_DS_1_1, 0x1cU, 0x208U, 0x6f14U}, + {LBFF_DEVICE_ID_TNR_Scaler_LB_1_1, 0x0U, 0x4U, 0x711cU}, + {LBFF_DEVICE_ID_TNR_Scaler_LB_1_1, 0x44U, 0x28U, 0x7120U}, + {LBFF_DEVICE_ID_GMV_Statistics_1_1, 0x0U, 0x1cU, 0x7148U}, + {LBFF_DEVICE_ID_TNR7_IMS_1_2, 0x0U, 0x18U, 0x7164U}, + {LBFF_DEVICE_ID_TNR7_IMS_1_2, 0x28U, 0xc0U, 0x717cU}, + {LBFF_DEVICE_ID_Smurf_tnr_bc_1_0, 0x0U, 0x8U, 0x723cU}, + {LBFF_DEVICE_ID_TNR7_BC_1_2, 0x0U, 0x20U, 0x7244U}, + {LBFF_DEVICE_ID_TNR7_BC_1_2, 0x100U, 0x54U, 0x7264U}, + {LBFF_DEVICE_ID_TNR7_Spatial_1_1, 0x0U, 0x10U, 0x72b8U}, + {LBFF_DEVICE_ID_TNR7_Spatial_1_1, 0x30U, 0x2cU, 0x72c8U}, + {LBFF_DEVICE_ID_TNR7_Spatial_1_1, 0x60U, 0x4U, 0x72f4U}, + {LBFF_DEVICE_ID_Smurf_tnr_blend_1_0, 0x0U, 0x8U, 0x72f8U}, + {LBFF_DEVICE_ID_TNR7_BLEND_1_1, 0x0U, 0x104U, 0x7300U}, + {LBFF_DEVICE_ID_TNR7_BLEND_1_1, 0x204U, 0x148U, 0x7404U}, + {LBFF_DEVICE_ID_TNR_Scaler_FP_1_1, 0x0U, 0x4U, 0x754cU}, + {LBFF_DEVICE_ID_TNR_Scaler_FP_1_1, 0x44U, 0x28U, 0x7550U}, + {LBFF_DEVICE_ID_image_upscaler_1_1, 0x0U, 0x4U, 0x7578U}, + {LBFF_DEVICE_ID_image_upscaler_1_1, 0x1cU, 0x40cU, 0x757cU}, + {LBFF_DEVICE_ID_Smurf_cas_1_0, 0x0U, 0x8U, 0x7988U}, + {LBFF_DEVICE_ID_CAS_1_1, 0x0U, 0x4U, 0x7990U}, + {LBFF_DEVICE_ID_CAS_1_1, 0x8U, 0x4U, 0x7994U}, + {LBFF_DEVICE_ID_CAS_1_1, 0x10U, 0x10U, 0x7998U}, + {LBFF_DEVICE_ID_CAS_1_1, 0x40U, 0x168U, 0x79a8U}, + {LBFF_DEVICE_ID_bgmap_upscaler_1_1, 0x0U, 0x4U, 0x7b10U}, + {LBFF_DEVICE_ID_bgmap_upscaler_1_1, 0x1cU, 0x40cU, 0x7b14U}, + {LBFF_DEVICE_ID_BGB_1_0, 0x0U, 0x4U, 0x7f20U}, + {LBFF_DEVICE_ID_B2I_DS_output_1_1, 0x0U, 0x8U, 0x7f24U}, + {LBFF_DEVICE_ID_B2I_DS_output_1_1, 0x1cU, 0x208U, 0x7f2cU}, + + } + +}; + +static payload_descriptor_t lbff_1_descriptors = { + 43, + { + {LBFF_DEVICE_ID_DOL_lite_1_2, 0xa0U, 0x8U, 0x0U}, + {LBFF_DEVICE_ID_LSC_1_2, 0x0U, 0x8U, 0x8U}, + {LBFF_DEVICE_ID_DPC_2_2, 0x338U, 0x104U, 0x10U}, + {LBFF_DEVICE_ID_DPC_2_2, 0x488U, 0x8U, 0x114U}, + {LBFF_DEVICE_ID_PEXT_1_0, 0x4U, 0x4U, 0x11cU}, + {LBFF_DEVICE_ID_RGBS_Grid_1_1, 0x40U, 0xcU, 0x120U}, + {LBFF_DEVICE_ID_AEStatistics_2_1, 0x24U, 0x180U, 0x12cU}, + {LBFF_DEVICE_ID_AEStatistics_2_1, 0x1c0U, 0xcU, 0x2acU}, + {LBFF_DEVICE_ID_FR_Grid_1_0, 0x80U, 0xcU, 0x2b8U}, + {LBFF_DEVICE_ID_RGB_IR_2_0, 0x1cU, 0x8U, 0x2c4U}, + {LBFF_DEVICE_ID_RGB_IR_2_0, 0x200U, 0x4U, 0x2ccU}, + {LBFF_DEVICE_ID_Smurf_bnlm_1_0, 0x10U, 0x18U, 0x2d0U}, + {LBFF_DEVICE_ID_BNLM_3_4, 0x5ccU, 0x10U, 0x2e8U}, + {LBFF_DEVICE_ID_Smurf_xnr_1_0, 0x10U, 0x18U, 0x2f8U}, + {LBFF_DEVICE_ID_XNR_5_4, 0x0U, 0x4U, 0x310U}, + {LBFF_DEVICE_ID_XNR_5_4, 0x10U, 0x10U, 0x314U}, + {LBFF_DEVICE_ID_XNR_5_4, 0x1000U, 0x4U, 0x324U}, + {LBFF_DEVICE_ID_XNR_5_4, 0x101cU, 0x10U, 0x328U}, + {LBFF_DEVICE_ID_XNR_5_4, 0x3000U, 0x4U, 0x338U}, + {LBFF_DEVICE_ID_XNR_5_4, 0x303cU, 0x10U, 0x33cU}, + {LBFF_DEVICE_ID_XNR_5_4, 0x5000U, 0x4U, 0x34cU}, + {LBFF_DEVICE_ID_XNR_5_4, 0x503cU, 0x10U, 0x350U}, + {LBFF_DEVICE_ID_XNR_5_4, 0x7000U, 0x4U, 0x360U}, + {LBFF_DEVICE_ID_XNR_5_4, 0x8000U, 0x4U, 0x364U}, + {LBFF_DEVICE_ID_XNR_5_4, 0x804cU, 0x10U, 0x368U}, + {LBFF_DEVICE_ID_Smurf_acm_1_0, 0x10U, 0x18U, 0x378U}, + {LBFF_DEVICE_ID_B2I_DS_1_1, 0x8U, 0x10U, 0x390U}, + {LBFF_DEVICE_ID_TNR_Scaler_LB_1_1, 0x40U, 0x4U, 0x3a0U}, + {LBFF_DEVICE_ID_GMV_Statistics_1_1, 0x1cU, 0xcU, 0x3a4U}, + {LBFF_DEVICE_ID_TNR7_IMS_1_2, 0x200U, 0x10U, 0x3b0U}, + {LBFF_DEVICE_ID_Smurf_tnr_bc_1_0, 0x10U, 0x18U, 0x3c0U}, + {LBFF_DEVICE_ID_TNR7_BC_1_2, 0x248U, 0x10U, 0x3d8U}, + {LBFF_DEVICE_ID_TNR7_Spatial_1_1, 0x68U, 0x10U, 0x3e8U}, + {LBFF_DEVICE_ID_Smurf_tnr_blend_1_0, 0x10U, 0x18U, 0x3f8U}, + {LBFF_DEVICE_ID_TNR_Scaler_FP_1_1, 0x40U, 0x4U, 0x410U}, + {LBFF_DEVICE_ID_image_upscaler_1_1, 0x4U, 0x18U, 0x414U}, + {LBFF_DEVICE_ID_image_upscaler_1_1, 0x1010U, 0xcU, 0x42cU}, + {LBFF_DEVICE_ID_Smurf_cas_1_0, 0x10U, 0x18U, 0x438U}, + {LBFF_DEVICE_ID_CAS_1_1, 0xcU, 0x4U, 0x450U}, + {LBFF_DEVICE_ID_CAS_1_1, 0x1a8U, 0x8U, 0x454U}, + {LBFF_DEVICE_ID_bgmap_upscaler_1_1, 0x4U, 0x18U, 0x45cU}, + {LBFF_DEVICE_ID_bgmap_upscaler_1_1, 0x1010U, 0xcU, 0x474U}, + {LBFF_DEVICE_ID_B2I_DS_output_1_1, 0x8U, 0x10U, 0x480U}, + + } + +}; + +static payload_descriptor_t lbff_2_descriptors = { + 36, + { + {LBFF_DEVICE_ID_ifd_pipe_1_4, 0x0U, 0xc4U, 0x0U}, + {LBFF_DEVICE_ID_ifd_pipe_long_1_4, 0x0U, 0xc4U, 0xc4U}, + {LBFF_DEVICE_ID_ifd_pipe_short_smth_1_4, 0x0U, 0xc4U, 0x188U}, + {LBFF_DEVICE_ID_ifd_lsc_1_4, 0x0U, 0xc4U, 0x24cU}, + {LBFF_DEVICE_ID_ifd_pdaf_1_4, 0x0U, 0xc4U, 0x310U}, + {LBFF_DEVICE_ID_odr_awb_std_1_4, 0x0U, 0xc4U, 0x3d4U}, + {LBFF_DEVICE_ID_odr_awb_sat_1_4, 0x0U, 0xc4U, 0x498U}, + {LBFF_DEVICE_ID_odr_awb_sve_1_4, 0x0U, 0xc4U, 0x55cU}, + {LBFF_DEVICE_ID_odr_ae_1_4, 0x0U, 0xc4U, 0x620U}, + {LBFF_DEVICE_ID_odr_af_std_1_4, 0x0U, 0xc4U, 0x6e4U}, + {LBFF_DEVICE_ID_odr_dpc_pdaf_1_4, 0x0U, 0xc4U, 0x7a8U}, + {LBFF_DEVICE_ID_odr_pdaf_1_4, 0x0U, 0xc4U, 0x86cU}, + {LBFF_DEVICE_ID_odr_ir_1_4, 0x0U, 0xc4U, 0x930U}, + {LBFF_DEVICE_ID_odr_burst_isp_1_4, 0x0U, 0xc4U, 0x9f4U}, + {LBFF_DEVICE_ID_ifd_segmap_bnlm_1_4, 0x0U, 0xc4U, 0xab8U}, + {LBFF_DEVICE_ID_odr_bnlm_1_4, 0x0U, 0xc4U, 0xb7cU}, + {LBFF_DEVICE_ID_ifd_segmap_xnr_1_4, 0x0U, 0xc4U, 0xc40U}, + {LBFF_DEVICE_ID_ifd_segmap_acm_1_4, 0x0U, 0xc4U, 0xd04U}, + {LBFF_DEVICE_ID_lbff_crop_espa_1_4, 0x0U, 0xcU, 0xdc8U}, + {LBFF_DEVICE_ID_lbff_crop_espa_1_4, 0x4cU, 0x14U, 0xdd4U}, + {LBFF_DEVICE_ID_ifd_gmv_1_4, 0x0U, 0xc4U, 0xde8U}, + {LBFF_DEVICE_ID_odr_gmv_feature_1_4, 0x0U, 0xc4U, 0xeacU}, + {LBFF_DEVICE_ID_odr_gmv_match_1_4, 0x0U, 0xc4U, 0xf70U}, + {LBFF_DEVICE_ID_ifd_tnr_sp_bc_yuv4nm1_1_4, 0x0U, 0xc4U, 0x1034U}, + {LBFF_DEVICE_ID_ifd_tnr_sp_bc_rs4nm1_1_4, 0x0U, 0xc4U, 0x10f8U}, + {LBFF_DEVICE_ID_ifd_segmap_tnr_bc_1_4, 0x0U, 0xc4U, 0x11bcU}, + {LBFF_DEVICE_ID_odr_tnr_sp_bc_rs4n_1_4, 0x0U, 0xc4U, 0x1280U}, + {LBFF_DEVICE_ID_ifd_tnr_fp_blend_yuvnm1_1_4, 0x0U, 0xc4U, 0x1344U}, + {LBFF_DEVICE_ID_ifd_segmap_tnr_blend_1_4, 0x0U, 0xc4U, 0x1408U}, + {LBFF_DEVICE_ID_odr_tnr_fp_yuvn_1_4, 0x0U, 0xc4U, 0x14ccU}, + {LBFF_DEVICE_ID_odr_tnr_scale_fp_yuv4n_1_4, 0x0U, 0xc4U, 0x1590U}, + {LBFF_DEVICE_ID_ifd_segmap_cas_1_4, 0x0U, 0xc4U, 0x1654U}, + {LBFF_DEVICE_ID_ifd_bgmap_1_4, 0x0U, 0xc4U, 0x1718U}, + {LBFF_DEVICE_ID_ifd_bg_yuv_1_4, 0x0U, 0xc4U, 0x17dcU}, + {LBFF_DEVICE_ID_odr_ofs_mp_1_4, 0x0U, 0xc4U, 0x18a0U}, + {LBFF_DEVICE_ID_odr_ofs_dp_1_4, 0x0U, 0xc4U, 0x1964U}, + + } + +}; + +static payload_descriptor_t lbff_3_descriptors = { + 6, + { + {LBFF_DEVICE_ID_DOL_lite_1_2, 0x200U, 0x164U, 0x0U}, + {LBFF_DEVICE_ID_TNR7_IMS_1_2, 0xe8U, 0x100U, 0x200U}, + {LBFF_DEVICE_ID_TNR7_BC_1_2, 0x300U, 0x14U, 0x400U}, + {LBFF_DEVICE_ID_TNR7_Spatial_1_1, 0x10U, 0x20U, 0x600U}, + {LBFF_DEVICE_ID_TNR7_Spatial_1_1, 0x5cU, 0x4U, 0x800U}, + {LBFF_DEVICE_ID_CAS_1_1, 0x20U, 0x20U, 0xa00U}, + + } + +}; + +#endif \ No newline at end of file diff --git a/modules/ipu_desc/ipu8/ipu_manifest_db_ipu8_psys_cb_lbff_dev_ids.h b/modules/ipu_desc/ipu8/ipu_manifest_db_ipu8_psys_cb_lbff_dev_ids.h new file mode 100644 index 0000000..b305386 --- /dev/null +++ b/modules/ipu_desc/ipu8/ipu_manifest_db_ipu8_psys_cb_lbff_dev_ids.h @@ -0,0 +1,115 @@ +/* + * INTEL CONFIDENTIAL + * Copyright (c) 2025 Intel Corporation + * All Rights Reserved. + * + * The source code contained or described herein and all documents related to + * the source code ("Material") are owned by Intel Corporation or its + * suppliers or licensors.Title to the Material remains with Intel + * Corporation or its suppliers and licensors.The Material may contain trade + * secrets and proprietary and confidential information of Intel Corporation + * and its suppliers and licensors, and is protected by worldwide copyright + * and trade secret laws and treaty provisions.No part of the Material may be + * used, copied, reproduced, modified, published, uploaded, posted, + * transmitted, distributed, or disclosed in any way without Intel's prior + * express written permission. + * + * No license under any patent, copyright, trade secret or other intellectual + * property right is granted to or conferred upon you by disclosure or + * delivery of the Materials, either expressly, by implication, inducement, + * estoppel or otherwise. Any license under such intellectual property rights + * must be express and approved by Intel in writing. + * + * Unless otherwise agreed by Intel in writing, you may not remove or alter + * this notice or any other notice embedded in Materials by Intel or Intels + * suppliers or licensors in any way. + */ + +#ifndef IPU_MANIFEST_DB_IPU8_PSYS_CB_LBFF_DEV_IDS_H +#define IPU_MANIFEST_DB_IPU8_PSYS_CB_LBFF_DEV_IDS_H + +typedef enum lbff_device_id_t { + LBFF_DEVICE_ID_ifd_pipe_1_4 = 0U, + LBFF_DEVICE_ID_ifd_pipe_long_1_4 = 1U, + LBFF_DEVICE_ID_ifd_pipe_short_smth_1_4 = 2U, + LBFF_DEVICE_ID_DOL_lite_1_2 = 3U, + LBFF_DEVICE_ID_BXT_BLC = 4U, + LBFF_DEVICE_ID_Linearization2_0 = 5U, + LBFF_DEVICE_ID_ifd_lsc_1_4 = 6U, + LBFF_DEVICE_ID_LSC_1_2 = 7U, + LBFF_DEVICE_ID_DPC_2_2 = 8U, + LBFF_DEVICE_ID_ifd_pdaf_1_4 = 9U, + LBFF_DEVICE_ID_PEXT_1_0 = 10U, + LBFF_DEVICE_ID_PAFStatistics_1_2 = 11U, + LBFF_DEVICE_ID_RGBS_Grid_1_1 = 12U, + LBFF_DEVICE_ID_CCM_3A_2_0 = 13U, + LBFF_DEVICE_ID_AEStatistics_2_1 = 14U, + LBFF_DEVICE_ID_FR_Grid_1_0 = 15U, + LBFF_DEVICE_ID_odr_awb_std_1_4 = 16U, + LBFF_DEVICE_ID_odr_awb_sat_1_4 = 17U, + LBFF_DEVICE_ID_odr_awb_sve_1_4 = 18U, + LBFF_DEVICE_ID_odr_ae_1_4 = 19U, + LBFF_DEVICE_ID_odr_af_std_1_4 = 20U, + LBFF_DEVICE_ID_odr_dpc_pdaf_1_4 = 21U, + LBFF_DEVICE_ID_odr_pdaf_1_4 = 22U, + LBFF_DEVICE_ID_SVE_RGBIR_VRT_CTRL = 23U, + LBFF_DEVICE_ID_RGB_IR_2_0 = 24U, + LBFF_DEVICE_ID_odr_ir_1_4 = 25U, + LBFF_DEVICE_ID_GD_2_2 = 26U, + LBFF_DEVICE_ID_WB_1_1 = 27U, + LBFF_DEVICE_ID_odr_burst_isp_1_4 = 28U, + LBFF_DEVICE_ID_ifd_segmap_bnlm_1_4 = 29U, + LBFF_DEVICE_ID_Smurf_bnlm_1_0 = 30U, + LBFF_DEVICE_ID_BNLM_3_4 = 31U, + LBFF_DEVICE_ID_odr_bnlm_1_4 = 32U, + LBFF_DEVICE_ID_BXT_Demosaic = 33U, + LBFF_DEVICE_ID_VCSC_2_0_b = 34U, + LBFF_DEVICE_ID_GLTM_2_0 = 35U, + LBFF_DEVICE_ID_ifd_segmap_xnr_1_4 = 36U, + LBFF_DEVICE_ID_Smurf_xnr_1_0 = 37U, + LBFF_DEVICE_ID_XNR_5_4 = 38U, + LBFF_DEVICE_ID_VCR_3_1 = 39U, + LBFF_DEVICE_ID_GLIM_2_0 = 40U, + LBFF_DEVICE_ID_ifd_segmap_acm_1_4 = 41U, + LBFF_DEVICE_ID_Smurf_acm_1_0 = 42U, + LBFF_DEVICE_ID_ACM_1_2 = 43U, + LBFF_DEVICE_ID_GammaTM_V4 = 44U, + LBFF_DEVICE_ID_CSC_1_1 = 45U, + LBFF_DEVICE_ID_B2I_DS_1_1 = 46U, + LBFF_DEVICE_ID_lbff_crop_espa_1_4 = 47U, + LBFF_DEVICE_ID_ifd_gmv_1_4 = 48U, + LBFF_DEVICE_ID_GMV_Statistics_1_1 = 49U, + LBFF_DEVICE_ID_odr_gmv_feature_1_4 = 50U, + LBFF_DEVICE_ID_odr_gmv_match_1_4 = 51U, + LBFF_DEVICE_ID_TNR_Scaler_LB_1_1 = 52U, + LBFF_DEVICE_ID_tnr_delay_vrt_ctrl = 53U, + LBFF_DEVICE_ID_ifd_tnr_sp_bc_yuv4nm1_1_4 = 54U, + LBFF_DEVICE_ID_ifd_tnr_sp_bc_rs4nm1_1_4 = 55U, + LBFF_DEVICE_ID_TNR7_IMS_1_2 = 56U, + LBFF_DEVICE_ID_ifd_segmap_tnr_bc_1_4 = 57U, + LBFF_DEVICE_ID_Smurf_tnr_bc_1_0 = 58U, + LBFF_DEVICE_ID_TNR7_BC_1_2 = 59U, + LBFF_DEVICE_ID_odr_tnr_sp_bc_rs4n_1_4 = 60U, + LBFF_DEVICE_ID_TNR7_Spatial_1_1 = 61U, + LBFF_DEVICE_ID_ifd_tnr_fp_blend_yuvnm1_1_4 = 62U, + LBFF_DEVICE_ID_ifd_segmap_tnr_blend_1_4 = 63U, + LBFF_DEVICE_ID_Smurf_tnr_blend_1_0 = 64U, + LBFF_DEVICE_ID_TNR7_BLEND_1_1 = 65U, + LBFF_DEVICE_ID_odr_tnr_fp_yuvn_1_4 = 66U, + LBFF_DEVICE_ID_TNR_Scaler_FP_1_1 = 67U, + LBFF_DEVICE_ID_odr_tnr_scale_fp_yuv4n_1_4 = 68U, + LBFF_DEVICE_ID_image_upscaler_1_1 = 69U, + LBFF_DEVICE_ID_ifd_segmap_cas_1_4 = 70U, + LBFF_DEVICE_ID_Smurf_cas_1_0 = 71U, + LBFF_DEVICE_ID_CAS_1_1 = 72U, + LBFF_DEVICE_ID_ifd_bgmap_1_4 = 73U, + LBFF_DEVICE_ID_ifd_bg_yuv_1_4 = 74U, + LBFF_DEVICE_ID_bgmap_upscaler_1_1 = 75U, + LBFF_DEVICE_ID_BGB_1_0 = 76U, + LBFF_DEVICE_ID_odr_ofs_mp_1_4 = 77U, + LBFF_DEVICE_ID_B2I_DS_output_1_1 = 78U, + LBFF_DEVICE_ID_odr_ofs_dp_1_4 = 79U, + LBFF_DEVICE_ID_N = 80U, +} lbff_device_id_t; + +#endif \ No newline at end of file diff --git a/modules/ipu_desc/ipu8/lbff_ids_array.h b/modules/ipu_desc/ipu8/lbff_ids_array.h new file mode 100644 index 0000000..0ac391f --- /dev/null +++ b/modules/ipu_desc/ipu8/lbff_ids_array.h @@ -0,0 +1,168 @@ +#include "ia_pal_types_isp_ids_autogen.h" + +static const char *lbff_id_to_dev[80] = { + "ifd_pipe_1_4", /* hwid=0 */ + "ifd_pipe_long_1_4", /* hwid=1 */ + "ifd_pipe_short_smth_1_4", /* hwid=2 */ + "DOL_lite_1_2", /* hwid=3 */ + "BXT_BLC", /* hwid=4 */ + "Linearization2_0", /* hwid=5 */ + "ifd_lsc_1_4", /* hwid=6 */ + "LSC_1_2", /* hwid=7 */ + "DPC_2_2", /* hwid=8 */ + "ifd_pdaf_1_4", /* hwid=9 */ + "PEXT_1_0", /* hwid=10 */ + "PAFStatistics_1_2", /* hwid=11 */ + "RGBS_Grid_1_1", /* hwid=12 */ + "CCM_3A_2_0", /* hwid=13 */ + "AEStatistics_2_1", /* hwid=14 */ + "FR_Grid_1_0", /* hwid=15 */ + "odr_awb_std_1_4", /* hwid=16 */ + "odr_awb_sat_1_4", /* hwid=17 */ + "odr_awb_sve_1_4", /* hwid=18 */ + "odr_ae_1_4", /* hwid=19 */ + "odr_af_std_1_4", /* hwid=20 */ + "odr_dpc_pdaf_1_4", /* hwid=21 */ + "odr_pdaf_1_4", /* hwid=22 */ + "", /* hwid=23 */ + "RGB_IR_2_0", /* hwid=24 */ + "odr_ir_1_4", /* hwid=25 */ + "GD_2_2", /* hwid=26 */ + "WB_1_1", /* hwid=27 */ + "odr_burst_isp_1_4", /* hwid=28 */ + "ifd_segmap_bnlm_1_4", /* hwid=29 */ + "Smurf_bnlm_1_0", /* hwid=30 */ + "BNLM_3_4", /* hwid=31 */ + "odr_bnlm_1_4", /* hwid=32 */ + "BXT_Demosaic", /* hwid=33 */ + "VCSC_2_0_b", /* hwid=34 */ + "GLTM_2_0", /* hwid=35 */ + "ifd_segmap_xnr_1_4", /* hwid=36 */ + "Smurf_xnr_1_0", /* hwid=37 */ + "XNR_5_4", /* hwid=38 */ + "VCR_3_1", /* hwid=39 */ + "GLIM_2_0", /* hwid=40 */ + "ifd_segmap_acm_1_4", /* hwid=41 */ + "Smurf_acm_1_0", /* hwid=42 */ + "ACM_1_2", /* hwid=43 */ + "GammaTM_V4", /* hwid=44 */ + "CSC_1_1", /* hwid=45 */ + "B2I_DS_1_1", /* hwid=46 */ + "lbff_crop_espa_1_4", /* hwid=47 */ + "ifd_gmv_1_4", /* hwid=48 */ + "GMV_Statistics_1_1", /* hwid=49 */ + "odr_gmv_feature_1_4", /* hwid=50 */ + "odr_gmv_match_1_4", /* hwid=51 */ + "TNR_Scaler_LB_1_1", /* hwid=52 */ + "", /* hwid=53 */ + "ifd_tnr_sp_bc_yuv4nm1_1_4", /* hwid=54 */ + "ifd_tnr_sp_bc_rs4nm1_1_4", /* hwid=55 */ + "TNR7_IMS_1_2", /* hwid=56 */ + "ifd_segmap_tnr_bc_1_4", /* hwid=57 */ + "Smurf_tnr_bc_1_0", /* hwid=58 */ + "TNR7_BC_1_2", /* hwid=59 */ + "odr_tnr_sp_bc_rs4n_1_4", /* hwid=60 */ + "TNR7_Spatial_1_1", /* hwid=61 */ + "ifd_tnr_fp_blend_yuvnm1_1_4", /* hwid=62 */ + "ifd_segmap_tnr_blend_1_4", /* hwid=63 */ + "Smurf_tnr_blend_1_0", /* hwid=64 */ + "TNR7_BLEND_1_1", /* hwid=65 */ + "odr_tnr_fp_yuvn_1_4", /* hwid=66 */ + "TNR_Scaler_FP_1_1", /* hwid=67 */ + "odr_tnr_scale_fp_yuv4n_1_4", /* hwid=68 */ + "image_upscaler_1_1", /* hwid=69 */ + "ifd_segmap_cas_1_4", /* hwid=70 */ + "Smurf_cas_1_0", /* hwid=71 */ + "CAS_1_1", /* hwid=72 */ + "ifd_bgmap_1_4", /* hwid=73 */ + "ifd_bg_yuv_1_4", /* hwid=74 */ + "bgmap_upscaler_1_1", /* hwid=75 */ + "BGB_1_0", /* hwid=76 */ + "odr_ofs_mp_1_4", /* hwid=77 */ + "B2I_DS_output_1_1", /* hwid=78 */ + "odr_ofs_dp_1_4" /* hwid=79 */ +}; + +static int lbff_id_to_uuid_tag[80] = { + ia_pal_uuid_isp_ifd_pipe_1_4, /* hwid=0 */ + ia_pal_uuid_isp_ifd_pipe_long_1_4, /* hwid=1 */ + ia_pal_uuid_isp_ifd_pipe_short_smth_1_4, /* hwid=2 */ + ia_pal_uuid_isp_dol_lite_1_2, /* hwid=3 */ + ia_pal_uuid_isp_bxt_blc, /* hwid=4 */ + ia_pal_uuid_isp_linearization2_0, /* hwid=5 */ + ia_pal_uuid_isp_ifd_lsc_1_4, /* hwid=6 */ + ia_pal_uuid_isp_lsc_1_2, /* hwid=7 */ + ia_pal_uuid_isp_dpc_2_2, /* hwid=8 */ + ia_pal_uuid_isp_ifd_pdaf_1_4, /* hwid=9 */ + ia_pal_uuid_isp_pext_1_0, /* hwid=10 */ + ia_pal_uuid_isp_pafstatistics_1_2, /* hwid=11 */ + ia_pal_uuid_isp_rgbs_grid_1_1, /* hwid=12 */ + ia_pal_uuid_isp_ccm_3a_2_0, /* hwid=13 */ + ia_pal_uuid_isp_aestatistics_2_1, /* hwid=14 */ + ia_pal_uuid_isp_fr_grid_1_0, /* hwid=15 */ + ia_pal_uuid_isp_odr_awb_std_1_4, /* hwid=16 */ + ia_pal_uuid_isp_odr_awb_sat_1_4, /* hwid=17 */ + ia_pal_uuid_isp_odr_awb_sve_1_4, /* hwid=18 */ + ia_pal_uuid_isp_odr_ae_1_4, /* hwid=19 */ + ia_pal_uuid_isp_odr_af_std_1_4, /* hwid=20 */ + ia_pal_uuid_isp_odr_dpc_pdaf_1_4, /* hwid=21 */ + ia_pal_uuid_isp_odr_pdaf_1_4, /* hwid=22 */ + 0, /* hwid=23 */ + ia_pal_uuid_isp_rgb_ir_2_0, /* hwid=24 */ + ia_pal_uuid_isp_odr_ir_1_4, /* hwid=25 */ + ia_pal_uuid_isp_gd_2_2, /* hwid=26 */ + ia_pal_uuid_isp_wb_1_1, /* hwid=27 */ + ia_pal_uuid_isp_odr_burst_isp_1_4, /* hwid=28 */ + ia_pal_uuid_isp_ifd_segmap_bnlm_1_4, /* hwid=29 */ + ia_pal_uuid_isp_smurf_bnlm_1_0, /* hwid=30 */ + ia_pal_uuid_isp_bnlm_3_4, /* hwid=31 */ + ia_pal_uuid_isp_odr_bnlm_1_4, /* hwid=32 */ + ia_pal_uuid_isp_bxt_demosaic, /* hwid=33 */ + ia_pal_uuid_isp_vcsc_2_0_b, /* hwid=34 */ + ia_pal_uuid_isp_gltm_2_0, /* hwid=35 */ + ia_pal_uuid_isp_ifd_segmap_xnr_1_4, /* hwid=36 */ + ia_pal_uuid_isp_smurf_xnr_1_0, /* hwid=37 */ + ia_pal_uuid_isp_xnr_5_4, /* hwid=38 */ + ia_pal_uuid_isp_vcr_3_1, /* hwid=39 */ + ia_pal_uuid_isp_glim_2_0, /* hwid=40 */ + ia_pal_uuid_isp_ifd_segmap_acm_1_4, /* hwid=41 */ + ia_pal_uuid_isp_smurf_acm_1_0, /* hwid=42 */ + ia_pal_uuid_isp_acm_1_2, /* hwid=43 */ + ia_pal_uuid_isp_gammatm_v4, /* hwid=44 */ + ia_pal_uuid_isp_csc_1_1, /* hwid=45 */ + ia_pal_uuid_isp_b2i_ds_1_1, /* hwid=46 */ + ia_pal_uuid_isp_lbff_crop_espa_1_4, /* hwid=47 */ + ia_pal_uuid_isp_ifd_gmv_1_4, /* hwid=48 */ + ia_pal_uuid_isp_gmv_statistics_1_1, /* hwid=49 */ + ia_pal_uuid_isp_odr_gmv_feature_1_4, /* hwid=50 */ + ia_pal_uuid_isp_odr_gmv_match_1_4, /* hwid=51 */ + ia_pal_uuid_isp_tnr_scaler_lb_1_1, /* hwid=52 */ + 0, /* hwid=53 */ + ia_pal_uuid_isp_ifd_tnr_sp_bc_yuv4nm1_1_4, /* hwid=54 */ + ia_pal_uuid_isp_ifd_tnr_sp_bc_rs4nm1_1_4, /* hwid=55 */ + ia_pal_uuid_isp_tnr7_ims_1_2, /* hwid=56 */ + ia_pal_uuid_isp_ifd_segmap_tnr_bc_1_4, /* hwid=57 */ + ia_pal_uuid_isp_smurf_tnr_bc_1_0, /* hwid=58 */ + ia_pal_uuid_isp_tnr7_bc_1_2, /* hwid=59 */ + ia_pal_uuid_isp_odr_tnr_sp_bc_rs4n_1_4, /* hwid=60 */ + ia_pal_uuid_isp_tnr7_spatial_1_1, /* hwid=61 */ + ia_pal_uuid_isp_ifd_tnr_fp_blend_yuvnm1_1_4, /* hwid=62 */ + ia_pal_uuid_isp_ifd_segmap_tnr_blend_1_4, /* hwid=63 */ + ia_pal_uuid_isp_smurf_tnr_blend_1_0, /* hwid=64 */ + ia_pal_uuid_isp_tnr7_blend_1_1, /* hwid=65 */ + ia_pal_uuid_isp_odr_tnr_fp_yuvn_1_4, /* hwid=66 */ + ia_pal_uuid_isp_tnr_scaler_fp_1_1, /* hwid=67 */ + ia_pal_uuid_isp_odr_tnr_scale_fp_yuv4n_1_4, /* hwid=68 */ + ia_pal_uuid_isp_image_upscaler_1_1, /* hwid=69 */ + ia_pal_uuid_isp_ifd_segmap_cas_1_4, /* hwid=70 */ + ia_pal_uuid_isp_smurf_cas_1_0, /* hwid=71 */ + ia_pal_uuid_isp_cas_1_1, /* hwid=72 */ + ia_pal_uuid_isp_ifd_bgmap_1_4, /* hwid=73 */ + ia_pal_uuid_isp_ifd_bg_yuv_1_4, /* hwid=74 */ + ia_pal_uuid_isp_bgmap_upscaler_1_1, /* hwid=75 */ + ia_pal_uuid_isp_bgb_1_0, /* hwid=76 */ + ia_pal_uuid_isp_odr_ofs_mp_1_4, /* hwid=77 */ + ia_pal_uuid_isp_b2i_ds_output_1_1, /* hwid=78 */ + ia_pal_uuid_isp_odr_ofs_dp_1_4 /* hwid=79 */ +}; + diff --git a/src/3a/AiqEngine.cpp b/src/3a/AiqEngine.cpp index a2e348f..296ae11 100644 --- a/src/3a/AiqEngine.cpp +++ b/src/3a/AiqEngine.cpp @@ -295,9 +295,6 @@ AiqEngine::AiqState AiqEngine::prepareInputParam(AiqStatistics* aiqStats, AiqRes // Update sensor info for the first-run of AIQ if (mFirstAiqRunning) { - // CRL_MODULE_S - mSensorManager->setFrameRate(aiqParams.fps); - // CRL_MODULE_E // set sensor info if needed ia_aiq_exposure_sensor_descriptor sensorDescriptor = {}; ia_aiq_frame_params frameParams = {}; diff --git a/src/3a/SensorManager.cpp b/src/3a/SensorManager.cpp index 7ab99b7..1594c16 100644 --- a/src/3a/SensorManager.cpp +++ b/src/3a/SensorManager.cpp @@ -253,12 +253,6 @@ uint32_t SensorManager::updateSensorExposure(SensorExpGroup sensorExposures, int effectSeq, applyingSeq); return static_cast(effectSeq); } -// CRL_MODULE_S -int SensorManager::setFrameRate(float fps) -{ - return mSensorHwCtrl->setFrameRate(fps); -} -// CRL_MODULE_E int SensorManager::getSensorInfo(ia_aiq_frame_params &frameParams, ia_aiq_exposure_sensor_descriptor &sensorDescriptor) { diff --git a/src/3a/SensorManager.h b/src/3a/SensorManager.h index e6549b6..6afeee4 100644 --- a/src/3a/SensorManager.h +++ b/src/3a/SensorManager.h @@ -68,9 +68,6 @@ class SensorManager { int setAWB(float r_per_g, float b_per_g); // HDR_FEATURE_E - // CRL_MODULE_S - int setFrameRate(float fps); - // CRL_MODULE_E int getCurrentExposureAppliedDelay(); uint64_t getSofTimestamp(int64_t sequence); private: diff --git a/src/core/CameraContext.h b/src/core/CameraContext.h index d7d88f4..c3f4a9d 100644 --- a/src/core/CameraContext.h +++ b/src/core/CameraContext.h @@ -24,9 +24,6 @@ #include "AiqSetting.h" #include "CameraTypes.h" #include "ParamDataType.h" -// JPEG_ENCODE_S -#include "EXIFMetaData.h" -// JPEG_ENCODE_E namespace icamera { @@ -51,30 +48,6 @@ struct IspParameters { } }; -// JPEG_ENCODE_S -struct JpegParameters { - double latitude; - double longitude; - double altitude; - char gpsProcessingMethod[MAX_NUM_GPS_PROCESSING_METHOD + 1]; - uint8_t gpsProcessingMethodSize; - int64_t gpsTimestamp; - int32_t rotation; - uint8_t jpegQuality; - uint8_t thumbQuality; - camera_resolution_t thumbSize; - float focalLength; - float aperture; - - JpegParameters() { - memset(this, 0, sizeof(*this)); - - jpegQuality = DEFAULT_JPEG_QUALITY; - thumbQuality = DEFAULT_JPEG_QUALITY; - } -}; -// JPEG_ENCODE_E - class DataContext { public: int64_t mFrameNumber; @@ -90,9 +63,6 @@ class DataContext { struct aiq_parameter_t mAiqParams; struct IspParameters mIspParams; -// JPEG_ENCODE_S - struct JpegParameters mJpegParams; -// JPEG_ENCODE_E DataContext(int cameraId); ~DataContext() {} @@ -106,9 +76,6 @@ class DataContext { zoomRegion = other.zoomRegion; mAiqParams = other.mAiqParams; mIspParams = other.mIspParams; -// JPEG_ENCODE_S - mJpegParams = other.mJpegParams; -// JPEG_ENCODE_E return *this; } diff --git a/src/core/CameraDevice.cpp b/src/core/CameraDevice.cpp index 96bac0e..33dde01 100644 --- a/src/core/CameraDevice.cpp +++ b/src/core/CameraDevice.cpp @@ -465,11 +465,6 @@ int CameraDevice::configure(stream_config_t* streamList) { CheckAndLogError(ret != OK, ret, "@%s failed to configure CSI meta device", __func__); // CSI_META_E - // CRL_MODULE_S - ret = mSensorCtrl->configure(); - CheckAndLogError(ret != OK, ret, "@%s failed to configure sensor HW", __func__); - // CRL_MODULE_E - ret = mSofSource->configure(); CheckAndLogError(ret != OK, ret, "@%s failed to configure SOF source device", __func__); diff --git a/src/core/SensorHwCtrl.cpp b/src/core/SensorHwCtrl.cpp index 65d26b7..799e02e 100644 --- a/src/core/SensorHwCtrl.cpp +++ b/src/core/SensorHwCtrl.cpp @@ -19,9 +19,6 @@ #include #include #include -// CRL_MODULE_S -#include -// CRL_MODULE_E #include "PlatformData.h" #include "SensorHwCtrl.h" @@ -35,9 +32,6 @@ namespace icamera { SensorHwCtrl::SensorHwCtrl(int cameraId, V4L2Subdevice* pixelArraySubdev, V4L2Subdevice* sensorOutputSubdev) : mPixelArraySubdev(pixelArraySubdev), - // CRL_MODULE_S - mSensorOutputSubdev(sensorOutputSubdev), - // CRL_MODULE_E mCameraId(cameraId), mHorzBlank(0), mVertBlank(0), @@ -49,21 +43,6 @@ SensorHwCtrl::SensorHwCtrl(int cameraId, V4L2Subdevice* pixelArraySubdev, mCurFll(0), mCalculatingFrameDuration(true) { LOG1(" @%s", mCameraId, __func__); - // CRL_MODULE_S - /** - * Try to call V4L2_CID_LINE_LENGTH_PIXELS, if failed, it means llp can't - * be read directly from sensor. Then calculate it with HBlank. - * fll will be in the same case. - */ - if (mPixelArraySubdev != nullptr) { - int llp = 0; - const int status = mPixelArraySubdev->GetControl(V4L2_CID_LINE_LENGTH_PIXELS, &llp); - if (status == OK) { - LOG1("%s, some sensors can get llp directly, don't calculate it", __func__); - mCalculatingFrameDuration = false; - } - } - // CRL_MODULE_E } SensorHwCtrl* SensorHwCtrl::createSensorCtrl(int cameraId) { @@ -106,12 +85,6 @@ SensorHwCtrl* SensorHwCtrl::createSensorCtrl(int cameraId) { return sensorCtrl; } -// CRL_MODULE_S -int SensorHwCtrl::configure() { - return OK; -} -// CRL_MODULE_E - int SensorHwCtrl::getActivePixelArraySize(int& width, int& height, int& pixelCode) { HAL_TRACE_CALL(CAMERA_DEBUG_LOG_LEVEL2); CheckAndLogError(mPixelArraySubdev == nullptr, NO_INIT, "pixel array sub device is not set"); @@ -150,17 +123,6 @@ int SensorHwCtrl::setExposure(const vector& coarseExposures, CheckAndLogError((coarseExposures.empty() || fineExposures.empty()), BAD_VALUE, "No exposure data!"); - // CRL_MODULE_S - if (coarseExposures.size() > 1) { - if (PlatformData::getSensorExposureType(mCameraId) == SENSOR_MULTI_EXPOSURES) { - return setMultiExposures(coarseExposures, fineExposures); - } else if (PlatformData::getSensorExposureType(mCameraId) == - SENSOR_DUAL_EXPOSURES_DCG_AND_VS) { - return setDualExposuresDCGAndVS(coarseExposures, fineExposures); - } - } - // CRL_MODULE_E - LOG2("%s coarseExposure=%d fineExposure=%d", __func__, coarseExposures[0], fineExposures[0]); LOG2("SENSORCTRLINFO: exposure_value=%d", coarseExposures[0]); int status = mPixelArraySubdev->SetControl(V4L2_CID_EXPOSURE, coarseExposures[0]); @@ -169,79 +131,11 @@ int SensorHwCtrl::setExposure(const vector& coarseExposures, return OK; } -// CRL_MODULE_S -int SensorHwCtrl::setMultiExposures(const vector& coarseExposures, - const vector& fineExposures) { - int status = BAD_VALUE; - int shortExp = coarseExposures[0]; - int longExp = coarseExposures[1]; - - if (coarseExposures.size() > 2) { - LOG2("coarseExposure[0]=%d fineExposure[0]=%d", coarseExposures[0], fineExposures[0]); - // The first exposure is very short exposure if larger than 2 exposures. - status = mPixelArraySubdev->SetControl(CRL_CID_EXPOSURE_SHS2, coarseExposures[0]); - CheckAndLogError(status != OK, status, "failed to set exposure SHS2 %d.", - coarseExposures[0]); - - shortExp = coarseExposures[1]; - longExp = coarseExposures[2]; - - LOG2("SENSORCTRLINFO: exposure_long=%d", coarseExposures[2]); // long - LOG2("SENSORCTRLINFO: exposure_med=%d", coarseExposures[1]); // short - LOG2("SENSORCTRLINFO: exposure_short=%d", coarseExposures[0]); // very short - } - - LOG2("shortExp=%d longExp=%d", shortExp, longExp); - status = mPixelArraySubdev->SetControl(CRL_CID_EXPOSURE_SHS1, shortExp); - CheckAndLogError(status != OK, status, "failed to set exposure SHS1 %d.", shortExp); - - status = mPixelArraySubdev->SetControl(V4L2_CID_EXPOSURE, longExp); - CheckAndLogError(status != OK, status, "failed to set long exposure %d.", longExp); - LOG2("SENSORCTRLINFO: exposure_value=%d", longExp); - - return status; -} - -int SensorHwCtrl::setDualExposuresDCGAndVS(const vector& coarseExposures, - const vector& fineExposures) { - int status = BAD_VALUE; - int longExp = coarseExposures[1]; - - if (coarseExposures.size() > 2) { - LOG2("coarseExposure[0]=%d fineExposure[0]=%d", coarseExposures[0], fineExposures[0]); - // The first exposure is very short exposure for DCG + VS case. - status = mPixelArraySubdev->SetControl(CRL_CID_EXPOSURE_SHS1, coarseExposures[0]); - CheckAndLogError(status != OK, status, "failed to set exposure SHS1 %d.", - coarseExposures[0]); - - longExp = coarseExposures[2]; - LOG2("SENSORCTRLINFO: exposure_long=%d", coarseExposures[2]); // long - } - - status = mPixelArraySubdev->SetControl(V4L2_CID_EXPOSURE, longExp); - CheckAndLogError(status != OK, status, "failed to set long exposure %d.", longExp); - LOG2("SENSORCTRLINFO: exposure_value=%d", longExp); - - return status; -} -// CRL_MODULE_E - int SensorHwCtrl::setAnalogGains(const vector& analogGains) { HAL_TRACE_CALL(CAMERA_DEBUG_LOG_LEVEL2); CheckAndLogError(mPixelArraySubdev == nullptr, NO_INIT, "pixel array sub device is not set"); CheckAndLogError(analogGains.empty(), BAD_VALUE, "No analog gain data!"); - // CRL_MODULE_S - if (analogGains.size() > 1) { - if (PlatformData::getSensorGainType(mCameraId) == SENSOR_MULTI_DG_AND_CONVERSION_AG) { - return setConversionGain(analogGains); - } else if (PlatformData::getSensorGainType(mCameraId) == SENSOR_MULTI_DG_AND_DIRECT_AG) { - LOG2("sensor multi conversion gain"); - return setMultiAnalogGain(analogGains); - } - } - // CRL_MODULE_E - LOG2("%s analogGain=%d", __func__, analogGains[0]); int status = mPixelArraySubdev->SetControl(V4L2_CID_ANALOGUE_GAIN, analogGains[0]); CheckAndLogError((status != 0), status, "failed to set analog gain %d.", analogGains[0]); @@ -254,26 +148,6 @@ int SensorHwCtrl::setDigitalGains(const vector& digitalGains) { CheckAndLogError(mPixelArraySubdev == nullptr, NO_INIT, "pixel array sub device is not set"); CheckAndLogError(digitalGains.empty(), BAD_VALUE, "No digital gain data!"); - // CRL_MODULE_S - if (digitalGains.size() > 1) { - if (PlatformData::getSensorGainType(mCameraId) == SENSOR_MULTI_DG_AND_CONVERSION_AG) { - return setMultiDigitalGain(digitalGains); - } else if (PlatformData::getSensorGainType(mCameraId) == SENSOR_MULTI_DG_AND_DIRECT_AG) { - LOG2("sensor multi conversion gain"); - return setMultiDigitalGain(digitalGains); - } - } - - if ((mWdrMode != 0) && - (PlatformData::getSensorGainType(mCameraId) == ISP_DG_AND_SENSOR_DIRECT_AG)) { - LOG2("%s: WDR mode, skip sensor DG, all digital gain is passed to ISP", __func__); - } else if (PlatformData::isUsingSensorDigitalGain(mCameraId)) { - if (mPixelArraySubdev->SetControl(V4L2_CID_GAIN, digitalGains[0]) != OK) { - LOGW("set digital gain failed"); - } - } - // CRL_MODULE_E - LOG2("%s digitalGain=%d", __func__, digitalGains[0]); int status = mPixelArraySubdev->SetControl(V4L2_CID_DIGITAL_GAIN, digitalGains[0]); CheckAndLogError((status != 0), status, "failed to set digitalGain gain %d.", digitalGains[0]); @@ -281,78 +155,6 @@ int SensorHwCtrl::setDigitalGains(const vector& digitalGains) { return OK; } -// CRL_MODULE_S -int SensorHwCtrl::setMultiDigitalGain(const vector& digitalGains) { - int status = BAD_VALUE; - int shortDg = digitalGains[0]; - int longDg = digitalGains[1]; - - if (digitalGains.size() > 2) { - LOG2("digitalGains[0]=%d", digitalGains[0]); - status = mPixelArraySubdev->SetControl(CRL_CID_DIGITAL_GAIN_VS, digitalGains[0]); - CheckAndLogError(status != OK, status, "failed to set very short DG %d.", digitalGains[0]); - - shortDg = digitalGains[1]; - longDg = digitalGains[2]; - } - - LOG2("shortDg=%d longDg=%d", shortDg, longDg); - status = mPixelArraySubdev->SetControl(CRL_CID_DIGITAL_GAIN_S, shortDg); - CheckAndLogError(status != OK, status, "failed to set short DG %d.", shortDg); - - status = mPixelArraySubdev->SetControl(V4L2_CID_GAIN, longDg); - CheckAndLogError(status != OK, status, "failed to set long DG %d.", longDg); - - return status; -} - -int SensorHwCtrl::setMultiAnalogGain(const vector& analogGains) { - int status = BAD_VALUE; - int shortAg = analogGains[0]; - int longAg = analogGains[1]; - - if (analogGains.size() > 2) { - LOG2("VS AG %d", analogGains[0]); - const int status = mPixelArraySubdev->SetControl(CRL_CID_ANALOG_GAIN_VS, analogGains[0]); - CheckAndLogError(status != OK, status, "failed to set VS AG %d", analogGains[0]); - - shortAg = analogGains[1]; - longAg = analogGains[2]; - - LOG2("SENSORCTRLINFO: gain_long=%d", analogGains[2]); // long - LOG2("SENSORCTRLINFO: gain_med=%d", analogGains[1]); // short - LOG2("SENSORCTRLINFO: gain_short=%d", analogGains[0]); // very short - } - - LOG2("shortAg=%d longAg=%d", shortAg, longAg); - status = mPixelArraySubdev->SetControl(CRL_CID_ANALOG_GAIN_S, shortAg); - CheckAndLogError(status != OK, status, "failed to set short AG %d.", shortAg); - - status = mPixelArraySubdev->SetControl(V4L2_CID_ANALOGUE_GAIN, longAg); - CheckAndLogError(status != OK, status, "failed to set long AG %d.", longAg); - - return status; -} - -int SensorHwCtrl::setConversionGain(const vector& analogGains) { - CheckAndLogError(analogGains.size() < 2, BAD_VALUE, "Gain data error!"); - - /* [0, 1] bits are long AG, [2, 3] bits are short AG, [4, 5] bits are very short AG. - [6] bit is long conversion gain, [7] bit is very short conversion gain. - Long AG: 0x0X0000XX - Short AG: 0x0000XX00 - Very Short AG: 0xX0XX0000 */ - int value = analogGains[0] | analogGains[1] | analogGains[2]; - LOG2("very short AG %d, short AG %d, long AG %d, conversion value %d", analogGains[0], - analogGains[1], analogGains[2], value); - - const int status = mPixelArraySubdev->SetControl(V4L2_CID_ANALOGUE_GAIN, value); - CheckAndLogError(status != OK, status, "failed to set AG %d", value); - - return OK; -} -// CRL_MODULE_E - int SensorHwCtrl::setLineLengthPixels(int llp) { int status = OK; LOG2("@%s, llp:%d", __func__, llp); @@ -362,10 +164,6 @@ int SensorHwCtrl::setLineLengthPixels(int llp) { if (mHorzBlank != horzBlank) { status = mPixelArraySubdev->SetControl(V4L2_CID_HBLANK, horzBlank); } - // CRL_MODULE_S - } else { - status = mPixelArraySubdev->SetControl(V4L2_CID_LINE_LENGTH_PIXELS, llp); - // CRL_MODULE_E } CheckAndLogError(status != OK, status, "failed to set llp. (%d)", status); @@ -383,10 +181,6 @@ int SensorHwCtrl::setFrameLengthLines(int fll) { if (mVertBlank != vertBlank) { status = mPixelArraySubdev->SetControl(V4L2_CID_VBLANK, vertBlank); } - // CRL_MODULE_S - } else { - status = mPixelArraySubdev->SetControl(V4L2_CID_FRAME_LENGTH_LINES, fll); - // CRL_MODULE_E } mCurFll = fll; @@ -424,13 +218,6 @@ int SensorHwCtrl::getLineLengthPixels(int& llp) { mHorzBlank = horzBlank; llp = horzBlank + mCropWidth; } - // CRL_MODULE_S - } else { - status = mPixelArraySubdev->GetControl(V4L2_CID_LINE_LENGTH_PIXELS, &llp); - if (status == OK) { - mHorzBlank = llp - mCropWidth; - } - // CRL_MODULE_E } LOG2("@%s, llp:%d", __func__, llp); @@ -449,13 +236,6 @@ int SensorHwCtrl::getFrameLengthLines(int& fll) { mVertBlank = vertBlank; fll = vertBlank + mCropHeight; } - // CRL_MODULE_S - } else { - status = mPixelArraySubdev->GetControl(V4L2_CID_FRAME_LENGTH_LINES, &fll); - if (status == OK) { - mVertBlank = fll - mCropHeight; - } - // CRL_MODULE_E } LOG2("@%s, fll:%d", __func__, fll); @@ -515,8 +295,6 @@ int SensorHwCtrl::getExposureRange(int& exposureMin, int& exposureMax, int& expo // HDR_FEATURE_S int SensorHwCtrl::setWdrMode(int mode) { HAL_TRACE_CALL(CAMERA_DEBUG_LOG_LEVEL2); - CheckAndLogError(mSensorOutputSubdev == nullptr, NO_INIT, "sensor output sub device is not set"); - LOG2("%s WDR Mode=%d", __func__, mode); int ret = OK; @@ -525,7 +303,6 @@ int SensorHwCtrl::setWdrMode(int mode) { if ((PlatformData::getSensorExposureType(mCameraId) != SENSOR_RELATIVE_MULTI_EXPOSURES) && (PlatformData::getSensorExposureType(mCameraId) != SENSOR_DUAL_EXPOSURES_DCG_AND_VS)) { LOG2("%s: set WDR mode", __func__); - ret = mSensorOutputSubdev->SetControl(V4L2_CID_WDR_MODE, mode); } return ret; @@ -544,38 +321,4 @@ int SensorHwCtrl::setAWB(float r_per_g, float b_per_g) { } // HDR_FEATURE_E -// CRL_MODULE_S -int SensorHwCtrl::setFrameRate(float fps) { - HAL_TRACE_CALL(CAMERA_DEBUG_LOG_LEVEL2); - CheckAndLogError(mSensorOutputSubdev == nullptr, NO_INIT, "sensor output sub device is not set"); - - struct v4l2_queryctrl query; - CLEAR(query); - query.id = V4L2_CID_LINK_FREQ; - int status = mSensorOutputSubdev->QueryControl(&query); - CheckAndLogError(status != OK, status, "Couldn't get V4L2_CID_LINK_FREQ, status:%d", status); - - LOG2("@%s, query V4L2_CID_LINK_FREQ:, default_value:%d, maximum:%d, minimum:%d, step:%d", - __func__, query.default_value, query.maximum, query.minimum, query.step); - - int mode = 0; - if (query.maximum == query.minimum) { - mode = query.default_value; - } else { - /*********************************************************************************** - * WA: This heavily depends on sensor driver implementation, need to find a graceful - * solution. - * imx185: - * When fps larger than 30, should switch to high speed mode, currently only - * 0, 1, 2 are available. 0 means 720p 30fps, 1 means 2M 30fps, and 2 means 2M 60fps. - * imx290: - * 0 and 1 available, for 30 and higher FPS. - ***********************************************************************************/ - mode = (fps > 30) ? query.maximum : (query.maximum - 1); - } - LOG2("@%s, set V4L2_CID_LINK_FREQ to %d, fps %f", __func__, mode, fps); - return mSensorOutputSubdev->SetControl(V4L2_CID_LINK_FREQ, mode); -} -// CRL_MODULE_E - } // namespace icamera diff --git a/src/core/SensorHwCtrl.h b/src/core/SensorHwCtrl.h index 1963eb3..171751f 100644 --- a/src/core/SensorHwCtrl.h +++ b/src/core/SensorHwCtrl.h @@ -32,9 +32,6 @@ class SensorHwCtrl { SensorHwCtrl(int cameraId, V4L2Subdevice* pixelArraySubdev, V4L2Subdevice* sensorOutputSubdev); virtual ~SensorHwCtrl() {} - // CRL_MODULE_S - virtual int configure(); - // CRL_MODULE_E virtual int setTestPatternMode(int32_t testPatternMode); virtual int getPixelRate(int& pixelRate); virtual int setExposure(const std::vector& coarseExposures, @@ -69,29 +66,13 @@ class SensorHwCtrl { virtual int setAWB(float r_per_g, float b_per_g); // HDR_FEATURE_E - // CRL_MODULE_S - virtual int setFrameRate(float fps); - // CRL_MODULE_E private: int setLineLengthPixels(int llp); int getLineLengthPixels(int& llp); int setFrameLengthLines(int fll); int getFrameLengthLines(int& fll); - // CRL_MODULE_S - int setMultiExposures(const std::vector& coarseExposures, - const std::vector& fineExposures); - int setDualExposuresDCGAndVS(const std::vector& coarseExposures, - const std::vector& fineExposures); - int setConversionGain(const std::vector& analogGains); - int setMultiDigitalGain(const std::vector& digitalGains); - int setMultiAnalogGain(const std::vector& analogGains); - // CRL_MODULE_E - V4L2Subdevice* mPixelArraySubdev; - // CRL_MODULE_S - V4L2Subdevice* mSensorOutputSubdev; - // CRL_MODULE_E int mCameraId; int mHorzBlank; int mVertBlank; @@ -137,9 +118,6 @@ class DummySensor : public SensorHwCtrl { // HDR_FEATURE_S virtual int setWdrMode(int mode) { return OK; } // HDR_FEATURE_E - // CRL_MODULE_S - virtual int setFrameRate(float fps) { return OK; } - // CRL_MODULE_E }; } // namespace icamera diff --git a/src/core/SwPostProcessUnit.cpp b/src/core/SwPostProcessUnit.cpp index 60ef096..60c2d83 100644 --- a/src/core/SwPostProcessUnit.cpp +++ b/src/core/SwPostProcessUnit.cpp @@ -164,25 +164,6 @@ status_t SwPostProcessUnit::configure(const stream_t& srcStream, const stream_t& processingOrder.push_back(info); } -// JPEG_ENCODE_S - // Encode - if (dstStream.format == V4L2_PIX_FMT_JPEG && - mPostProcessorCore->isPostProcessTypeSupported(POST_PROCESS_JPEG_ENCODING)) { - mPostProcessType |= POST_PROCESS_JPEG_ENCODING; - info.type = POST_PROCESS_JPEG_ENCODING; - info.inputInfo = inputStreamInfo; - info.outputInfo.width = dstStream.width; - info.outputInfo.height = dstStream.height; - info.outputInfo.stride = dstStream.width; - info.outputInfo.format = V4L2_PIX_FMT_NV12; // should get the actual format - info.outputInfo.size = - CameraUtils::getFrameSize(info.outputInfo.format, info.outputInfo.width, - info.outputInfo.height, false, false, false); - inputStreamInfo = info.outputInfo; - processingOrder.push_back(info); - } -// JPEG_ENCODE_E - if (inputStreamInfo.width != dstStream.width || inputStreamInfo.height != dstStream.height) { //inputStreamInfo.format != diff --git a/src/core/processingUnit/CBStage.cpp b/src/core/processingUnit/CBStage.cpp index 7375181..34b6c75 100644 --- a/src/core/processingUnit/CBStage.cpp +++ b/src/core/processingUnit/CBStage.cpp @@ -305,13 +305,19 @@ void CBStage::updateInfoAndSendEvents(StageTask* task) { bufferEvent.data.stageBufReady.uuid = item.first; bufferEvent.buffer = item.second; +#ifdef IPU_SYSVER_ipu8 + if (CameraDump::isDumpTypeEnable(DUMP_PSYS_OUTPUT_BUFFER) && + (mResourceId == NODE_RESOURCE_ID_LBFF)) { + CameraDump::dumpImage(mCameraId, item.second, M_PSYS, item.first); + } +#else if ((CameraDump::isDumpTypeEnable(DUMP_PSYS_OUTPUT_BUFFER) && (mResourceId == NODE_RESOURCE_ID_BBPS)) || (CameraDump::isDumpTypeEnable(DUMP_PSYS_INTERM_BUFFER) && (mResourceId == NODE_RESOURCE_ID_LBFF))) { CameraDump::dumpImage(mCameraId, item.second, M_PSYS, item.first); } - +#endif notifyListeners(bufferEvent); } if (mHasStatsTerminal) { diff --git a/src/hal/hal_adaptor/CMakeLists.txt b/src/hal/hal_adaptor/CMakeLists.txt index 9479a4f..9b645c9 100644 --- a/src/hal/hal_adaptor/CMakeLists.txt +++ b/src/hal/hal_adaptor/CMakeLists.txt @@ -69,9 +69,6 @@ target_link_libraries(hal_adaptor rt) # Install headers install(DIRECTORY ${ROOT_DIR}/include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/libcamhal) -if (SUPPORT_LIVE_TUNING) - install(FILES ${ROOT_DIR}/modules/livetune/LiveTuning.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/libcamhal/api) -endif() # Install libraries if (${CMAKE_VERSION} VERSION_LESS 3.11) diff --git a/src/hal/hal_adaptor/HalAdaptor.cpp b/src/hal/hal_adaptor/HalAdaptor.cpp index 25d8d0c..65c4d70 100644 --- a/src/hal/hal_adaptor/HalAdaptor.cpp +++ b/src/hal/hal_adaptor/HalAdaptor.cpp @@ -109,6 +109,8 @@ static void load_camera_hal_library() { libName += "ipu7x"; } else if (strstr(gPciId, "0xb05d") != nullptr /* PTL */) { libName += "ipu75xa"; + } else if (strstr(gPciId, "0xd719") != nullptr /* NVL */) { + libName += "ipu8"; } else if (strstr(gPciId, "0x9a19") != nullptr /* TGL */) { libName += "ipu6"; } else if (strstr(gPciId, "0x4e19") != nullptr /* JSL */) { diff --git a/src/image_process/PostProcessorBase.cpp b/src/image_process/PostProcessorBase.cpp index 8143c17..5d8639c 100644 --- a/src/image_process/PostProcessorBase.cpp +++ b/src/image_process/PostProcessorBase.cpp @@ -111,210 +111,4 @@ status_t ConvertProcess::doPostProcessing(const shared_ptr& inBuf, return OK; } -// JPEG_ENCODE_S -JpegProcess::JpegProcess(int cameraId) - : PostProcessorBase("JpegEncode"), - mCameraId(cameraId), - mCropBuf(nullptr), - mScaleBuf(nullptr), - mThumbOut(nullptr), - mExifData(nullptr) { - LOG1("@%s create jpeg encode processor", __func__); - - mProcessor = IImageProcessor::createImageProcessor(); - mJpegEncoder = IJpegEncoder::createJpegEncoder(); - mMemoryType = mJpegEncoder->getMemoryType(); - mJpegMaker = std::unique_ptr(new JpegMaker()); -} - -void JpegProcess::attachJpegBlob(const EncodePackage& package) { - LOG2("@%s, encoded data size: %d, exif data size: %d", __func__, package.encodedDataSize, - package.exifDataSize); - uint8_t* resultPtr = static_cast(package.outputData) + package.outputSize - - sizeof(struct camera3_jpeg_blob); - - // save jpeg size at the end of file - auto* blob = reinterpret_cast(resultPtr); - blob->jpeg_blob_id = CAMERA3_JPEG_BLOB_ID; - blob->jpeg_size = package.encodedDataSize + package.exifDataSize; -} - -std::shared_ptr JpegProcess::cropAndDownscaleThumbnail( - int thumbWidth, int thumbHeight, const shared_ptr& inBuf) { - LOG2("@%s, input size: %dx%d, thumbnail info: %dx%d", __func__, - inBuf->getWidth(), inBuf->getHeight(), thumbWidth, thumbHeight); - - if (thumbWidth <= 0 || thumbHeight <= 0) { - LOGW("@%s, skip, thumbWidth:%d, thumbHeight:%d", __func__, thumbWidth, thumbHeight); - return nullptr; - } - - int ret = OK; - shared_ptr tempBuffer = inBuf; - - // Do crop first if needed - if (IImageProcessor::isProcessingTypeSupported(POST_PROCESS_CROP) && - inBuf->getWidth() * thumbHeight != inBuf->getHeight() * thumbWidth) { - int width = 0, height = 0; - if (inBuf->getWidth() * thumbHeight < inBuf->getHeight() * thumbWidth) { - width = inBuf->getWidth(); - height = ALIGN(inBuf->getWidth() * thumbHeight / thumbWidth, 2); - } else { - width = ALIGN(inBuf->getHeight() * thumbWidth / thumbHeight, 2); - height = inBuf->getHeight(); - } - - if (mCropBuf && (mCropBuf->getWidth() != width || mCropBuf->getHeight() != height)) { - mCropBuf.reset(); - } - if (!mCropBuf) { - int bufSize = CameraUtils::getFrameSize(inBuf->getFormat(), width, height, - false, false, false); - mCropBuf = CameraBuffer::create(mMemoryType, bufSize, 0, inBuf->getFormat(), - width, height); - CheckAndLogError(!mCropBuf, nullptr, - "%s, Failed to allocate the internal crop buffer", __func__); - } - - LOG2("@%s, Crop the main buffer from %dx%d to %dx%d", __func__, inBuf->getWidth(), - inBuf->getHeight(), width, height); - ret = mProcessor->cropFrame(inBuf, mCropBuf); - CheckAndLogError(ret != OK, nullptr, "%s, Failed to crop the frame", __func__); - tempBuffer = mCropBuf; - } - - if (IImageProcessor::isProcessingTypeSupported(POST_PROCESS_SCALING)) { - if (mScaleBuf && - (mScaleBuf->getWidth() != thumbWidth || mScaleBuf->getHeight() != thumbHeight)) - mScaleBuf.reset(); - if (!mScaleBuf) { - int bufSize = CameraUtils::getFrameSize(inBuf->getFormat(), thumbWidth, thumbHeight, - false, false, false); - mScaleBuf = CameraBuffer::create(mMemoryType, bufSize, 0, inBuf->getFormat(), - thumbWidth, thumbHeight); - CheckAndLogError(!mScaleBuf, nullptr, - "%s, Failed to allocate the internal crop buffer", __func__); - } - - LOG2("@%s, Scale the buffer from %dx%d to %dx%d", __func__, inBuf->getWidth(), - inBuf->getHeight(), thumbWidth, thumbHeight); - ret = mProcessor->scaleFrame(tempBuffer, mScaleBuf); - CheckAndLogError(ret != OK, nullptr, "%s, Failed to crop the frame", __func__); - tempBuffer = mScaleBuf; - } - - if (tempBuffer->getWidth() != thumbWidth || tempBuffer->getHeight() != thumbHeight) { - LOGE("%s, Failed to crop & downscale the main buffer to thumbnail buffer", __func__); - return nullptr; - } - - return tempBuffer; -} - -void JpegProcess::fillEncodeInfo(const shared_ptr& inBuf, - const shared_ptr& outBuf, - EncodePackage& package) { - package.inputWidth = inBuf->getWidth(); - package.inputHeight = inBuf->getHeight(); - package.inputStride = inBuf->getStride(); - package.inputFormat = inBuf->getFormat(); - package.inputSize = inBuf->getBufferSize(); - - if (inBuf->getMemory() == V4L2_MEMORY_DMABUF && outBuf->getMemory() == V4L2_MEMORY_DMABUF) { - camera_buffer_t* uInBuf = inBuf->getUserBuffer(); - package.inputBufferHandle = &(uInBuf->privateHandle); - - camera_buffer_t* uOutBuf = outBuf->getUserBuffer(); - package.outputBufferHandle = &(uOutBuf->privateHandle); - } - - package.inputData = inBuf->getBufferAddr(); - package.outputData = outBuf->getBufferAddr(); - - package.outputWidth = outBuf->getWidth(); - package.outputHeight = outBuf->getHeight(); - package.outputSize = outBuf->getBufferSize(); -} - -status_t JpegProcess::doPostProcessing(const shared_ptr& inBuf, - shared_ptr& outBuf) { - PERF_CAMERA_ATRACE_PARAM1(mName.c_str(), 0); - LOG1("@%s processor name: %s", __func__, mName.c_str()); - - bool isEncoded = false; - - icamera::ExifMetaData exifMetadata; - status_t status = mJpegMaker->setupExifWithMetaData(inBuf->getWidth(), inBuf->getHeight(), - inBuf->getSequence(), TIMEVAL2NSECS(inBuf->getTimestamp()),mCameraId, - &exifMetadata); - CheckAndLogError(status != OK, UNKNOWN_ERROR, "@%s, Setup exif metadata failed.", __func__); - LOG2("@%s: setting exif metadata done!", __func__); - - std::shared_ptr thumbInput = cropAndDownscaleThumbnail( - exifMetadata.mJpegSetting.thumbWidth, exifMetadata.mJpegSetting.thumbHeight, inBuf); - - EncodePackage thumbnailPackage; - if (thumbInput) { - if (mThumbOut == nullptr || - mThumbOut->getWidth() != exifMetadata.mJpegSetting.thumbWidth || - mThumbOut->getHeight() != exifMetadata.mJpegSetting.thumbHeight || - mThumbOut->getFormat() != outBuf->getFormat()) { - int bufSize = CameraUtils::getFrameSize(inBuf->getFormat(), - exifMetadata.mJpegSetting.thumbWidth, - exifMetadata.mJpegSetting.thumbHeight, - false, false, false); - - mThumbOut = CameraBuffer::create(mMemoryType, bufSize, 0, V4L2_PIX_FMT_JPEG, - exifMetadata.mJpegSetting.thumbWidth, - exifMetadata.mJpegSetting.thumbHeight); - CheckAndLogError(!mThumbOut, NO_MEMORY, - "%s, Failed to allocate the internal crop buffer", __func__); - } - - // encode thumbnail image - fillEncodeInfo(thumbInput, mThumbOut, thumbnailPackage); - thumbnailPackage.quality = exifMetadata.mJpegSetting.jpegThumbnailQuality; - // the exifDataSize should be 0 for encoding thumbnail - thumbnailPackage.exifData = nullptr; - thumbnailPackage.exifDataSize = 0; - - do { - isEncoded = mJpegEncoder->doJpegEncode(&thumbnailPackage); - thumbnailPackage.quality -= 5; - } while (thumbnailPackage.encodedDataSize > THUMBNAIL_SIZE_LIMITATION && - thumbnailPackage.quality > 0); - - if (!isEncoded || thumbnailPackage.quality < 0) { - LOGW( - "Failed to generate thumbnail, isEncoded: %d, encoded thumbnail size: %d, " - "quality:%d", - isEncoded, thumbnailPackage.encodedDataSize, thumbnailPackage.quality); - } - } - - // save exif data - uint32_t exifBufSize = ENABLE_APP2_MARKER ? EXIF_SIZE_LIMITATION * 2 : EXIF_SIZE_LIMITATION; - if (mExifData == nullptr) { - mExifData = std::unique_ptr(new unsigned char[exifBufSize]); - } - uint8_t* finalExifDataPtr = static_cast(mExifData.get()); - uint32_t finalExifDataSize = 0; - status = mJpegMaker->getExif(thumbnailPackage, finalExifDataPtr, &finalExifDataSize); - CheckAndLogError(status != OK, status, "@%s, Failed to get Exif", __func__); - LOG2("%s, exifBufSize %d, finalExifDataSize %d", __func__, exifBufSize, finalExifDataSize); - - // encode main image - EncodePackage finalEncodePackage; - fillEncodeInfo(inBuf, outBuf, finalEncodePackage); - finalEncodePackage.quality = exifMetadata.mJpegSetting.jpegQuality; - finalEncodePackage.exifData = finalExifDataPtr; - finalEncodePackage.exifDataSize = finalExifDataSize; - isEncoded = mJpegEncoder->doJpegEncode(&finalEncodePackage); - CheckAndLogError(!isEncoded, UNKNOWN_ERROR, "@%s, Failed to encode main image", __func__); - mJpegMaker->writeExifData(&finalEncodePackage); - attachJpegBlob(finalEncodePackage); - - return OK; -} -// JPEG_ENCODE_E } // namespace icamera diff --git a/src/image_process/PostProcessorBase.h b/src/image_process/PostProcessorBase.h index f19833b..b6b71e0 100644 --- a/src/image_process/PostProcessorBase.h +++ b/src/image_process/PostProcessorBase.h @@ -22,11 +22,6 @@ #include "IImageProcessor.h" #include "iutils/Errors.h" #include "iutils/Utils.h" -// JPEG_ENCODE_S -#include "EXIFMetaData.h" -#include "IJpegEncoder.h" -#include "JpegMaker.h" -// JPEG_ENCODE_E namespace icamera { @@ -88,34 +83,4 @@ class ConvertProcess : public PostProcessorBase { std::shared_ptr& outBuf); }; -// JPEG_ENCODE_S -class JpegProcess : public PostProcessorBase { - public: - JpegProcess(int cameraId); - ~JpegProcess(){} - - virtual status_t doPostProcessing(const std::shared_ptr& inBuf, - std::shared_ptr& outBuf); - - private: - void attachJpegBlob(const EncodePackage& package); - - std::shared_ptr cropAndDownscaleThumbnail( - int thumbWidth, int thumbHeight, const std::shared_ptr& inBuf); - void fillEncodeInfo(const std::shared_ptr& inBuf, - const std::shared_ptr& outBuf, - EncodePackage& package); - - private: - int mCameraId; - - std::shared_ptr mCropBuf; - std::shared_ptr mScaleBuf; - std::shared_ptr mThumbOut; - - std::unique_ptr mJpegMaker; - std::unique_ptr mJpegEncoder; - std::unique_ptr mExifData; -}; -// JPEG_ENCODE_E } // namespace icamera diff --git a/src/image_process/PostProcessorCore.cpp b/src/image_process/PostProcessorCore.cpp index bc5bb37..41e1282 100644 --- a/src/image_process/PostProcessorCore.cpp +++ b/src/image_process/PostProcessorCore.cpp @@ -49,11 +49,6 @@ status_t PostProcessorCore::createProcessor() { case POST_PROCESS_CONVERT: processor = std::make_shared(); break; -// JPEG_ENCODE_S - case POST_PROCESS_JPEG_ENCODING: - processor = std::make_shared(mCameraId); - break; -// JPEG_ENCODE_E case POST_PROCESS_NONE: break; default: diff --git a/src/meson.build b/src/meson.build index 16498dd..908c004 100644 --- a/src/meson.build +++ b/src/meson.build @@ -47,12 +47,6 @@ libcamera_sources += files([ # FILE_SOURCE_S 'core/FileSource.cpp', # FILE_SOURCE_E -# PNP_DEBUG_S - 'platformdata/PnpDebugControl.cpp', - 'core/processingUnit/PipeManagerStub.cpp', - 'iutils/SwImageConverter.cpp', - 'core/MockPSysDevice.cpp', -# PNP_DEBUG_E 'iutils/CameraDump.cpp', 'iutils/CameraLog.cpp', 'iutils/PerfettoTrace.cpp', @@ -92,26 +86,3 @@ includes += include_directories( '3a/intel3a', '3a', ) -# POST_PROCESS_FEATURE_S -if get_option('android_platform').contains('cros') - libcamera_sources += files([ - 'core/processingUnit/PostProcessStage.cpp', - 'core/SwPostProcessUnit.cpp', - 'image_process/sw/ImageConverter.cpp', - 'image_process/sw/ImageScalerCore.cpp', - 'image_process/PostProcessorBase.cpp', - 'image_process/PostProcessorCore.cpp', -# GPU_GLES_PROCESSOR_S - 'image_process/gpu/GPUPostProcessor.cpp', -# GPU_GLES_PROCESSOR_E - 'image_process/chrome/ImageProcessorCore.cpp', - ]) - - includes += include_directories( - 'image_process', - 'image_process/sw', - 'image_process/gpu', - 'image_process/chrome', - ) -endif -# POST_PROCESS_FEATURE_E diff --git a/src/metadata/CMakeLists.txt b/src/metadata/CMakeLists.txt index 1d759a5..c3ac24c 100644 --- a/src/metadata/CMakeLists.txt +++ b/src/metadata/CMakeLists.txt @@ -22,7 +22,7 @@ set(METADATA_SRCS CACHE INTERNAL "metadata sources" ) - set(METADATA_SRCS - ${METADATA_SRCS} - CACHE INTERNAL "metadata sources" - ) +set(METADATA_SRCS + ${METADATA_SRCS} + CACHE INTERNAL "metadata sources" + ) diff --git a/src/platformdata/CMakeLists.txt b/src/platformdata/CMakeLists.txt index 39b624e..40df9ab 100644 --- a/src/platformdata/CMakeLists.txt +++ b/src/platformdata/CMakeLists.txt @@ -29,12 +29,12 @@ set(PLATFORMDATA_SRCS ${PLATFORMDATA_SRCS} ) # IPU7_SOURCE_FILE_E - set(PLATFORMDATA_SRCS - ${PLATFORMDATA_SRCS} - ${PLATFORMDATA_DIR}/AiqInitData.cpp - ${PLATFORMDATA_DIR}/gc/GraphUtils.cpp - ${PLATFORMDATA_DIR}/gc/GraphConfigManager.cpp - ${PLATFORMDATA_DIR}/gc/GraphConfig.cpp - CACHE INTERNAL "platformdata sources" - ) +set(PLATFORMDATA_SRCS + ${PLATFORMDATA_SRCS} + ${PLATFORMDATA_DIR}/AiqInitData.cpp + ${PLATFORMDATA_DIR}/gc/GraphUtils.cpp + ${PLATFORMDATA_DIR}/gc/GraphConfigManager.cpp + ${PLATFORMDATA_DIR}/gc/GraphConfig.cpp + CACHE INTERNAL "platformdata sources" + ) diff --git a/src/platformdata/CameraSensorsParser.cpp b/src/platformdata/CameraSensorsParser.cpp index 4212ae4..c5a4633 100644 --- a/src/platformdata/CameraSensorsParser.cpp +++ b/src/platformdata/CameraSensorsParser.cpp @@ -23,10 +23,6 @@ #include #include -// CRL_MODULE_S -#include - -// CRL_MODULE_E #include "iutils/CameraLog.h" namespace icamera { @@ -161,13 +157,6 @@ std::map ctlCmdMapTable = { // HDR_FEATURE_S {"V4L2_CID_WDR_MODE", V4L2_CID_WDR_MODE}, // HDR_FEATURE_E -// CRL_MODULE_S - {"V4L2_CID_LINE_LENGTH_PIXELS", V4L2_CID_LINE_LENGTH_PIXELS}, - {"V4L2_CID_FRAME_LENGTH_LINES", V4L2_CID_FRAME_LENGTH_LINES}, - {"CRL_CID_SENSOR_MODE", CRL_CID_SENSOR_MODE}, - {"CRL_CID_EXPOSURE_MODE", CRL_CID_EXPOSURE_MODE}, - {"CRL_CID_EXPOSURE_HDR_RATIO", CRL_CID_EXPOSURE_HDR_RATIO}, -// CRL_MODULE_E }; void CameraSensorsParser::parseMediaCtlControlObject(const Json::Value& node, MediaCtlConf* conf) { for (Json::Value::ArrayIndex i = 0; i < node.size(); ++i) { diff --git a/src/platformdata/gc/GraphConfig.cpp b/src/platformdata/gc/GraphConfig.cpp index 423fb63..0ad63cf 100644 --- a/src/platformdata/gc/GraphConfig.cpp +++ b/src/platformdata/gc/GraphConfig.cpp @@ -858,6 +858,10 @@ void GraphConfig::fillConnectionConfig(const IpuGraphLink& ipuLink, int32_t term status_t GraphConfig::updateGraphSettingForPtz(const PtzInfo& cur, const PtzInfo& prev, bool* isKeyResChanged) { +#ifdef IPU_SYSVER_ipu8 + // TODO: Will implement Zoom with APP + return INVALID_OPERATION; +#else RegionOfInterest cRoi = {cur.zoomRatio, cur.x, cur.y, false}; RegionOfInterest rRoi = {prev.zoomRatio, prev.x, prev.y, false}; @@ -881,6 +885,7 @@ status_t GraphConfig::updateGraphSettingForPtz(const PtzInfo& cur, const PtzInfo dumpNodes(info); } return OK; +#endif } void GraphConfig::dumpLink(const GraphLink* link) {